find命令
1.1 find概述
1.1.1 介紹
可以對文件進行實時查找,精確查找;find是通過遍歷指定目錄中的所有文件完成查找所以執行的速度慢
1.1.2查找標准
支持眾多查找標准(如支持文件名查找,根據文件權限查找,根據文件類型查找,還可以基於正則表達式對文件名做匹配。
1.1.3 命令格式
find 查找路徑+查找標准+查找到以後的處理動作
(1)查找路徑:省略的時候默認當前目錄
(2)查找標准:默認為指定路徑下的所有文件
(3)處理運作:默認為顯示到屏幕上
1.2 命令格式詳解
直接輸入find命令時:可以顯示當前目錄下的所有文件以及隱藏文件,並且目錄的下的子目錄文件也顯示出來
1.2.1 匹配標准
(1)-name ‘FILENAME’ :對文件名作精確匹配根據文件名查找
例如: find /etc/ -name ‘passwd’ 查找/etc/是否有passwd文件
(2)-iname 'FILENAME' :文件名匹配時 不區分大小寫
(3) -regex PATTERN:基於正則表達式進行文件名匹配
(4) -user USERNAME:根據屬主查找
例如:find /tmp –user root 查找/tmp 下屬主是root的所有文件
(5) -group GROUPNAME :根據屬組查找
例如:find /tmp –group root查找/tmp下屬組是root的所有文件
(6)支持文件名同配(globbing)
*:任意長度的任意字符
?:匹配任意單個字符(就是代表一個字符)(幾個?代表幾個字符)
[ ] :指定范圍內的任意單個 (文件名同配前面已做詳細介紹這裡不再過多強調)
例如:find /etc –name ‘passwd*’ 查找以passwd字符開頭的所有文件
find /etc -name ‘*passwd’ 查找以passwd字符結尾的所有文件
find /etc -name ‘*passwd*’ 查找文件名包含passwd字符的所有文件
(7)-uid UID:根據UID查找(一個用戶被刪除後,此前屬於這個用戶的文件的屬主就會變成這個用戶此前的ID號)
(8) -gid GID:根據GID查找(一個組被刪除後,此前文件的基本組是這個組的文件屬組就會變成這個組此前的組ID號)
(9)-nouser :查找沒有屬主的文件 定期的執行這個命令把那些沒有屬住的文件都交給管理員,因為沒有屬主的文件其他用戶可能有權限訪問或通過一些漏洞獲得權限,隱患很大;這個是我們在工作時必須要注意的
例如:find /tmp –nouser 查找tmp下沒有屬主的文件
(10)-nogroup:查找沒有屬組的文件
例如: find /tmp -nogroup 查找/tmp下沒有屬組的所有文件
(11)-type:根據文件類型查找
f:普通文件;d:目錄;c;字符設備文件;b:塊設備文件;l:鏈接文件;p:管道文件;s:套接字文件
例如:find /tmp –type d :查找tmp下的所有目錄文件
(12)-size:按照大小查找(後不跟單位時,默認單位是字節)
#k;#M;#G; [+|-]#k:大於#k 小於#k(#代表數字)
例如:find /etc –size 10k (大於9k小於等於10k文件都會被查找出來)
find /etc –size -10k(所有小於10k的文件)
find /etc –size +10k(所有大於10k文件
(13)組合條件查找
-a :與條件(如果給出了兩個條件沒有給連接方式時時默認的就是與邏輯)
例如:find /tmp –nouser –a type d 查找/tmp下沒有屬主並且不是目錄的文件
-o :或條件
-not:非條件
not權限最高 帶括號的時候,括號要用反義;與的優先級高於或
(14)按照文件時間戳查找
按天數:
-mtime:根據修改時間查找
-ctime:根據改變時間查找
-atime:根據訪問時間查找
例如: find ./ -amin -5查找當前目錄下五分鐘之內訪問過的文件
find ./ -atime +7 查找當前目錄下至少七天沒有訪問過的文件
[+|-]#a,m,c +#:大於# -#:小於 #天m
按分鐘:
-mmin:根據修改時間查找
-cmin:根據改變時間查找
-amin:根據訪問時間查找
(15)按照文件權限查找
-perm MODE 按權限查找 /mode:任意一位匹配都滿足條件(/644 600可以 )
-perm 後面直接跟權限是做精確匹配的 如:find ./ -prem 644 精確查找權限是644 的文件 例如:find ./ -perm /644意思是只有有一個符合就行
-mode:文件權限能完全包含此mode時才能顯示 每一位必須匹配才行
例如:find ./ -perm -644(查找644的權限文件,755 764 都能匹配到)
1.2.2執行的動作
(1)-print:默認是顯示出來
(2)-ls:類似ls -l的形式顯示每一個文件的詳細
-ok COMMAND \;(以反斜線分號結束,否則是語法錯誤)
-ok COMMAND {}\; :COMMAND:命令行 每一個操作需要用戶確認
-exec COMMAND {} \; :不需要確認
{}就是引用前面匹配到的文件的文件名 然後以\;結尾
例如:find ./ -perm -006 –exec chmod o-w {} \;意思是把權限是006的文件其他用戶的寫權限去掉
find ./ -name “.*sh” –a –perm -111 –exec chmod o-x {} \; 查找以.sh結尾並且所有用戶都具有執行權限的文件,然後把這個文件其他用戶的執行權限去掉
find /etc –size +1M -exec echo {} >> /tmp/etc.largefiles \;查找etc下所有大於1M的文件
find /etc –size +1M | xargs echo {} >> /tmp/etc.largefiles 意思同上(不需要反斜線與分號結尾但是需要占位符)