Linux系列之查找命令

前言

Linux 有四個常用的查找命令:locate、whereis、which 和 find。本文介紹它們的區別和簡單用法。

locate命令

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

locate keyword

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

updatedb

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

locate aircrack-ng

image.png

whereis命令

在Linux中,可執行文件被稱為二進位文件,如果你想定位一個二進位文件,whereis比locate更加有效。

whereis binary

這個命令將返回二進位文件的位置,以及它的源程式碼和手冊頁,如果有的話。

whereis aircrack-ng

image.png

which命令

Linux中的PATH變數存放著作業系統尋找你在命令行中執行的命令的目錄。

which binary

which命令在你的PATH中找到一個二進位文件。如果它在當前PATH中沒有找到該二進位文件,它就什麼也不返回。

which aircrack-ng

image.png

這些目錄通常包括/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是你要尋找的東西的名字,結果將完全匹配。

image.png

搜索每一個目錄,並從頂部開始查找,需要花費一定的時間。我們可以通過指定目錄來加快速度。假設我知道該文件位於home目錄下:

time find /home -type f -name test.txt

這裡我使用了time命令,因此可以看到每個命令花費了多少時間。

image.png

find命令只顯示精確的名稱匹配。如果file.txt有不同的擴展名,它將不會被返回。我創建了另外一個文件text.conf ,現在如果我只用test.txt作為名稱進行搜索,我不再得到test.conf文件的返回。

image.png

我們可以通過使用通配符(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.*

image.png

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 \) 是另一個測試,和第一個測試非常相似,除了該類型為目錄。

image.png

find是一個擁有很多測試強大的命令,請務必多加研究。

總結

以上就是關於在Linux中查找東西的介紹 😃

Tags: