1. 程式人生 > >厲害了!除了find命令,還有這麼多檔案查詢命令,高手必備!

厲害了!除了find命令,還有這麼多檔案查詢命令,高手必備!

大家好,我是良許。 在系統裡查詢檔案,是所有工程師都必備的技能(不管你用的是 Windows 、Linux、還是 MacOS 系統)。對於 Linux 作業系統,單單一個 find 命令就可以完成非常多的搜尋工作。 但是,檔案搜尋命令遠不止一個 find 命令,還有很多。本文就對 Linux 下檔案搜尋命令進行一個科普,讓你能夠在短時間內找到自己需要的檔案。 #### 1. find `find` 命令應該是最經典的命令了,談到搜尋工具第一個想到的肯定是 find 命令。但是,find 命令非常強大,想要把它的功能都介紹一遍,恐怕要寫好幾篇文章。 所以,這裡就偷個懶,介紹最基本的,根據檔名查詢檔案的方法。假如我們想搜尋當前目錄(及其子目錄)下所有 `.sh` 檔案,可以這樣搜尋: ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191650683-1684924313.jpg) #### 2. locate `locate` 是另外一個根據檔名來搜尋檔案的命令。區別於 find 命令,locate 命令無需指定路徑,直接搜尋即可。 這個命令不是直接去系統的各個角落搜尋檔案,而是在一個叫 `mlocate.db` 的資料庫下搜尋。這個資料庫位於 `/var/lib/mlocate/mlocate.db` ,它包含了系統裡所有檔案的索引,並且會在每天早上的時候由 cron 工具自動更新一次。 正因為如此,locate 的搜尋速度遠快於 find 命令,因為它直接在資料庫裡檢索,速度自然更快。 locate 命令在找到檔案之後,將直接顯示該檔案的絕對路徑,比如: ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191650887-211576060.jpg) 但是 locate 命令有個弊端,它無法搜尋當天所建立的檔案,因為它的資料庫一天只在早上更新一次。比如我現在建立一個新檔案,locate 沒辦法搜尋到: ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191651094-77911839.jpg) 為了解決這個問題,我們可以使用 `updatedb` 命令手動去更新它的資料庫: ``` $ sudo updadb ``` 然後,我們就可以搜尋到新檔案了。 ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191651278-449178280.jpg) #### 3. which `which` 命令主要用來查詢可執行檔案的位置,它搜尋的位置指定在 `$PATH` 及 `$MANPATH` 環境變數下的值,預設情況下,`which` 命令將顯示可執行檔案的第一個儲存位置: ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191651471-1708500072.jpg) 如果某個可執行檔案儲存在多個位置,可以使用 `-a` 選項列出所有的位置。 如果你想一次性查詢多個檔案,可以直接跟在 which 命令後面即可。 ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191651647-1221795978.jpg) #### 4. whereis `whereis` 命令會在系統預設安裝目錄(一般是有root許可權時預設安裝的軟體)查詢二進位制檔案、原始碼、文件中包含給定查詢關鍵詞的檔案。(預設目錄有 `/bin`, `/sbin`, `/usr/bin`, `/usr/lib`, `/usr/local/man`等類似路徑)。 一般包含以下三部分內容: - 二進位制檔案的路徑 - 二進位制檔案的原始碼路徑 - 對應 man 檔案的路徑 比如我們現在搜尋 ls 命令: ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191651810-1242551380.jpg) 我們可以使用 `-b` 選項來只搜尋可執行檔案所在位置,使用 `-B` 選項指定搜尋位置,使用 `-f` 選項列出檔案的資訊。 ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200616191652027-1181293380.jpg) 同樣地,我們可以使用 `-s` 限定只搜尋原始碼路徑,使用 `-m` 搜尋 man page 路徑,使用 `-s` 指定搜尋原始碼檔案的路徑,使用 `-M` 指定搜尋幫助檔案的路徑。 --- 公眾號:良許Linux ### 有收穫?希望老鐵們來個三連擊,給更多的人看到這