厲害了!除了find命令,還有這麼多文件查找命令,高手必備!
- 2020 年 6 月 16 日
- 筆記
大家好,我是良許。
在系統里查找文件,是所有工程師都必備的技能(不管你用的是 Windows 、Linux、還是 MacOS 系統)。對於 Linux 作業系統,單單一個 find 命令就可以完成非常多的搜索工作。
但是,文件搜索命令遠不止一個 find 命令,還有很多。本文就對 Linux 下文件搜索命令進行一個科普,讓你能夠在短時間內找到自己需要的文件。
1. find
find
命令應該是最經典的命令了,談到搜索工具第一個想到的肯定是 find 命令。但是,find 命令非常強大,想要把它的功能都介紹一遍,恐怕要寫好幾篇文章。
所以,這裡就偷個懶,介紹最基本的,根據文件名查找文件的方法。假如我們想搜索當前目錄(及其子目錄)下所有 .sh
文件,可以這樣搜索:
2. locate
locate
是另外一個根據文件名來搜索文件的命令。區別於 find 命令,locate 命令無需指定路徑,直接搜索即可。
這個命令不是直接去系統的各個角落搜索文件,而是在一個叫 mlocate.db
的資料庫下搜索。這個資料庫位於 /var/lib/mlocate/mlocate.db
,它包含了系統里所有文件的索引,並且會在每天早上的時候由 cron 工具自動更新一次。
正因為如此,locate 的搜索速度遠快於 find 命令,因為它直接在資料庫里檢索,速度自然更快。
locate 命令在找到文件之後,將直接顯示該文件的絕對路徑,比如:
但是 locate 命令有個弊端,它無法搜索當天所創建的文件,因為它的資料庫一天只在早上更新一次。比如我現在創建一個新文件,locate 沒辦法搜索到:
為了解決這個問題,我們可以使用 updatedb
命令手動去更新它的資料庫:
$ sudo updadb
然後,我們就可以搜索到新文件了。
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
選項列出文件的資訊。
同樣地,我們可以使用 -s
限定只搜索源碼路徑,使用 -m
搜索 man page 路徑,使用 -s
指定搜索源程式碼文件的路徑,使用 -M
指定搜索幫助文件的路徑。
公眾號:良許Linux