Linux中查找文件号令-find-which-whereis-locate,有哪些区别?
Linux中查找文件的号令有良多,可能各人遍及用到比力多的是find,但locate、whereis、which也是比力好用的查找号令。
它们的次要区别是:
find:是个很强大的查找号令,能做到实时查找,切确查找,但查找内容较多时速度慢,效率低
locate:查找速度快,但不是实时查找,查找的成果不切确
whereis:用于查找二进造文件、源代码文件和帮忙手册;
which:会在情状变量$PATH设置的目次里查找契合前提的文件
1.find查找文件
find用来在指定目次下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目次名。
若是利用该号令时,不设置任何参数,则find号令将在当前目次下查找子目次与文件。而且将查找到的子目次和文件全数停止展示。
find用法:find <path><expression>
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
2.locate查找文件
locate查找号令比力简单且不是实时的,而是以数据库的更新为准。
locate 现实上查的是一个保留文档和目次名称的数据库,默认是/var/lib/slocate/slocate.db
Linux系统主动创建那个数据库,而且天天主动更新一次,因而,我们在用locate 查找文件时,有时会找到已经被删除的数据,或者刚刚成立文件,却无法查找到,原因就是因为数据库文件没有被更新。
为了禁止那种情状,能够在利用locate之前,先利用updatedb号令,手动更新数据库(也能够利用locate -u号令来更新)
常用实例:查找出以passwd开头的所有文件
locate passwd
查找出/data/jjing/目次下所有以test开头的文件或文件夹下的所有内容
locate /data/jjing/test
3.whereis查找文件
whereis号令只能用于法式名的搜刮,并且只搜刮二进造文件(参数-b)、man申明文件(参数-m)和源代码文件(参数-s)。若是省略参数,则返回所有信息。
常用实例:查找passwd那个文件名有关的所有数据
# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
4.which查找文件
which号令的感化是,在PATH变量指定的途径中,搜刮某个系统号令的位置,而且返回第一个搜刮成果。也就是说,利用which号令,就能够看到某个系统号令能否存在,以及施行的到底是哪一个位置的号令。
常用实例:$ which grep
/bin/grep