一文总结Linux的文件搜索命令,史上最清晰易懂-tmp是什么文件


locate命令

locate 文件名

含义:在后台数据库中按文件名搜索,搜索速度很快。

注意:(1)locate的搜索方式是在“/var/lib/mlocate”这个数据库中进行搜索的(不同的Linux可能数据库的名字不一样)。

但是mlocate这个数据库不是实时更新的,它的更新频率是一天一更新。所以会发生用locate可能搜索不到

已经存在的文件的现象。我们可以使用“updatedb”命令来强制更新数据库,会解决这个问题。

(2)locate只可以按照文件名来搜索

locate的搜索规则

locate遵守一定的搜索规则,这个规则的配置文件位于“/etc/updatedb.conf”中。我们可以打开看一看有哪些规则。

如下图:

一文总结Linux的文件搜索命令,史上最清晰易懂

来解释一下上图中每一句话的含义:

PRUNE_BIND_MOUNTS 是否开启这些规则,为“yes”则开启,为“no”则不开启。

PRUNEFS 搜索时不搜索的文件系统

PRUNENAMES 搜索时不搜索文件名中包含这些关键字的文件

PRUNEPATHS 搜索时这些目录当中的文件不搜索

因此你可能会遇到这样的情况:比如你所搜索的文件名在/tmp目录下也存在,但是搜索的结果却没有/tmp下面的这个文件。

这下,你知道为什么了吧。

注:不仅locate遵守updatedb.conf这个配置文件的搜索规则,下面要讲到的whereis和which命令也遵守这个配置文件的规则。


whereis命令

whereis 命令名

含义:搜索命令所在的路径以及相应帮助文档所在的路径

选项:

-m 只查找帮助文件

-b 只查找可执行文件


which命令

which 命令名

含义:这个命令跟whereis的功能一样,唯一不同的是which搜索的是命令所在路径以及命令的别名(不含帮助文档)。

注:并不是所有的命令都有别名的。也并不是所有的命令都有所在路径的,比如搜索“cd”命令的路径就搜索不到。


find命令

find [搜索范围] [搜索条件]

含义:这是find命令基本的格式。

find命令十分强大,选项也是多种多样。下面是几个常用的,重点学习记忆:

find / -name install.log

含义:搜素范围是根目录(”/“),搜索的条件是按名称搜索“install.log”。你可以灵活改动各个选项。

注意:find的搜索匹配是完全匹配的,也就是说它搜索出来的东西的名称应该和“install.log”一模一样,多一个字母

少一个字母都不行。如果想要进行模糊搜索,则需要使用通配符。

find /root -iname istall.log

含义:在root目录下搜索名为”istall.og”的文件,且文件名不区分大小写。

find / -user root

含义:在根目录下搜索所有者为”root”的文件,也即是说“-user”是按所有者进行搜索。

find / -nouser

含义:在根目录下搜索没有所有者的文件。也即是“-nouser”是搜索没有所有者的文件。

注意:Linux中没有所有者的文件一般为垃圾文件,应当删除。但是有以下两种情况文件没有所有者是正常的。

(1)在“/proc/”和“/sys/”目录下的文件如果没有所有者正常,不要删除。

(2)外来文件也可能没有所有者,比如你插入的U盘中的文件是在windows中创建的,则

可能没有所有者,正常。

find /var/log/ -mtime +10

含义:搜索10天修改了内容的文件。

注:在这个命令中,后两个参数是可以更改的。如下:

atime 文件访问时间

ctime 改变文件属性

mtime 修改文件内容

-10 10天内修改的文件

10 10天前的当天修改的文件

+10 10天前的修改文件

对于这个-10和+10你可能还不了解,下面是个时间轴,可以帮助理解:

一文总结Linux的文件搜索命令,史上最清晰易懂

find /var/log atime +10

含义:搜索10天被访问的文件。也就是“atime”表示是按访问时间来搜索的。

find . -size 25k

含义:搜索当前目录中大小为25k的文件。也就是说“-size“是按大小搜索的意思。

注:25k 等于25k

-25k 小于25k

+25k 大于25k

注意:必须写成25k(且k是小写的)或者25M(且M是大写的),不能写成数字25.

find . -inum 262422

含义:搜索当前目录中,i节点号为262422的文件。也即是“-inum“是按i节点搜索的意思。

find /etc -size +20k -a -size -50k

含义:搜索etc目录下大小小于50k且大于20k的文件。

注:-a 即逻辑与,两个条件都满足。

-r 即逻辑或,两个条件满足一个即可。

find /etc -size +20k -a -size -50k -exec ls -lh {} \;

含义:搜索etc目录下大小小于50k且大于20k的文件,并且把他们的详细信息展示出来。

注:在这里”-exec {} \;”是一个固定的写法,它的中间用来添加第二条命令。比如上面,在中间添加

了命令“ls -lh”,表明对前面得到的结果执行此命令。因此这个第二条命令必须是能够对前面的结果

进行操作的命令。


通配符

各个通配符的含义如下:

* 匹配任意内容

?匹配任意一个字符

[] 匹配中括号内的任意一个字符

举例如下:

find /root -name “install.log*”

含义:在root目录下按名称搜索任意以”installlog”开头的文件。

find /root -name “ab[cd]”

含义:在root目录下按名称搜索文件名为“abc”或者为”abd”的文件,即中括号中任意一个字符匹配皆可以。


grep命令

grep [选项] 字符串文件名

含义:在文件中搜索包含指定字符串的内容。

选项:

-i 忽略大小写

-v 排除指定字符串

例如: grep “size” install.log

意思就是在文件install.log中搜索包含”size”字符串的的内容。


推荐阅读