Linux系列之查詢命令

2022-07-05 06:01:03

前言

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