linux文件搜索命令---locate

locate

locate用于搜索文件和目录,但是要比find命令快的多,他不像find命令,搜索具体目录,而是搜索一个数据库,/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息,linux系统会自动创建这个数据库,并且每天自动更新一次。

locate和whereis都是使用相同的数据库,也就是/var/lib/mlocate。在使用locate的时候,往往搜索不到新创建的文件,或者搜索到已经删除的文件,那是因为数据库文件没有更新,需要手动更新。所以在每次使用locate命令之前,先使用updatedb更新数据库。

locate工作过程

整个locate工作其实是由四部分组成的:

/usr/bin/updatedb
/usr/bin/locate(mlocate)
/etc/updatedb.conf
/var/lib/mlocate/mlocate.db

updatedb:主要用来更新数据库,这个工作可以通过crontab自动完成的;
mlocate/locate:完成查询功能的程序;
updatedb.conf:用来配置数据库中要放入哪些目录和文件,排除哪些文件等;
mlocate.db:存放文件信息的文件;

locate安装

在系统安装光盘中有locate命令的安装包,名为mlocate-0.26-6.el7.x86_64。
yum直接安装即可。
在 mlocate 软件包安装期间,会创建一个每 24 小时运行一次 updatedb 命令的 cron 作业。这可确保定期更新数据库。有关 cron 作业的更多信息,请检查该 /etc/cron.daily/mlocate 文件。
可以使用updatedb命令对其进行更新,更新过程将需要一些时间,具体取决于文件和目录的数量以及系统的速度。

格式

locate 【选项】 参数

选项

b:–basename,匹配唯一的路径名称的基本文件名
-c:–count,只显示找到条目的数量
-d:–database DBPATH 用 DBPATH 替代默认的数据库(/var/lib/mlocate/mlocate.db)
-e:–existing 只显示当前存在的文件条目
-L: --follow 当文件存在时跟随蔓延的符号链接 (默认)
-h:–help 显示本帮助
-i:–ignore-case 匹配模式时忽略大小写区别
-l: --limit, -n LIMIT 限制为 LIMIT项目的输出 (或 计数)
-m: --mmap 忽略向后兼容性
-P:–nofollow, -H 当检查文件时不跟随蔓延的符号链接
-0: --null 输出时以 NUL 分隔项目
-S: --statistics 不搜索项目,显示有关每个已用数据库的统计信息
-q:–quiet 不报告关于读取数据库的错误消息
-r:–regexp REGEXP 搜索基本正则表达式 REGEXP 来代替模式
–regex 模式是扩展正则表达式
-s: --stdio 忽略向后兼容性
-V: --version 显示版本信息
-w:–wholename 匹配完整路径名 (默认)

简单案例

注:此案例只列举一些常用选项,其余自行练习
首先来看一下,查找不到新创文件现象.

[root@linus ~]# locate my.cnf				#搜索my.cnf文件
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf.d/mysql-clients.cnf
[root@linus ~]# touch /root/my.cnf		#新建my.cnf文件
[root@linus ~]# locate my.cnf
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf.d/mysql-clients.cnf
[root@linus ~]# updatedb					#手动更新locate的数据库
[root@linus ~]# locate my.cnf				#查看到了
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf.d/mysql-clients.cnf
/root/my.cnf

一些常用选项

[root@linus ~]# locate -c my.cnf			#只显示查找到内容的数量
4

对于过滤已经删除了的文件,需要加上-e选项

[root@linus ~]# locate -e my.cnf
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf.d/mysql-clients.cnf
/root/my.cnf
[root@linus ~]# rm -rf /root/my.cnf 
[root@linus ~]# locate -e my.cnf
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf.d/mysql-clients.cnf
[root@linus ~]# locate  my.cnf				#如果不加-e选项,也会把删除的文件也显示出来,要么手动更新,要么加上-e选项
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf.d/mysql-clients.cnf
/root/my.cnf

查找时忽略大小写

[root@linus ~]# touch HHH
[root@linus ~]# locate -i hhh		#没有更新数据库,也没有搜索出来
[root@linus ~]# updatedb			
[root@linus ~]# locate hhh			#没有加-i选项,只查找hhh,没有找到
[root@linus ~]# locate -i hhh
/root/HHH
发布了14 篇原创文章 · 获赞 4 · 访问量 526

猜你喜欢

转载自blog.csdn.net/qq_42534026/article/details/103877773
今日推荐