1.简介
linux 中我们经常用来查找文件的命令有 whereis、find 和 locate。
2. whereis:定位文件所在的目录
(1)使用 whereis 命令可以定位常用命令的位置
[root@bat3963 ~]# whereis sh
sh: /bin/sh /usr/share/man/man1/sh.1.gz /usr/share/man/man1p/sh.1p.gz
(2)whereis 命令不是通过查找磁盘上的所有文件来实现定位,而是根据环境变量 PATH 来查找文件的。而 PATH 通常设置成存放命令的那些路径,如 /bin、/usr/bin 等,因此 whereis 的用途仅限于定位 shell 命令所在的位置
#随便查找一个so文件,whereis一般都无法查找到
[root@bat3963 ~]# whereis libs_liblogpublic.so
libs_liblogpublic:
3. find :查找文件
(1)find 命令可以用来从指定的目录开始查找文件,它的速度虽然比不上 whereis 命令,但没有任何限制
[root@bat3963 ~]# find / -name libs_liblogpublic.so
/home/o4ufc/fbase/workspace/lib/libs_liblogpublic.so
/home/o4ufc/appcom_all/libs_liblogpublic.so
/home/o4ufc/lib/libs_liblogpublic.so
/home/o4ufc/workspace/libs20201019/home/fbase/workspace/lib/libs_liblogpublic.so
/home/o4ufc/workspace/libs20201019/home/fbase/workspace/lib/ufcso_bak/libs_liblogpublic.so
/home/o4hg/appcom/libs_liblogpublic.so
/home/o4bar/appcom/libs_liblogpublic.so
/home/o4qs/appcom/libs_liblogpublic.so
/home/o4qs/src/lib/libs_liblogpublic.so
/home/oracle/scipt/base/appcom/libs_liblogpublic.so
/home/oracle/scipt/clear/appcom/libs_liblogpublic.so
/home/cres/appcom/libs_liblogpublic.so
/home/cres/workspace/lib/libs_liblogpublic.so
/home/o4ufc_build/fbase/workspace/lib/libs_liblogpublic.so
/home/o4ufc_build/fbase/workspace/lib_old/libs_liblogpublic.so
/home/o4jc/appcom/libs_liblogpublic.so
/home/o4jc/workspace/libs20200924/app/o4jc/appcom/libs_liblogpublic.so
(2)find 命令功能更强大(可参考《06grep与find命令详解》)
[root@bat3963 ~]# find / -name libs_liblogpublic.so | xargs ls -l
-rw-r--r--. 1 root root 41343 11月 27 15:43 /home/cres/appcom/libs_liblogpublic.so
-rw-rw-r--. 1 cres cres 41343 12月 14 16:14 /home/cres/workspace/lib/libs_liblogpublic.so
-rwxr-xr-x. 1 o4bar o4bar 23512 7月 3 2017 /home/o4bar/appcom/libs_liblogpublic.so
-rwxr-xr-x. 1 o4hg o4hg 23512 6月 18 2019 /home/o4hg/appcom/libs_liblogpublic.so
-rwxr-xr-x. 1 o4jc dba 23512 11月 29 17:11 /home/o4jc/appcom/libs_liblogpublic.so
-rwxr-xr-x. 1 o4jc dba 23512 9月 24 11:16 /home/o4jc/workspace/libs20200924/app/o4jc/appcom/libs_liblogpublic.so
-rwxr-xr-x. 1 o4qs root 23512 11月 28 04:54 /home/o4qs/appcom/libs_liblogpublic.so
-rwxr-xr-x. 1 o4qs dba 23512 5月 10 2017 /home/o4qs/src/lib/libs_liblogpublic.so
-rwxr-xr-x. 1 o4ufc dba 41343 12月 14 15:44 /home/o4ufc/appcom_all/libs_liblogpublic.so
-rw-rw-r--. 1 o4ufc_build o4ufc_build 41343 12月 15 09:04 /home/o4ufc_build/fbase/workspace/lib/libs_liblogpublic.so
-rw-rw-r--. 1 o4ufc_build o4ufc_build 41343 11月 18 13:52 /home/o4ufc_build/fbase/workspace/lib_old/libs_liblogpublic.so
-rwxr-xr-x. 1 o4ufc dba 23512 6月 23 2017 /home/o4ufc/fbase/workspace/lib/libs_liblogpublic.so
-rwxr-xr-x. 1 o4ufc dba 41343 11月 28 04:54 /home/o4ufc/lib/libs_liblogpublic.so
-rwxr-xr-x. 1 o4ufc dba 41343 10月 19 20:47 /home/o4ufc/workspace/libs20201019/home/fbase/workspace/lib/libs_liblogpublic.so
-rwxr-xr-x. 1 o4ufc dba 41343 11月 25 2018 /home/o4ufc/workspace/libs20201019/home/fbase/workspace/lib/ufcso_bak/libs_liblogpublic.so
-rw-r--r--. 1 oracle users 23512 11月 17 2016 /home/oracle/scipt/base/appcom/libs_liblogpublic.so
-rw-r--r--. 1 oracle users 23512 11月 25 2016 /home/oracle/scipt/clear/appcom/libs_liblogpublic.so
4. locate:查找文件或目录
(1)除 find 命令外,locate 也是在系统中查找文件的常用方法
(2)用 locate 命令查找的文件和 find 一样没有任何限制,但执行速度比 find 要快不少,其主要原因在于 locate 不是从磁盘中实时查找文件,而是到由 updatedb 命令产生的信息库中查找相应的文件和目录,这样一来速度就快了好多。
[root@bat3963 ~]# updatedb
[root@bat3963 ~]# locate libs_liblogpublic.so
/home/cres/appcom/libs_liblogpublic.so
/home/cres/workspace/lib/libs_liblogpublic.so
/home/cres/workspace/lib/libs_liblogpublic.so.bak
/home/o4bar/appcom/libs_liblogpublic.so
/home/o4hg/appcom/libs_liblogpublic.so
/home/o4jc/appcom/libs_liblogpublic.so
/home/o4jc/workspace/libs20200924/app/o4jc/appcom/libs_liblogpublic.so
/home/o4qs/appcom/libs_liblogpublic.so
/home/o4qs/src/lib/libs_liblogpublic.so
/home/o4ufc/appcom_all/libs_liblogpublic.so
/home/o4ufc/fbase/workspace/lib/libs_liblogpublic.so
/home/o4ufc/lib/libs_liblogpublic.so
/home/o4ufc/workspace/libs20201019/home/fbase/workspace/lib/libs_liblogpublic.so
/home/o4ufc/workspace/libs20201019/home/fbase/workspace/lib/ufcso_bak/libs_liblogpublic.so
/home/o4ufc_build/fbase/workspace/lib/libs_liblogpublic.so
/home/o4ufc_build/fbase/workspace/lib/libs_liblogpublic.so.bak
/home/o4ufc_build/fbase/workspace/lib_old/libs_liblogpublic.so
/home/oracle/scipt/base/appcom/libs_liblogpublic.so
/home/oracle/scipt/clear/appcom/libs_liblogpublic.so
(3)如果 locate 找不到某个文件,而我们又确信该文件肯定存在,那一定是 updatedb 生成的信息库已经过时了。此时只需要以 root 用户登录,然后执行 updatedb 命令,重新建立整个系统所有文件和目录的资料库,虽然这个过程可能会浪费一点时间,但以后再查找文件就方便多了。
5. 联系
在 linux 中,也有相当优秀的搜索系统。通常,find 不常用,因为速度慢,耗费磁盘空间。通常我们先使用 whereis 或者 locate 来检查,如果找不到,采用 find 搜索。因为 whereis 与 locate 是使用数据库来搜索数据,所以相当快,而且并没有实际搜索硬盘,比较省时。