Find命令使用詳解正則表達式
Find是Linux中查找文件的命令,「find」命令能幫助咱們在使用,管理Linux的平常事務中方便的查找出咱們須要的文件。
Find 命令的特色:實時、精確、支持衆多查找標準、遍歷指定目錄中的全部文件完成查找,速度慢;
Find 命令的格式:find 查找路徑 查找標準 查找到之後的處理運做
查找路徑:默認爲當前目錄
查找標準:默認爲指定路徑下的全部文件
處理運做:默認爲顯示
經過文件名查找:
-name 'FILENAME':對文件名做精確匹配
如:查找/etc目錄下的passwd這樣的文件,命令爲:find /etc -name 'passwd'
使用-name對文件名查找的時候還支持對文件名的通配
文件名通配符:「*」任意長度的任意字符、「?」任意單個字符、「[]」匹配指定範圍內的任意單個字符,等等
如:查找/etc目錄下以passwd結尾的文件,命令爲:find /etc -name '*passwd' ,這樣在/etc目錄下以passwd這幾個字母結尾的全部文件都會被顯示出來
查找/etc目錄下以passwd開頭的文件,命令爲:find /etc -name 'passwd*'
-iname 'FILENAME': 文件名匹配時不區分大小寫
-regex PATTERN:基於正則表達式進行文件名匹配
根據屬主、屬組查找:
-user USERNAME
如:查找在/tmp目錄下屬主屬於root的用戶,命令爲:find /tmp -user root
-group GROUPNAME
如:查找在/tmp目錄下屬組屬於root的用戶,命令爲:find /tmp -group root
根據UID、GID查找:
-uid UID 、-gid GID
若是某個用戶被刪,那麼之前全部屬於這個用戶的文件的的屬主都會變成此前這個用戶的ID號,所以這個時候再根據這個屬主就找不到這樣的文件了,此時只能根據它的ID號來查找。如:find /tmp -uid 2003 這樣就會把ID號爲2003的給查找出來。
-nouser:查找沒有屬主的文件
如:find /tmp -nouser 查找/tmp目錄下沒有屬主的用戶
-nogroup: 查找沒有屬組的文件
如:find /tmp -nogroup 查找/tmp目錄下沒有屬組的用戶
根據文件類型來查找:
-type
f: 普通文件、d: 目錄文件、b: 塊設備文件 (block)、c: 字符設備文件 (character)、l: 符號連接文件(symbolic link file)、p: 命令管道文件(pipe)、s: 套接字文件(socket)
如:咱們查找一下/tmp目錄下的目錄文件,命令爲:find /tmp -type d
根據文件的大小來查找:
-size
一般狀況下-size後面都會跟一些數字和單位如:#k、#M、#G,如不跟單位默認爲字節,這些數字還能夠用+、-號來修飾,如:+10k、-10k,意思是大於10k、小於10k,若是不帶+、-號則表示精確爲10k。若是咱們查找條件爲10k時,那麼9k到10k之間的都會被默認爲10k;若是條件爲+10k則表示全部大於10k的文件;若是條件爲-10k則表示全部小於10k的文件。格式爲:find /etc -size 10k、find /etc -size +10k 、find /etc -size -10k。
組合條件:
-a (與)、-o (或)、-not(非)
如:咱們找一找/tmp目錄下沒有屬主而且類型爲目錄的文件
命令則是 find /tmp -nouser -a -type d 這裏就用到了-a(與),若是把-a改成-o則表示/tmp目錄下沒有屬主或者類型爲目錄的文件,兩個條件知足一個便可。若是要查找不是目錄的文件只需在前面加-not便可。如:find /tmp -not -type d
根據文件的時間戳來查找:
-mtime(修改時間)、-ctime(改變時間)、-atime(訪問時間),後面跟數字,數字前面還能夠用+、-號來修飾。如:「-atime 5」表示離此刻爲止恰好五天訪問過「-atime +5」表示至少有五天沒有訪問過了、「-atime -5」表示五天以內訪問過。還有另一組(-mmin、-cmin、-amin)此用法同樣只是表示的時間爲分鐘,(‘time’表示天、‘min’表示分鐘)。
如:查找/tmp 目錄下在五天以內被訪問過的文件,即:find /tmp -atime -5
根據文件的權限來查找:
-perm MODE
-perm MODE:精確匹配
-perm /MODE: 任意一位匹配即知足條件
-perm -MODE: 文件權限能徹底包含此MODE時才符合條件
如:咱們查找當前目錄下文件權限爲644的文件,即:find ./ -perm 644
運做:
-print: 顯示
-ls:相似ls -l的形式顯示每個文件的詳細
若是咱們想在查找到的文件上執行其餘的命令則用到下面的命令:
-ok COMMAND {} \; 每一次操做都須要用戶確認,也能夠用-exec COMMAND {} \;
若是咱們要操做那個文件,並在這個命令格式中須要引用那個文件的話就要使用{}做爲文件名稱佔位符。
在這裏強調一點必定要引用「\;」結尾,不然爲語法錯誤
如:在當前目錄下找到其餘用戶可以讀寫的用戶,把這些用戶的寫權限給去掉
find / -perm -006 -exec chmod o-w {} \; 「{}」是引用查找到的文件
下面是幾個練習題:
1、查找/var目錄下屬主爲root而且屬組爲mail的全部文件;
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用戶的文件;
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文件中;
find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目錄下全部用戶都沒有寫權限的文件,顯示出其詳細信息;
find /etc -not -perm /222 -ls