linux精確查找——find命令
find - search for files in a directory hierarchy
find [path...] [expression]
path:是指文件的路徑,比如/var,/etc,/tmp等工作目錄;
expression:
選項:比如-user,-root,-size,-perm
條件:本次查找的標準,可以是文件名,可以是文件大小,可以是文件的權限信息,可以是時間戳等等。
處理動作:默認是-print輸出,可以是-ls 顯示文件的具體屬性信息,也可以是進行某種操作;
expression:
根據文件名查找:
-name pattern:根據文件名查找,支持使用、Globbing字符查找(*,[^],[],?)等
-iname pattern:忽略文件名的大小寫進行查找
-samefile pattern:根據指定的文件名,查找其他硬鏈接的文件的路徑;
根據文件的inode號查找:
-inum n:
-links n:查找硬連接數為"n"的文件;
-regex pattern:
-iregex pattern:
根據文件所有權進行查找:
-user uname:
-uid UID:就是根據用戶名和/或用戶ID,查找屬主為這個用戶賬戶的所有文件;
-group gname:
-gid GID:就是根據組名和/或組ID,查找屬組為這個組賬戶的所有文件;
-nogroup:在文件的所有權的權限位上,沒有屬組名稱僅顯示屬組ID的文件;
-nouser:在文件的所有權的權限位上,沒有屬主名稱僅顯示屬主ID的文件;
根據文件的類型:
-type c:
c表示文件類型的單字符描述符,其中包括:
b:塊設備
c:字符設備
d:目錄
f:普通文件
l:符號鏈接
p:管道
s:套接字
-xtype
符號連接文件的查找結果需要其他選擇的配合才能找到,否則查找的是被鏈接的原文件;
根據時間戳進行查找:
以天為時間單位進行查找:
-atime [+|-]n:根據訪問時間戳進行查找
-ctime [+|-]n:根據改變時間戳進行查找
-mtime [+|-]n:根據修改時間戳進行查找
n:[n,n+1)
+n:[n+1,+oo)
-n:[now,n)
用簡單的語言來說,就是下圖的結果。
以分鐘為單位進行查找:
amin [+|-]n:
cmin [+|-]n:
mmin [+|-]n:
根據文件的大小進行查找:
-size n[cwbkMG]
n:(n-1,n]
+n:[n,+oo)
-n:[0,n-1]
邏輯運算操作符組合前面的條件進行復雜邏輯的判斷:
-a | -and:邏輯與運算,默認就是該邏輯運算,可省略;
-o | -or:邏輯或運算;
-not | !:邏輯非運算;
德默根定律依然生效;A&B=!A|!B
根據權限來查找:
-perm [/|-]mode:
mode:精確權限匹配,意思是查找必須與指定的權限位完全匹配的文件;
/mode:任何一個權限位的權限中只要有一個去權限能夠滿足條件,即為匹配成功,就可以將之作為查找結果;隱含的邏輯或關系;
-mode:每一個權限位的權限中都必須同時包含指定的權限位,才能滿足條件,才算匹配成功,將之作為查找結果;隱含了邏輯與關系;
真 取反 假
假 取反 真
全部為真 取反 任何一個為假
全部為假 取反 任何一個為真
處理動作:
-print:將符合條件的查找結果直接輸出到標準輸出;默認動作;
-ls:將符合條件的查找結果以"ls -dils"命令的執行結果進行顯示;
-exec command {} \;
-ok command {} \;
對於符合條件的查找結果按照"command"命令再執行一遍,{}為占位符,其含義是:用來引用find命令查找結果中的各個文件的路徑信息;
ex:
查找當前系統上沒有屬主或屬組,且最近一個月內曾被訪問過的文件,並將其屬主屬組均修改為root;
~]# find -nouser -o -nogroup -a -atime 30 -exec chown root,root {} \
註意:
-exec是非交互式的;-ok是交互式的;
很多命令是不能放置於管道後面使用的;因為管道輸送的是純字符串信息,因此管道後面的命令一般來講都必須是處理字符串的命令;通常,可以使用xarge命令將其轉換成能夠被管道後面的命令處理的參數;
linux精確查找——find命令