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 意思同上(不需要反斜線與分號結尾但是需要占位符)
find命令練習題分析:
1、查找/var目錄下屬主為root並且屬組為mail的所有文件;
分析:這個題目比較簡單就是查找屬主是root屬組是mail的文件之間是與的關系,find默認在條件中是與的關系,所以命令如下:
find /var -user root -group mail
2、查找/usr目錄下不屬於root,bin,或student的文件;
分析:這個題目看著簡單,但極易迷惑人,好多人的第一反應就是三者之一是或的關系,真正的意思是所求文件的屬主不能是三者的任何一個,所以命令如下:
find /usr -not -user root -a -not -user bin -a -not -user student
find /usr -not \( -user root -o -user bin -o -user student \)
3、查找/etc目錄下最近一周內內容修改過且不屬於root及student用戶的文件;
分析:這個題目後面的條件跟上面的相同,前面是“最近一周內訪內容修改過”也就是 -mtime -7;所以命令如下:
find /etc -mtime -7 -not \( -user root -o -user student \)
find /etc -mtime -7 -not -user root -a -not -user student
4、查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,並將其屬主屬組均修改為root;
分析:題目是“沒有屬主或屬組”之間是或的關系;“當前系統上”就是“/";後面要修改文件屬主數組,使用”{}“引用,以”\;"來結尾這個必須注意;是個細節,容易出錯;所以命令如下:
find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5、查找/etc目錄下大於1M的文件,並將其文件名寫入/tmp/etc.largefiles文件中;
分析:這個題目難度不大,大於1M的就是“-size +1M” 結果追加到指定路徑即可;所以命令如下:
find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;
分析:這個題目做起來自我感覺讀起來的時候腦子裡想的很清晰,但當去敲命令時,又感覺自己寫的有些蹊跷,讀起命令的時候又感覺很繞嘴;看到命令後不容易清楚的表達出來;“所有用戶都沒有寫權限”第一意思感覺就是“find /etc -not -perm 555 -ls”其實不然;這個“這個都沒有寫權限”表達跟上述第二個題目相似;這裡用反斜槓表示或的關系;命令如下:
find /etc -not -perm /222 -ls
這些例題易錯性比較高,有的不能以第一反應去理解它的題意;是考慮細心的問題;也是我們工作中最應該注意的,後面會繼續跟出相關知識點,望繼續關注
本文出自 “Fly*On*Sky” 博客,請務必保留此出處http://djy0000.blog.51cto.com/5816828/1150964