【概述】
在 Linux 中,当给出文件名要查找文件目录时,有 whereis
、locate
、find
这三条命令
Linux 系统会将系统中的所有文件都记录在一个数据库文件 /var/lib/mlocate
中,当使用 whereis
或 locate
命令时,都会以此数据库文件为准,根据数据库中的结果去查找文件所在
而 find
命令是直接查找硬盘,相较于 whereis
和 locate
命令,要花费更多的时间
【whereis 命令】
whereis
命令格式为:whereis [选项] 文件名或目录名
其选项有:
- -b:只查找二进制文件
- -m:只查找说明文件 manual 路径下的文件
- -s:只查找 source 源文件
- -u:查找不在上述三个选项中的其他特殊文件
如下图,利用 whereis
找出 ifconfig 文件
【locate 命令】
locate
命令相较于 whereis
命令更加简单,其后输入文件的部分名称即可得到结果
locate
命令格式为:locate [选项] 关键字
其选项有:
- -i:忽略大小写
- -r:后接正则表达式
如下图,利用 locate
找出 passwd 相关的文件
【mlocate 数据库】
使用 whereis
或 locate
命令寻找数据时,其 /var/lib/mlocate
数据库每天默认更新一次,这就导致有时会查找不到新建的文件,或者能查找到刚删除的文件
如果想要对 /var/lib/mlocate
数据库进行手动更新,直接输入 updatedb
命令即可,该命令会根据 /etc/updatedb.conf
的设置,去查找系统硬盘内的文件名,并更新 /var/lib/mlocate
内的数据库文件
需要注意的是,使用 updatedb
命令手动更新 mlocate
数据库时,会花费较长的时间
【find 命令】
命令格式
find
命令相较于 whereis
和 locate
命令来说,会耗时较长一些,但其结果更加准确,不会出现 whereis
和 loacte
命令出现的问题
其命令格式为:find [路径] [选项]
与时间有关的选项
find
命令与时间有关的选项有:-atime
、-ctime
、-mtime
这三个,下面以 -mtime
为例进行说明:
- -mtime n:列出 n 天之前的一天内被更改过的文件
- -mtime +n:列出 n 天之前被更改过的文件,不包括 n 天本身
- -mtime -n:列出 n 天之前被更改过的文件,包括 n 天本身
- newer file:列出比 file 还要新的文件名
可以发现,与时间有关的选项,其核心在于 n,有没有 +、- 号区别很大,以下图为例:
图中最右边为当前时间,越向左代表越早之前的时间轴,4、+4、-4 分别具有以下含义:
- 4:4~5 那一天的的文件
- +4:大于等于 5 天前的文件
- -4:小于等于 4 天内的文件