大家好,我是良許。 在系統里查找文件,是所有工程師都必備的技能(不管你用的是 Windows 、Linux、還是 MacOS 系統)。對於 Linux 操作系統,單單一個 find 命令就可以完成非常多的搜索工作。 但是,文件搜索命令遠不止一個 find 命令,還有很多。本文就對 Linux 下文件 ...
大家好,我是良許。
在系統里查找文件,是所有工程師都必備的技能(不管你用的是 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