站内搜索

Linux 查找命令whereis、find和locate的区别

  今天在刷题的时候做到这么一题:使用什么命令进行查询,并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符的是()?
A、whereis
B、find
C、locate
D、type

答案是C。之前学得不够细致深入,所以并不清楚几个Linux查找命令whereis、find和locate的区别。趁此机会好好学一下:

whereis

whereis 命令可以定位常用命令的位置,比如:
[root@HQW-Aliyun home]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
[root@HQW-Aliyun home]# whereis whoami
whoami: /usr/bin/whoami /usr/share/man/man1/whoami.1.gz
[root@HQW-Aliyun home]#

whereis命令不是通过查找磁盘上的所有文件来实现定位的,你可以随便指定一个可执行文件,估计whereis会找不到,这是因为whereis是根据环境变量PATH来查找文件的,而PATH通常设置成存放命令的那些路径,如 /bin、/usr/bin等,因此whereis的用途仅限于定位shell命令所在的位置。

find

find命令可以全盘查找文件,也可以从指定的目录开始查找文件,如下为测试:

[root@HQW-Aliyun home]# find -name hqw.sh
./wwroot/kaobuluo/hqw.sh
[root@HQW-Aliyun home]# find wwwroot -name hqw.sh //可指定目录
[root@HQW-Aliyun home]# find wwroot -name hqw.sh
wwroot/kaobuluo/hqw.sh

locate

用locate命令查找的文件和find一样没有任何限制,但执行速度却比find要快不少,其主要原因在于,locate不是从磁盘中实时查找文件,而是到由updatedb命令产生的信息库中查找相应的文件和目录,这样一来速度当然快了。如下为测试:

[root@HQW-Aliyun home]# locate hqw.sh //第一次找不到
[root@HQW-Aliyun home]# updatedb
[root@HQW-Aliyun home]# locate hqw.sh //updatedb更新信息数据库之后就可以找到了
/home/wwroot/kaobuluo/hqw.sh

Copyright © XiakeShu.com 版权所有 | 备案号:浙ICP备11004787号-12