前言
Linux 有四個常用的查詢命令:locate
、whereis
、which
和 find
。本文介紹它們的區別和簡單用法。
locate命令
這個命令將檢查你的整個檔案系統,並找到該關鍵詞的每一次出現。所以你可以想象到,結果可能是令人難以接受的。
locate keyword
locate
使用的資料庫通常每天更新一次,所以如果你在搜尋最近建立的東西,它可能不會在你的搜尋中返回。你可以使用
updatedb
命令手動更新locate
命令的資料庫。
locate aircrack-ng
whereis命令
在Linux中,可執行檔案被稱為二進位制檔案,如果你想定位一個二進位制檔案,whereis
比locate
更加有效。
whereis binary
這個命令將返回二進位制檔案的位置,以及它的原始碼和手冊頁,如果有的話。
whereis aircrack-ng
which命令
Linux中的PATH
變數存放著作業系統尋找你在命令列中執行的命令的目錄。
which binary
which
命令在你的PATH中找到一個二進位制檔案。如果它在當前PATH中沒有找到該二進位制檔案,它就什麼也不返回。
which aircrack-ng
這些目錄通常包括/usr/bin
,但也可能包括/usr/sbin
和其他一些目錄。
find命令
最強大的搜尋命令是find
命令。你可以用它在任何指定的目錄中搜尋,並使用各種引數。
基本語法是:
find directory options expression
假設我有一個名為test.txt
的檔案,我需要找到它但是不確定具體位於哪個目錄下。我可以執行下面的命令,從檔案系統的頂部/
開始搜尋。
find / -type f -name test.txt
具體含義為:
/
表示從檔案系統的頂部開始搜尋。-type
是你要尋找的東西的型別。f
表示檔案,b
表示塊狀特殊裝置檔案,c
表示字元特殊裝置檔案,d
表示目錄,l
表示符號連結。-name
是你要尋找的東西的名字,結果將完全匹配。
搜尋每一個目錄,並從頂部開始查詢,需要花費一定的時間。我們可以通過指定目錄來加快速度。假設我知道該檔案位於home
目錄下:
time find /home -type f -name test.txt
這裡我使用了time
命令,因此可以看到每個命令花費了多少時間。
find
命令只顯示精確的名稱匹配。如果file.txt
有不同的副檔名,它將不會被返回。我建立了另外一個檔案text.conf
,現在如果我只用test.txt
作為名稱進行搜尋,我不再得到test.conf
檔案的返回。
我們可以通過使用萬用字元(wildcards
)來解決這一限制。它們可以讓我們匹配多個字元,並有幾種不同的形式。
假設我們有一個包含cat、hat、what和bat檔案的目錄:
*
匹配多個字元。*at
將會匹配:cat、hat、what、和 bat。?
匹配單個字元。?at
將會匹配:cat、hat、bat,但不匹配what。[]
匹配出現在方括號內的字元。[c, b]
將會匹配cat和bat。
find /home -type f -name test.*
find
支援大量的測試,甚至是操作符。比方說我們想找到許可權不是0600的所有檔案和不是0700的所有目錄。
find ~ \( -type f -not -perm 0600 \) -or \( -type d -not perm 0700 \)
這個命令的意思是:找到許可權不是0600的所有檔案或許可權不是0700的所有目錄。
- 在
~
目錄(home)中進行查詢。 \( -type f -not -perm 0600)
反斜線是對小括號的轉義,我們在這裡使用小括號將測試和操作符組合在一起,形成一個更大的表示式。預設情況下,find
是從左到右進行評估的。-not
告訴我們,如果結果是假的,該測試就是匹配的。-not
可以用!
來縮寫。所以這部分也可以是\`( -type f ! -perm 0600)` 。-or
告訴我們如果任何一個測試為真,那就匹配。可以簡寫為-o
。\( -type d -not perm 0700 \)
是另一個測試,和第一個測試非常相似,除了該型別為目錄。
find
是一個擁有很多測試強大的命令,請務必多加研究。
總結
以上就是關於在Linux中查詢東西的介紹 :)