天天看點

linux find使用教程

find基礎知識

檔案查找:在檔案系統上查找符合條件的檔案的過程;

檔案查找指令:locate, find

    locate: 非實時查找工具;依賴于事先建構的索引;索引的建構是在系統較為空閑時自動進行(周期性任務);手動更新此資料庫(updatedb);查找速度快;模糊查找;

    find:實時查找;查找速度略慢;精确查找;

find指令:

    find [option]... [查找路徑] [查找條件] [處理動作]

        查找路徑:預設為目前路徑;

        查找條件:指定的查找标準,可以根據檔案名、大小、屬主屬組、類型等進行;預設為找出指定路徑下的所有檔案;

        處理動作:對符合條件的檔案做什麼操作;預設為輸出至螢幕;

    查找條件:

        根據檔案名進行查找:

            -name "檔案名稱": 支援使用glob(*, ?, []);

            -iname "檔案名稱":不區分字元大小寫,支援使用glob

            -regex "pattern":以pattern比對整個檔案路徑字元串,而不僅僅是檔案名稱

        根據屬主、屬組查找:

            -user username: 查找屬主為指定使用者的檔案

            -group groupname:

            -uid userid: 查找檔案的屬主指定uid的檔案;

            -gid groupid: 

            -nouser: 查找沒有屬主的檔案;

            -nogroup:查找沒有屬組的檔案;

        根據檔案類型進行查找:

            -type type

            type類型有:

                f: 普通檔案

                d: 目錄

                l: 符号連結

                b: 塊裝置

                c: 字元裝置

                p: 命名管道

                s: 套接字

        組合查找條件:

            與條件:-a

            或條件:-o

            非條件:-not, !

        根據檔案大小來查找:

            -size [+|-]num

                機關:k, m, g

                +num:(num,+oo] 查找的值如果設為x(下同), 範圍為:x>=num

                num:(num-1, num] 範圍為:num-1<=x<num

                -num:[0,num-1] 範圍為:0<x<num-1

        根據時間戳:

            以“天”為機關

                -atime(最近通路時間) 

                    +num:[num+1, +00] 範圍為:x>num+1

                    num:[num,num+1) 範圍為num<x<=num+1

                    -num:[0,num) 範圍為0<x<=num   

                    注意:這項要和-size取值範圍一定要差別開來,很容易混淆.

                -mtime(最近檔案修改時間)

                -ctime(最近檔案屬性修改時間)

        根據權限:

            -perm [/|-]mode

                mode: 精确權限比對

                /mode:任何一類對象(u,g,o)的任何一位權限符合條件即可;隐含或條件;

                -mode:為每一類對象指定的每一位權限都必須同時存在方為符合條件;隐含與條件;

        處理動作:

            -print: 預設處理動作

            -ls:類似于對查找到的每個檔案做"ls -l"的操作;

            -delete: 删除查找到的檔案;

            -fls /path/to/somefile:查找到的檔案的詳細路徑資訊儲存至指定檔案中;

            -ok command {} \;

                對每個檔案執行指定的指令之前需要使用者事先确認;

            -exec command {} \;

                無需使用者确認;

實戰

1、查找/var目錄屬主為root,且屬組為mail的所有檔案;

解答: find /var -user root -a -group mail

2、查找/usr目錄下不屬于root、bin或hadoop的所有檔案;

解答: find /usr -not \( -user root -o -user bin -o -user hadoop \)

3、查找/etc目錄下最近一周内其内容修改過,且屬主不為root或hadoop的所有檔案;

解答: find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)

4、查找目前系統上沒有屬主或屬組,且最近一周内曾被通路過的所有檔案;

解答: find / \( -nouser -o -nogroup \) -a -atime -7

5、查找/etc目錄下大于20k且類型為普通檔案的的所有檔案;

解答: find /etc -size +20k -a -type f

6、查找/etc目錄下所有使用者都沒有寫權限的檔案;

解答: find /etc -not -perm /222

7、查找/etc目錄下至少有一類使用者沒有執行權限的檔案;

解答: find /etc -not -perm -111

8、查找/etc/init.d目錄下,所有使用者都有執行權限,且其它使用者擁有寫權限的檔案;

解答:find /etc/init.d -perm -111 -a -perm -002