Linux文件查找的4個命令

1. find

find 命令應該是最經典的命令了,談到搜索工具第一個想到的肯定是 find 命令。但是,find 命令非常強大,想要把它的功能都介紹一遍,恐怕要寫好幾篇文章。

所以,這裏介紹最基本的,根據文件名查找文件的方法。假如我們想搜索當前目錄(及其子目錄)下所有 .java 文件,可以這樣搜索:

或者這樣搜索:

假如我們想搜索指定目錄(及其子目錄)下的文件,可以這樣搜索:

2. locate

locate 是另外一個根據文件名來搜索文件的命令。區別於 find 命令,locate 命令無需指定路徑,直接搜索即可。

這個命令不是直接去系統的各個角落搜索文件,而是在一個叫 mlocate.db 的數據庫下搜索。這個數據庫位於 /var/lib/mlocate/mlocate.db ,它包含了系統裏所有文件的索引,並且會在每天早上的時候由 cron 工具自動更新一次。

正因爲如此,locate 的搜索速度遠快於 find 命令,因爲它直接在數據庫裏檢索,速度自然更快。

locate 命令在找到文件之後,將直接顯示該文件的絕對路徑,比如:

安裝:yum  -y install mlocate

爲什麼 locate 命令 安裝的確是 mlocate ?

因爲 locate 用到的是 mlocate.db 這個數據庫,其實查詢的是這個數據庫而已,新安裝的命令文件,並不會馬上更新到 mlocate.db中。

安裝完再嘗試用locate定位內容,發現依然不好使,報了新的錯誤:

locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

原因是安裝完後沒有更新庫

更新庫:updatedb

但是 locate 命令有個弊端,它無法搜索當天所創建的文件,因爲它的數據庫一天只在早上更新一次。比如我現在創建一個新文件,locate 沒辦法搜索到。

爲了解決這個問題,我們可以使用 updatedb 命令手動去更新它的數據庫:updatedb

然後,我們就可以搜索到新文件了。

3. which

which 命令主要用來查找可執行文件的位置,它搜索的位置指定在 $PATH 及 $MANPATH 環境變量下的值,默認情況下, which 命令將顯示可執行文件的第一個存儲位置:

如果某個可執行文件存儲在多個位置,可以使用 -a 選項列出所有的位置。

如果你想一次性查找多個文件,可以直接跟在 which 命令後面即可。

4. whereis

whereis 命令會在系統默認安裝目錄(一般是有root權限時默認安裝的軟件)查找二進制文件、源碼、文檔中包含給定查詢關鍵詞的文件。(默認目錄有 /bin , /sbin , /usr/bin , /usr/lib , /usr/local/man 等類似路徑)。

一般包含以下三部分內容:

二進制文件的路徑

二進制文件的源碼路徑

對應 man 文件的路徑

比如我們現在搜索 ls 命令:

我們可以使用如下參數:

-b 選項來只搜索可執行文件所在位置,

-B 選項指定搜索位置,

-f 選項列出文件的信息。

-m 搜索 man page 路徑,

-s 指定搜索源代碼文件的路徑,

-M 指定搜索幫助文件的路徑。