Linux 5大查找命令

Which 

which  [-a]  command

查找系统命令位置,只在$PATH环境变量中查找,并且默认只返回第一个查找结果

参数:

-a 列出所有的查找结果

例:which -a php


Type

type  [option]  command

用于区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的

参数:

-t  输出命令的type,如:alias、file、builtin等

-p  如是外部命令,则输出绝对地址

例:type -t cd


Whereis

whereis  [-bmsu]  file

whereis命令用于定位可执行文件、源代码文件、帮助文件在系统中的位置

参数:

-b 查找二进制文件

-m 查找说明文件

-s 查找源代码文件

-u 查找非上述3种文件的其他文件

例:whereis -b php

PS:whereis默认从数据库文件(Linux将所有的文件都记录在一个数据库文件,但并不实时更新,一般一天更新一次)中查找指定文件,因此whereis比其他从硬盘查找的命令,效率高很多


Find

find      [path]     [option]    [action]       

find命令可查找指定路径下所有符合条件的文件或目录,find命令参数可以拟分成两大类,一种是普通参数,一种是时间参数

普通参数:

-type 根据文件类型进行搜索

          find /usr/bin -type d   查找 /usr/bin目录下所有的目录

-name 根据文件名进行搜索(-iname 不区分大小写)

          find /usr/bin -name '*.JPG' 查找/usr/bin目录下以JPG为后缀的文件和目录

-size 根据文件大小进行搜索(+n 大于 -n 小于)

          find /usr/bin -size +10M 查找/usr/bin目录下大于10M的文件和目录

-prem 根据文件读写权限进行搜索

          find /usr/bin -perm 644 查找/usr/bin目录下读取权限为644的文件和目录

-group 根据文件拥有组进行搜索

          find /usr/bin -group li 查找/usr/bin目录下li组的文件或目录

-empty 匹配空文件或空目录

          find /usr/bin -empty 查找/usr/bin目录下的空文件和空目录

时间相关参数:

time 天 

min 分钟

+n n天(分钟)之前 

-n n天(分钟)之内

-atime +n 搜索n天之前被访问过的文件或目录

          find ./ -atime +5 查找当前目录下,最后一次访问时间在5天前的文件或目录

          find /var \! -atime -90  在/var目录下找出90天之内未被访问过的文件

-mtime -n 搜索n天之内被修改过文件内容的文件或目录

          find ./ -mtime -5 查找当前目录下,5天呃逆有进行过内容修改的文件或目录

-cmin -n 搜索n分钟之内被修改过内容、权限、属性的文件或目录

          find ./ -cmin -5 在当前目录,搜索5分钟之内被修改过内容、权限、属性的文件和目录

-cnewer file 搜索修改时间(change time:修改文件属性、权限、内容、大小的时间)比指定文件的修改时间更接近现在的文件或目录

          find ./ -cnewer demo.txt 在当前目录下,搜索修改时间比demo.txt文件的修改时间更大的文件或目录

find匹配后执行操作:

预定义操作

          find ./ -name '*.bak' -delete 删除当前目录下,所有以bak为后缀的文件和目录

          find ./ -name '*.log' -quit 在当前目录下搜索以log为后缀的文件和目录,搜索到一个就退出

自定义操作

          find ./ -type f -name '*.bak' -exec rm -rf {} \; 查找当前目录下后缀为bak的文件,并把它们删除,分号在Bash中有其他意思,因此此处;需要加\转义

PS:find是从硬盘去检索文件,因此效率并不高,但是find的功能是最广,最强大的


Locate

locate  [option]  [option

此命令和find / -name类似,但是它是从数据库文件(Linux将所有的文件都记录在一个数据库文件,但并不实时更新,一般一天更新一次)中查找指定文件,因此效率比find快得多

参数:

-i  忽略大小写

-r  使用正则表达式做匹配条件

例:locate demo.php


总结

一、5个查找命令中,find、locate、whereis是用来查找具体的文件,which、type是用来查找命令(which也相当于查找文件,但是只查找命令位置)

二、whereis只查找3种类型的文件:二进制文件、说明文件、源代码文件

三、whereis和locate都是从数据库文件查找,所以效率最高

四、使用优先级:

          1、区分命令,使用type

          2、查找命令位置,使用which、whereis、type(优先使用whereis)

          3、通过文件名称查找,优先使用locate,找不到时,updatedb

          4、其他查找条件、或者因数据库文件未更新,使用whereis、locate查找不到时,使用find

推荐阅读更多精彩内容