Linux 中使用 locate 命令查找文件

414 阅读3分钟

这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

Linux 系统中有两款用于查找文件的工具,一个是find命令,另一个就是locate命令,find在之前的文章:Linux 中使用 find 命令查找文件 已经说过,本篇文章就来介绍一下locate命令。

locate的特点是不搜索具体目录,而是先建立一个locate数据库,这个数据库存放了本地所有文件信息,然后在数据库中按照文件名进行搜索,因此速度较快,但是,该数据库不是实时更新的,查不到最新变动过的文件,为了避免这种情况,在使用locate之前,需要先使用updatedb命令手动更新一次数据库。

locate的使用

Linux上有一个mlocate包,它是locate/updatedb的一种实现,可以通过yum install mlocate进行安装。 安装完成后,通过updatedb命令手动更新一次,会在/var/lib/mlocate目录下生成一个mlocate.db数据库,存放着本地所有文件信息。

语法格式

locate [options] 文件名

常用选项

  • -b:搜索文件名包含关键词的的文件
  • -c:统计搜索到的总数
  • -i:忽略大小写
  • -l:限制输出条目
  • -n:最多显示n个输出
  • -r:使用基本正则表达式
  • --regex:使用扩展正则表达式
  • -q:安静模式,不会显示任何错误讯息

文件名可以使用正则表达式。

注意: 第一次使用前一定要通过updatedb命令手动更新一次,先生成/var/lib/mlocate/mlocate.db数据库文件,不然会报错;以后再执行locate,也可以在执行前通过updatedb命令更新一下,如果距离上次执行,本地的文件没有发生过变更,可以不更新;还可以通过crontab计划任务设置一个任务,每天更新一下。

示例

  • 查找文件路径中包含“redis”字符的文件:
locate redis
/etc/selinux/targeted/active/modules/100/redis
/etc/selinux/targeted/active/modules/100/redis/cil
/etc/selinux/targeted/active/modules/100/redis/hll
/etc/selinux/targeted/active/modules/100/redis/lang_ext
/root/redis-6.0.8.tar.gz
/root/redis.tar.gz
······

查找文件名中包含“redis”字符的文件,使用-b选项:

locate -b redis
/etc/selinux/targeted/active/modules/100/redis
/root/redis-6.0.8.tar.gz
/root/redis.tar.gz
······
  • 查找时忽略大小写:
locate -i REdis
  • 统计查找到的文件总数:
locate -c redis
  • 限制3条结果条目:
locate redis -l 3
  • 使用正则表达式,查找/usr/software/目录下包含“redis”字符的文件:
locate -r ^/usr/software/*redis

虽然locate命令的查找速度要比find快,但它并不是真正的查找,而是查找数据库,而且find命令的搜索功能要比locate更加强大一些,二者根据使用过程中的具体场景进行选择吧。

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !