这是我参与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更加强大一些,二者根据使用过程中的具体场景进行选择吧。
原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~
最后,感谢女朋友在工作和生活中的包容、理解与支持 !