Linux系列之查找命令
- 2022 年 7 月 4 日
- 筆記
前言
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中查找東西的介紹 😃

