Linux中的五个查找文件命令,有什么区别?

Linux中查找文件的命令有很多,可能大家普遍用到比较多的是find,但locate、whereis、which也是比较好用的查找命令。

它们的主要区别是:
find:是个很强大的查找命令,能做到实时查找,精确查找,但查找内容较多时速度慢,效率低
locate:查找速度快,但不是实时查找,查找的结果不精确
whereis:用于查找二进制文件、源代码文件和帮助手册;
which:会在环境变量$PATH设置的目录里查找符合条件的文件

find查找文件

find用来在指定目录下查找文件。

任何位于参数之前的字符串都将被视为欲查找的目录名。

如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

find用法:
find
path:所要搜索的目录及其所有子目录。默认为当前目录。
expression:所要搜索的文件的特征。

参数说明:
-cmin n : 在过去n分钟内被修改过
-ctime n : 在过去n天内被修改过的文件
-mtime n:在过去n天内被修改过的文件
-mmin n:在过去n分钟内被修改过
-empty : 空的文件,寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-ipath p, -path p : 匹配文件路径,ipath 会忽略路径大小写
-name name,-iname name : 匹配文件名称。iname 会忽略名称大小写
-size n : 匹配文件大小,单位有:c–字节,k–千字节,M–兆字节,G–GB
-type c : 匹配文件类型,c是指定的类型。(文件类型参数有:f–普通文件,d–目录,l–符号链接)
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式

常用实例:
匹配文件名称
将当前目录及其子目录下所有.py后缀的文件列出来:
find . -name “.py"
find . -iname "
.py”

匹配文件路径
匹配文件路径或者文件:
find /usr/ -path “local
基于正则表达式匹配文件路径:
find . -regex “.*(.txt|.doc)$”
(查找当前目录及子目录下所有以.txt或.doc结尾的文件)

匹配时间戳
查找最近3天内被访问过的所有文件:
find . -type f -atime -3

匹配文件大小
在当前目录下查找文件长度大于10kb的文件
find . -size +10k

locate查找文件

locate查找命令比较简单且不是实时的,而是以数据库的更新为准。

locate 实际上查的是一个保存文档和目录名称的数据库,默认是/var/lib/slocate/slocate.db

Linux系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库(也可以使用locate -u命令来更新)

常用实例:
查找出以passwd开头的所有文件
locate passwd
查找出/data/jjing/目录下所有以test开头的文件或文件夹下的所有内容
locate /data/jjing/test

whereis查找文件

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

常用实例:
查找passwd这个文件名有关的所有数据

whereis passwd

passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz

which查找文件

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

常用实例:
$ which grep
/bin/grep

猜你喜欢

转载自blog.csdn.net/cnroot001/article/details/117994711
今日推荐