0、概述
* `which`:在PATH变量指定的路径中,搜索与指定名字匹配的系统命令的位置,并且返回第一个搜索结果。 * `whereis`:搜索与指定名字匹配的二进制文件、源文件和帮助手册文件所在的路径。二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。在数据库中查询。 * `locate`:locate 会给出所有与`*filename*` 相匹配的文件的路径。在数据库中查询。 * `find`:实际搜寻硬盘查询文件名称。 * `whatis`:展示命令手册页面描述里的内容。使用 `mkwhatis` 命令可将当前系统上所有的帮助手册及与之对应的关键字创建为一个数据库。
1、which
语法:which [-a] cmdname1 cmdname2 ......
作用:locate a command,从环境变量PATH中,定位/返回与指定名字相匹配的 命令/可执行文件 所在的路径
原理:执行which命令时,which会在当前环境变量PATH中依次寻找能够匹配所找命令名字的可执行文件名,不加-a选项,返回第一个匹配的可执行文件的路径,否则依次返回满足条件的所有可执行文件的路径名。
适用场合:一般用于查找 命令/可执行文件 所在的路径。有时候可能在多个路径下存在相同的命令,该命令可用于查找当前所执行的命令到底是哪一个位置处的命令。
[root@redhat ~]# which passwd
/usr/bin/passwd
2、whereis
语法: whereis [-bmsu] 文件或者目录名称
参数说明:
- -b : 只找二进制文件
- -m: 只找在说明文件manual路径下的文件
- -s : 只找source源文件
- -u : 没有说明文档的文件
作用:定位/返回与指定名字匹配的二进制文件、源文件和帮助手册文件所在的路径。
原理:whereis命令首先会去掉filename中的前缀空格和以.开头的任何字符,然后再在数据库(var/lib/slocate/slocate.db)中查找与上述处理后的filename相匹配的二进制文件、源文件和帮助手册文件,使用之前可以使用updatedb命令手动更新数据库。
适用场合:二进制文件、源文件和帮助手册文件路径的查找。
例如:
# 将和passwd文件相关的文件都查找出来
[fenglepeng@centos]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz # 只将二进制文件查找出来
[fenglepeng@centos]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下每天更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。 (使用updatedb命令进行更新)
3、 locate
语法: locate 文件或者目录名称
作用:同whereis指令一样,也是从数据库建立的索引中查找,不同的是该命令查找所有部分匹配的文件,使用之前可以使用updatedb命令手动更新数据库。
原理:默认情况下(当filename中不包含通配符*),locate会给出所有与*filename*相匹配的文件的路径。
适用场合:没有文件类型性质的模糊查找(你只记得某个文件的部分名称)。
个人感觉locate和whereis差不多,locate比较适合与数据库一起配合着用,locate命令可以在搜寻数据库时快速找到档案
[fenglepeng@centos]# locate passwd
/lib/security/pam_unix_passwd.so
/lib/security/pam_passwdqc.so
/usr/include/rpcsvc/yppasswd.x
/usr/include/rpcsvc/yppasswd.h
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph
/usr/lib/kde3/kded_kpasswdserver.la
/usr/lib/kde3/kded_kpasswdserver.so
/usr/bin/vncpasswd
/usr/bin/userpasswd
/usr/bin/yppasswd
4、 find
语法: find 路径 参数
参数说明:
- 时间查找参数:
- -atime n :将n*24小时内存取过的的文件列出来
- -ctime n :将n*24小时内改变、新增的文件或者目录列出来
- -mtime n :将n*24小时内修改过的文件或者目录列出来
- -newer file :把比file还要新的文件列出来
- 名称查找参数:
- -gid n :寻找群组ID为n的文件
- -group name :寻找群组名称为name的文件
- -uid n :寻找拥有者ID为n的文件
- -user name :寻找用户者名称为name的文件
- -name file :寻找文件名为file的文件(可以使用通配符)
作用:从当前目录递归的搜索文件。
原理:遍历当前工作目录及其子目录,find命令是在硬盘上遍历查找,非常耗硬盘资源,查找效率相比whereis和locate较低。
适用场合:能用which、whereis和locate的时候尽量不要用find。
[fenglepeng@centos]# find / -name zgz
/home/zgz
/home/zgz/zgz
/home/weblogic/bea/user_projects/domains/zgz
总结
find,遍历硬盘查找,通常使用 find / -name Filename。耗内存。locate和whereis是根据数据库查找,无法实时查找文件。有可能找到刚才删除的文件和无法找到新增的文件。which根据path找可执行文件。whereis 可以用来找相关安装路径和二进制文件,可执行文件。
当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。