命令功能
which查看可执行文件的位置(PATH中查找)
whereis查找程序的二进制文件,源文件和man page文件(索引数据库)
locate找到在其路径中任何位置包含查找字符串的所有文件(索引数据库)
find搜索硬盘查询文件名称,功能强大但速度超慢

which

which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件 。

语法:

which 可执行文件名称 

例如:

[root@localhost ~]# which passwd 
/usr/bin/passwd

whereis

与which不同的是whereis是通过文件索引数据库而非PATH来查找的,所以查找速度更快。查找范围比which稍大。它可以定位/返回与指定名字匹配的二进制文件、源代码文件和帮助手册文件所在的路径。

但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,在使用whereis查找文件前先使用updatedb命令手动更新数据库。

语法:

whereis [-bmsu] 文件或者目录名称 

参数说明:

-b :只找二进制文件 
-m :只找在说明文件manual路径下的文件 
-s :只找source源文件 
-u :没有说明文档的文件 

例如:

将和passwd文件相关的文件都查找出来 :

[root@localhost ~]# whereis passwd 
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

只查找二进制文件:

[root@localhost ~]# whereis -b passwd 
passwd: /usr/bin/passwd /etc/passwd

locate

locate 命令也是通过数据库查找文件,但是这个命令的适用范围比whereis大。这个命令可以找到其路径中任何位置包含搜索内容的文件,所以通常会返回大量匹配项。

但是该数据库文件并不是实时更新,一天更新一次,因此,在使用locate 查找文件前先使用updatedb命令手动更新数据库。

语法:

locate 文件或者目录名称 

常用参数:

-r 通过正则表达式来精确匹配。
-e 仅打印当前存在文件的结果,不会打印已删除的内容
-b 仅匹配路径名的基本名称

例如:

[root@localhost ~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/lib64/security/pam_passwdqc.so
/lib64/security/pam_unix_passwd.so
/usr/bin/gpasswd
/usr/bin/kpasswd
/usr/bin/lppasswd
/usr/bin/passwd
/usr/bin/smbpassw
..............
[root@localhost ~]# locate -r  passwd$
/etc/passwd
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/kpasswd
/usr/bin/lppasswd
/usr/bin/passwd
/usr/bin/smbpasswd
/usr/bin/yppasswd
/usr/sbin/chpasswd
/usr/sbin/lpasswd

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的文件(可以使用通配符) 

例 如:

[root@localhost ~]# find / -name test.sh 
/root/test.sh
[root@localhost ~]# find / -name 'in' 
[root@localhost ~]# find / -name 'install'
/usr/share/dracut/modules.d/95terminfo/install
/usr/share/dracut/modules.d/99kdumpbase/install
/usr/share/dracut/modules.d/90kernel-modules/install
/usr/share/dracut/modules.d/90dmraid/install
/usr/share/dracut/modules.d/90multipath/install
/usr/share/dracut/modules.d/95udev-rules/install
/usr/share/dracut/modules.d/95debug/install
/usr/share/dracut/modules.d/95znet/install

总结

建议优先使用whereis和locate。当我们用whereislocate无法查找到需要的文件时,再使用find。