功能強大的查詢命令 find

2021-06-21 16:03:16 字數 3727 閱讀 6809

find命令能夠按多種方式指定查詢條件,然後進行查詢出指定的檔案。

說明:因為find命令功能強大,而且能夠設定查詢條件,裡面涉及的許可權和檔案型別的相關知識,所以大家可以在學完相應的章節後再來學習find命令。

find命令的執行方式:

# find 查詢的路徑 [選項] [對查詢到結果執行的命令]

find命令能夠按照使用者給定的條件進行查詢,並且可以指定查詢的路徑,它甚至可以在整個檔案系統內或者在具有網路檔案系統(nfs)的情況下進行查詢。

為了方便起見,我們將根據find 命令的選項進行分類說明。

1.根據檔案時間狀態進行查詢

大家還記得介紹touch命令時提到的與檔案有關的三個時間吧,所以根據檔案時間狀態進行查詢主要有以下幾項:

-atime(+ | -)n:此選項代表查詢出n天以前被讀取過的檔案。

-mtime(+ | -)n:此選項代表查詢出n天以前檔案內容發生改變的檔案。

-ctime(+ | -)n:此選項代表查詢出n天以前的檔案的屬性發生改變的檔案。

-newer file:此選項代表查詢出所有比file新的檔案。

-newer file1! –newer file2:此選項代表查詢比file1

檔案時間新但是沒有file2時間新的檔案。

說明:

n為數字,如果前面沒有+或者-號,代表的是查詢出n天以前的,但是只是一天之內的範圍內發生變化的檔案。

如果n前面有+號,則代表查詢距離n天之前的發生變化的檔案。如果是減號,則代表查詢距離n天之內的所有發生變化的檔案。

-newer file1 ! –newer file2中的!是邏輯非運算子。

下面舉例說明,現在想查詢一下所有在最近三天之內內容發生變化的檔案,可以執行:

# find / -mtime -3

如果想查詢在/home目錄下查詢比file1新但是沒有file2新的檔案,則執行命令:

#find /home -newer file1 ! –newer file2

2.根據使用者或者組進行查詢

系統記錄乙個使用者實際上記錄的是它的uid號,而記錄組則是記錄的gid號,所以根據使用者或者組進行查詢的選項為:

-user 使用者名稱:根據檔案的屬主名查詢檔案。

-group 組名:根據檔案的屬組名查詢檔案。

-uid n:根據檔案屬主的uid進行查詢檔案。

-gid n:根據檔案屬組的gid進行查詢檔案。

-nouser:查詢檔案屬主在/etc/passwd檔案中不存在的檔案。

-nogroup:查詢檔案屬組在/etc/group檔案中不存在的檔案。

說明:

關於使用者的uid和gid的說明請查閱使用者管理一章。

有時我們可能使用乙個使用者建立了一些檔案,當此使用者被刪除後,他所建立的檔案就成了無屬主的檔案了,所以我們應該用-nouser來查詢,-nogroup與之相同。

下面舉例說明,現在想查詢所有在/home目錄中屬主是ubuntu使用者的檔案,應執行命令:

# find /home -user ubuntu

查詢出/etc/下所有不屬於任何人的檔案,應執行命令:

# find /etc -nouser

3.根據檔案的許可權或者大小名字體別進行查詢

linux裡的檔案是否能夠執行與它的副檔名無關,主要是看它是否設定了可執行許可權。所以根據檔案許可權我們也可以設定查詢條件:

-name檔名:按找檔名進行查詢。

-type檔案型別:按檔案型別進行查詢。

-size[+| -]n(c|k):按照檔案尺寸進行查詢。

-perm[+| -]檔案許可權:按照檔案許可權進行查詢。

說明:

檔案型別可以通過ls -l命令進行查詢,「-」代表普通檔案,「d」代表目錄。「b」代表裝置檔案,「c」代表字元裝置檔案,具體每部分的含義詳見檔案系統一章。

按檔案大小進行查詢時,預設的單位是塊,因為絕大多數人習慣使用位元組或者k等單位,所以我們用「c」表示位元組,用「k」表示1024位元組。前面如果有「+」號代表大於n所指定的大小,「-」代表小於n所指定的大小,沒有的話表示正好等於n所指定的大小。

關於檔案的許可權設定請參照檔案系統章節中許可權設定部分,在此不再詳述。但需要注意的是此許可權應該是4位,即加上了特殊許可權位的部分。如果檔案許可權前面有「+」號,則表示所查詢的檔案的許可權中有前面許可權條件的任意乙個即可,如果是「-」號,則表示所查詢的檔案的許可權中至少要包含前面許可權的所有,比許可權條件多沒有關係,但一定不能少於許可權條件。

下面舉例說明,現在想找出/etc目錄內所有的檔案大小超過1mb的檔案,則執行命令:

# find /etc -size +1000000c

在此處1000000c也可以用1000k來表示。

如果想要找出系統內所有具有suid位的檔案,則執行命令:

# find / -perm -4000

因為找到的檔案必須要具有suid位,所以要用」-4000」,如果是用「+4000」的話,意思是乙個檔案只要擁有上述任意乙個條件就會被顯示出來。

如果想查系統內所有具有suid,sgid或者黏滯位的檔案找出來,可以執行命令:

# find / -perm +7000

這條命令將會把系統內的任意乙個只要具有suid或者sgid或黏滯位的檔案都列出來。

4.多個查詢選項的應用

有時候需要查詢同時符合兩個條件,這時需要-a或者-o選項:

-o:邏輯或,兩個條件只要滿足乙個即可。

-a:邏輯與,兩個條件必須同時滿足。

# find  /etc -size +2048 -a -size -20480

在/etc目錄下查詢大於1mb小於10mb的檔案。

# find  /etc -name inittab -o -name grub.conf

查詢/etc目錄下檔名為inittab或檔名為grub.conf的檔案。

5.對查詢到結果的處理

有時候我們對於查詢到的結果需要對其進行進一步的操作,這就需要使用-exec或者-ok選項,或者使用-print選項。其使用的格式為:

# find 查詢的路徑 [選項] [對結果處理的命令]

前三部分就是在前面三節介紹的設定不同的條件,而對結果進行處理的格式為:

-exec  shell命令  {}  \;

其中-exec就是代表要執行shell命令,後面加的是shell指令,再後面的「{}」表示的是要對前面查詢到的結果進行查詢,最後的「\;」表示命令結束。需要注意的是「{}」和「\」之間是要有空格的。而-ok選項與-exec的唯一區別就是它在執行shell命令的時候會事先進行詢問,-print選項是將結果顯示在標準輸入上。

例如現在我們想查詢系統內所有具有suid位的檔案,並且將結果儲存在/root/suid_file中,則執行命令:

# find / -perm -4000 -exec  ls –l > /root/suid_file  {} \;

這樣就能夠儲存結果了,其中的「>」命令是輸出重定向,可參考shell基礎一章。

其實對於find命令來說它的選項非常多,在此並沒有完全列出,另外find命令也可以與萬用字元進行配合使用,例如,下面的命令就查詢/home目錄下所有以「.txt「為結尾的檔案:

# find /home -name  「*.txt」 -ok rm {} \;

乙個功能強大的linux命令 find

linux下find命令在目錄結構中搜尋檔案,並執行指定的操作。linux下find命令提供了相當多的查詢條件,功能很強大。由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一下。即使系統中含有網路檔案系統 nfs find命令在該檔案系統中同樣有效,只你具有相應的...

功能強大的命令dd

of file ibs bytes obs bytes bs bytes cbs bytes skip blocks seek blocks count blocks conv conversion conversion.總結,通過以上的說明可以看到,引數主要分為以下幾個部分 2.1.1.整盤資料備...

XP功能強大的Tasklist命令

在windows xp中使用 ctrl alt del 組合鍵,進入 windows 任務管理器 在 程序 選項卡中可以檢視本機完整的程序列表,而且可以通過手工定製程序列表的方式獲得更多的程序資訊,如會話id 使用者名稱等,但遺憾的是,我們檢視不到這些程序到底提供了哪些系統服務。其實,在window...