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