Linux系列之查詢命令

語言: CN / TW / HK

前言

Linux 有四個常用的查詢命令: locatewhereiswhichfind 。本文介紹它們的區別和簡單用法。

locate命令

這個命令將檢查你的整個檔案系統,並找到該關鍵詞的每一次出現。所以你可以想象到,結果可能是令人難以接受的。

locate keyword

locate 使用的資料庫通常每天更新一次,所以如果你在搜尋最近建立的東西,它可能不會在你的搜尋中返回。你可以使用

updatedb

命令手動更新 locate 命令的資料庫。

locate aircrack-ng

whereis命令

在Linux中,可執行檔案被稱為二進位制檔案,如果你想定位一個二進位制檔案, whereislocate 更加有效。

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中查詢東西的介紹 :smiley: