Linux中搜尋檔案 whereis/locate/find

寫在前面,簡單來說,
想要快速就用locate跟whereis,
完整性就用find (比較慢)。

在Linux中如果要尋找檔案,
最常利用到的指令應該是whereis, locate, find這三個(當然也有其他的)。

那這三個指令有甚麼不同呢?

首先提一下,通常在已經知道檔案存在的情況下,
或是覺得很可能存在的情況下,
會先使用 whereis 或者是 locate 來檢查,
如果真的找不到了,才會利用 find 來搜尋,
那是為什麼呢?
因為 whereis 只會去找系統中某些特定目錄底下的特定格式的檔案而已,
而 locate 則是利用資料庫來搜尋檔名,並且沒有實際的搜尋硬碟內的檔案系統,
所以這兩者指令就會相當的快速。

whereis

whereis 其實只會去搜尋特定目錄下的檔案,
並且針對的是 binary, source, 還有Help說明文件。

使用方法是在 whereis 後接上要搜尋的檔案名稱,
不過要注意要完整符合名稱(不含副檔名)才會顯示,
也就是說假設我要找exiftool這個檔案,
如果我去搜尋exif會找不到,必須要搜尋exiftool才可以。

如下圖所示

選項與參數:
-l :可以列出 whereis 會去查詢的幾個主要目錄而已
-b :只找 binary 格式的檔案
-m :只找在說明檔 manual 路徑下的檔案
-s :只找 source 來源檔案
-u :搜尋不在上述三個項目當中的其他特殊檔

locate

相較於 whereis 只會搜尋特定目錄底下與特定格式檔案,
搜尋一般的檔案會用到的指令就是 locate,
不過這個指令並非真的實際到硬碟中去完整搜尋檔案,
而是系統在平時會整理一個目錄系統的資料庫,
利用locate的指令搜尋時就是在這個「已經建立好的資料庫」中去尋找,
(這個資料庫就是 /var/lib/mlocate)
所以不用在硬碟中去存取資料,速度就會很快了。
不過也因為他是在資料庫去尋找,所以如果當你新增的檔案還沒被收入到資料庫的話,
就會有可能發現檔案明明存在,卻找不到的情況。預設情況資料庫是會每天更新一次。

那當然也可以自己手動去更新資料庫,
可以利用指令 updatedb 就會去讀取 /etc/updatedb.conf
然後就會更新整個檔案資料庫。

還有 locate 這個指令用起來是非常簡單方便,
輸入 locate ,直接在後面輸入『檔案的部分名稱』,
就可以找到在完整檔案名稱中,有包含你輸入的部分名稱的檔案。

  • updatedb:根據 /etc/updatedb.conf 的設定去搜尋系統硬碟內的檔名,並更新 /var/lib/mlocate 內的資料庫檔案;
  • locate:依據 /var/lib/mlocate 內的資料庫記載,找出使用者輸入的關鍵字檔名。

選項與參數:
-i :忽略大小寫的差異
-c :不輸出檔名,僅計算找到的檔案數量
-l :僅輸出幾行的意思,例如輸出五行則是 -l 5
-S :輸出 locate 所使用的資料庫檔案的相關資訊,包括該資料庫紀錄的檔案/目錄數量等
-r :後面可接正規表示法的顯示方式

find

雖然上面兩個檔案都算是快速方便,
但老老實實地說,若各位想從滲透測試角度來找檔案,
我覺得這個 find 指令才是要好好的學,
實際上我常用的指令也就是locate跟find這兩個。
畢竟在許多場景下,重點是要完整的搜尋不能放過任何檔案,
譬如像是在打Hack The Box要提權或是找尋有用的資料。
除了完整性以外,find支援的選項參數也相當多,
除了針對檔案的名稱以外,
還可以針對檔案權限、檔案類型、日期、甚至檔案大小做搜尋。
雖然它的功能如此多,我用到的也不多就是了。
以下只提幾個我會用到的部分。

選項與參數:
-name :搜尋特定的字元
-iname:與-name類似,但是忽略大小寫
-type :搜尋特定檔案類型
-perm :搜尋特定權限的檔案


參考:

https://askubuntu.com/questions/832562/difference-among-whereis-locate-and-findcommandhttp://linux.vbird.org/linux_basic/0220filemanager.php#locate

發佈留言