find命令:
在Linux文件管理中,find的命令是個很強大的實時查找工具,通過遍歷指定路徑下文件系統層級結構完成文件查找。
特性:查找速度慢(因爲從根目錄開始查找)、精確查找、實時查找。
用法:
find [OPTION] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標起始路徑,默認爲當前目錄;
查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關係、權限等等標準進行;默認爲找出指定路徑下的所有文件;
1. 查找條件:
表達式:選項和測試
測試:結果通常爲布爾型("true", "false")
根據文件名查找:
-name "pattern"
例如:find /etc -name "passwd" #精確匹配文件名,以passwd命名的文件
-iname "pattern" :不區分文件名中的大小寫,支持glob風格的通配符 *,?,[],
例如:
find /etc -iname "passwd" #不區分大小寫查找passwd命名的文件或目錄
find /etc -iname "*passwd" #查找文件名以passwd結尾的文件或目錄
find /etc -iname "passwd*" #查找文件名以passwd開頭的文件或目錄
-regex pattern;基於正則表達式查找
根據文件從屬關係查找:
-user USERNAME:查找屬主爲指定用戶的所有文件;
例如: find /tmp -user shakura #查找tmp目錄下shakura用戶的文件或目錄
-group USERNAME:查找屬組爲指定組的所有文件;
例如:find /tmp -group root #查找tmp目錄下屬組爲root的文件文件或目錄
-uid UID:查找屬主指定的UID的所有文件;
例如:find /tmp -uid 1003 #查找tmp目錄下用戶id爲1003的文件或目錄
-gid GID: 查找屬組爲指定的GID的所有文件;
-nouser: 查找沒有屬主的文件;
-nogroup:查找沒有屬組的文件;
注意:如果你將系統中的某個賬號刪除了,但是該賬號又在系統內創建了很多文件就 可以使用-nouser命令將這些文件找出來了;
例如:find ./ -nouser(#-nogroup) #在根目錄下查找沒有屬主、屬組的文件或目錄
根據文件類型查找:
-type TYPE
文件的主要類型有:普通文件(f)、目錄文件(d)、符號連接文件(l)、
設備文件(b:塊 設備文件、c:字符設備文件)、套接字文件(s)、管道文件(p)
例如:find /var -type s #查找/var目錄下文件類型爲Socket的文件
組合測試:
與:-a
或:-o
非:-not
根據文件大小查找:
-size[+|-]#UNIT
常用單位:k,M,G
#UNIT:(#-1, #] #以50k爲例,比50k小1K或等於50k的文件
-#UNIT:[0,#-1] #以50k爲例,比50k小的文件(不包含)
+#UNIT:(#,+OO) #以50k爲例,比50k大的文件(不包含)
根據時間戳查找:
以“天”爲單位:-mtime、-ctime、-atime
-atime [+|-]#:n
#:[#,#-1) #天之前”一天之內“被訪問過的文件
+#:(oo, #-1] #天之前(不含#天)被訪問過的文件
-#:(#, 0] #天之內(含#天)被訪問過的文件
以“分鐘”爲單位:-amin、mmin、cmin;(同上,這裏不再贅述)
根據權限來查找:
-perm [+|-]mode
mode:精確權限匹配;
例如:查找權限爲755的文件或目錄,只能匹配到的權限爲rwxr-xr-x的文件。
+mode:任何一類用戶(u,g,o)的任何一位權限(r,w,x)符合條件即滿足;
9位權限之間存在“或”關係;
例如:查找權限爲755的文件,即rwxr-xr-x,權限爲rw-------的文件也滿足條件。
-mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足;
9位權限之間存在“與”關係;
例如:查找權限爲744的文件,即rwxr--r--,權限爲rw-r-xr-x的文件也滿足條件。
2.處理動作
對符合查找條件的文件做出的操作,例如刪除等操作,默認爲輸出至標準輸出。
-print:輸出至標準輸出;默認的動作;
-s:類似於對查找到的文件執行"ls -l"命令,輸出文件的詳細信息;
-delete: 刪除查找到的文件;
find -name 1.txt -delete #查找文件名爲1.txt的文件並刪除
-fls /PATH/TO/SOMEFILE: 把查找到的所有文件的長格式信息保存至文件中;
例如:
[root@localhost ~]# find /var/log -fls /1.txt | cat /1.txt
786433 4 drwxr-xr-x 12 root root 4096 Dec 19 19:01 /var/log
786437 4 drwx------ 2 root root 4096 Mar 16 2015 /var/log/ppp
786451 4 drwx------ 2 root root 4096 Jul 24 19:53 /var/log/httpd
786448 4 -rw------- 1 root root 591 Dec 19 19:01 /var/log/maillog
786473 8 -rw-r--r-- 2 root root 6772 Dec 19 19:01 /var/log/boot.log
# 查找/var/log目錄下的文件,將文件信息的長格式信息保存至1.txt文件中,用cat命令查
看1.txt文件的內容,輸出信息如上圖所示;
-ok COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都 與用戶進行確認;
例如:find ./ -nouser -a -nogroup -ok chmod root:root {}\;
#查找在根目錄下無屬主、屬組的文件並將屬主、屬組該爲root
-exec COMMAND{}\; :對查找到的每個文件執行由COMMAND表示的命令,直接修改完成
find ./ -perm /002 -exe c mv {} {}.dangereous \;
#查找其他用戶有寫權限的文件並在文件名後添加後綴dangerous
注意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有符合條件的文件路徑,並一次性傳遞給後面的命令。但是有些命令不能接受過長的參數,此時命令執行會失敗,另一種方式可規避此問題;