Linux(三)----find

Linuxfind命令在目錄結構中搜索文件,並執行指定的操作。
Linuxfind命令提供了相當多的查找條件,功能很強大。由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一下。即使系統中含有網絡文件系統( NFS)find命令在該文件系統中同樣有效,只你具有相應的權限。 在運行一個非常消耗資源的find命令時,很多人都傾向於把它放在後臺執行,因爲遍歷一個非常大的文件系統可能會花費很多的時間(這裏是指30G字節以上的文件系統)

1.命令格式:

find PATH [options][action]
2.命令功能:
 用於在文件樹種查找文件,並作出相應的處理(可能訪問磁盤)
3.選項與參數:

1.與時間有關的選項:共有 -atime , -ctime , -mtime ,以 -mtime爲例

 -mtime n :    n爲數字,意義爲在 n 天之前的 [ 一天之內 ] 被更動過內容的檔案;

 -mtime +n :  列出在 n 天之前(不含n天本身)被更動過內容的檔案檔名;

 -mtime -n :   列出在 n 天之內(含n天本身)被更動過內容的檔案檔名;

 -newer file :   file 爲一個存在的檔案,列出比 file 還要新的檔案檔名;


舉例1:

#find / -mtime 0

0 表示目前時間,所以,從現在開始到24小時前,有變動過內容的檔案都會被列出來!如果是三天之前的24小時內,則被表示爲 # find / -mtime 3

wKiom1c4c66T1RqsAABSB-uNb8k406.png

舉例2:

#find /etc -newer /etc/passwd

-newer 用在分辨兩個檔案之間的新舊關係是很有用的!

wKiom1c4caLAms1OAABaAREiqnI292.png


我們現在知道 atime ,ctime ,mtime 的意義,如果你想找出一天內被更改過的文件名,可以用舉例1 的做法,但如果我想要找出『 4 天內被更改過的檔案檔名』呢?那可以使用『find /var -mtime -4 』。那如果是『 4 天前的那一天』就用『find /var -mtime 4 』。有沒有加上『 +, -』差別很大!我們可以用簡單的圖示來說明一下


                                   wKioL1c4WhCT_x8_AAAWEBLRx-E037.png

                                                find相關的時間參數的意義

圖中最右邊爲目前的時間,越往左邊則代表越早前的時間軸啦。由圖我們可以清楚的知道:
+4 代表大於等於 5 天前的檔名:ex> find /var -mtime +4
-4 代表小於等於4 天內的檔名:ex> find /var -mtime -4
4 則是代表 4-5 那一天檔名:ex> find /var -mtime 4


2.與使用者或組名有關的參數:

-uid n :  n 爲數字,這個數字是用戶的賬號ID,即UID,

              這個UID是記錄在 /etc/passwd 裏面與賬號名稱對應的數字。

-gid n :  n 爲數字,這個數字是組名的ID,即GID,

              這個GID是記錄在 /etc/group 裏面

-uesr name :     name 爲使用者賬號名稱

-group name :  name 爲組名

-nouser : 尋找檔案的擁有者不存在 /etc/passwd 的人

-nogroup : 尋找檔案的擁有羣組不存在與  /etc/group 的檔案

      當你自行安裝軟件時,很可能改軟件的屬性中並咩有檔案擁有者,這是可能的!在這個時候,就可以使用 -nouser 和 -nogroup 搜尋。

舉例3:

#find /home -user zyn

搜尋 /home 下屬於zyn 的檔案

wKioL1c4cxSx-OGSAABTsk1i1dI430.png

舉例4:

#find / -nouser

找到系統不屬於任何人的檔案

如果你將系統裏的某個賬號刪除了,但該賬號已經在系統裏面建立很多檔案時,就可能發生無主孤魂的檔案訊在,此時你就可以用 -nouser 來找出該類型的檔案並刪除了。

wKioL1c4dFPSK9pGAAArzlQpmDc787.png

3.與檔案權限及名稱有關的參數:

- name filename : 搜尋文件名爲 filename 的檔案;

-size [ +- ] SIZE :  搜尋比 SIZE 還要大或小的檔案,這個 SIZE 的規格有:c 代表byte ,k 代表                              1024bytes, 所以,要找比50KB 還要打的檔案,就是 [ -size + 50K ];

-type TYPE :    搜尋檔案的類型爲 TYPE 的,類型主要有:一般正規檔案(f), 裝置檔案                                 (b,c),目錄(d),連接檔案(l),scoket(s),及 FIFO (p)等屬性。

-perm mode : 搜尋檔案權限 【剛好等於】 mode 的檔案,這個mode 爲類似 chmod 的屬                         性值,舉例: -rwsr-xr-x ,即4755,

-perm -mode : 搜尋檔案權限【必須要全部囊括 mode的權限】的檔案,舉例:要搜尋

                          -rwxr--r-- ,即0744的檔案,使用 -perm -0744,當一個檔案的權限爲 

                          -rwsr-xr-x ,即4755時,也會被列出來,因爲 -rwsr-xr-x 的屬性已經囊括了                             -rwsr-xr-x  的屬性了。

-perm +mode : 搜尋檔案權限【包括任意mode的權限】的檔案, 舉例:搜尋 -rwxr-xr-x ,                               即 -perm +755 時,但一個文件屬性爲 -rw------- 也會被列出來,因爲他                            有-rw-------的屬性存在!

舉例5:

#find /-name passwd

找出檔名爲passwd 的這個檔案

wKiom1c4czzjbb_3AAAo9FrHduI181.png

舉例6:

#find /var -type s

找出 /var 目錄下,文件類型爲scoket的檔名有哪些?

wKioL1c4dQjgyprkAABc3wnbZUM341.png

舉例7:

#find /-perm +7000

搜尋檔案中含有SUID 或 SGID 或 SBIT 屬性的

所謂7000 就是 ---s--s--t ,那麼只要有s或者t的就列出來, -7000 就是要含有---s--s--t 三個權限

wKiom1c4dBjzcTDkAABa9yqidbQ025.png

4.額外可進行的動作

-exec command :    command 爲其他指令,-exec 後面可再接額外的指令來處理搜尋到的                                    結果。

-print :     將結果打印到屏幕上,這個動作是預設動作!

舉例8:

#find /-perm +7000 -exec ls -l{} \;

將上個例子找到的檔案使用 ls -l 列出來

 ls -l 就是額外的指令,指令不支持命令別名,所以不能用 ll

wKiom1c4dILhRwO7AACGU6NwaIY878.png

舉例9:

#find / -size +1000k

找出大於1MB的檔案

wKioL1c4dZjAloyoAAB3zFZKnY8319.png

find的特殊功能就是能夠進行額外的動作(action),我們將例8用途來說明一下;

                          wKiom1c4bkvz5f2OAAAQI9ub3ZU598.png

{}代表的是有find找到的內容,如上圖所示,find結果會被放到{} 位置中

-exec一直到 \; 是關鍵詞,代表find額外動作的開始(-exec)到結束(\;),在這中間的就是find 指令內的額外動作,在本例中就是【  ls -l{} 】.

因爲【 ;】在bash下是有特殊意義的,因此利用反斜槓來跳脫。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章