厲害了!除了find命令,還有這麼多檔案查詢命令,高手必備!
阿新 • • 發佈:2020-06-16
大家好,我是良許。
在系統裡查詢檔案,是所有工程師都必備的技能(不管你用的是 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
### 有收穫?希望老鐵們來個三連擊,給更多的人看到這