Linux下which、whereis、locate、find 命令的区别
Linux中有很多查找文件的命令,如which、whereis、locate、find,有时使用时根本分不清它们之间的区别,不太清楚,什么时候该使用什么命令,在此记录一下,各自的功能与用法。
1、which
这条命令主要用来查找系统PATH目录下的可执行文件。在此说一下
Linux系统PATH的查找命令echo $PATH
windows下的查找命令echo %PATH%
比如查找jdk中的两个可执行文件
2、whereis
这个命令可以用来查找二进制文件、man文件、源文件。与which不同的是这条命令是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。
whereis [-bmsu] 文件名称
参数说明:
-b :只找二进制文件
-m :只找在说明文件manual路径下的文件
-s :只找source源文件
-u :没有说明文档的文件
和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下一星期更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
3、locate
笔者使用的centos默认没有安装此命令,如果读者的电脑上也没有这个命令,可以参照我的这篇文章:
http://blog.****.net/****_ds/article/details/72677823
进行安装。
这个命令也是通过数据库查找文件,但是这个命令的适用范围就比whereis大多了。这个命令可以找到任意你指定要找的文件,并且可以只输入部分文件名(前面两个命令是要输入完整文件名的)。
需要注意的是locate使用的索引数据库里的信息并不一定是实时有效的,可以使用updatedb命令更新索引数据库。
4、find
这条命令是通过直接搜索硬盘的方式查找的,所以可以保证查找的信息绝对可靠。功能强大,命令复杂,但与前面几条命令相比,效率不高。
语法规范:
find 路径 参数
平常使用比较多的参数:
-name file :寻找文件名为file的文件(可以使用通配符)
总结:
which主要用来查找可直接执行的命令,可以查找别名,查找的是系统PATH下的可执行文件。
whereis比which的搜索范围大一些,同时可以查找源文件和man文件。这两个命令适用于查找安装好的命令。
locate的查找范围更大,可以查找任意类型文件。适合快速查找指定文件。
find最强大也最慢。适合查找前几个命令找不到的文件。