1. 程式人生 > 實用技巧 >22linux查詢檔案命令比較

22linux查詢檔案命令比較

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 是使用資料庫來搜尋資料,所以相當快,而且並沒有實際搜尋硬碟,比較省時。