find命令基本用法及練習

find是一款實時查找工具,經過遍歷指定路徑完成文件查找
    工做特色:   
        查找速度慢
        精確查找
        實時查找
        可能只是搜索用戶具有讀取和執行權限的目錄

    語法
        find [option] [查找路徑] [查找條件][處理動做]

            查找路徑:指定具體目標路徑;默認爲當前目錄
            查找條件:指定的查找標準,能夠文件名,大小 類型 權限 等標準進行
                默認爲找出指定路徑下的全部文件
            處理動做:對符合條件的文件作操做,默認輸出至屏幕

            指定搜索層級:
                -maxdepth level 最大搜索目錄深度,指定目錄爲第一級
                -mindepth level 最小搜索目錄深度
            根據文件名和inode查找
                -name 「文件名稱」:支持使用glob
                    * ? [] [^]
                -iname "文件名稱":不區分字母大小寫  
                -inum n  按inode號查找  
                -samefile name  相同inode號的文件  
                -links n   連接數爲n的文件  
                -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不單單是文件名稱

            根據屬主、屬組查找:  
                -user USERNAME:查找屬主爲指定用戶(UID)的文件  
                -group GRPNAME: 查找屬組爲指定組(GID)的文件  
                -uid UserID:查找屬主爲指定的UID號的文件  
                -gid GroupID:查找屬組爲指定的GID號的文件  
                -nouser:查找沒有屬主的文件  
                -nogroup:查找沒有屬組的文件 

            根據文件類型查找
                -type TYPE:  
                    f: 普通文件 
                    d: 目錄文件  
                    l: 符號連接文件  
                    s:套接字文件  
                    b: 塊設備文件  
                    c: 字符設備文件  
                    p: 管道文件 
            空文件或者目錄
                -empty
                    find /app -tpye d -empty

            組合條件
                與:-a
                或:-o 
                非: -not !

            德摩根定律
                (非A) 或 (非B) = 非(A且B) 
                (非A) 且 (非B) = 非(A或B)
                ps:
                    實例:
                        !A -a !B = !(A -o B)
                        !A -o !B = !(A -a B)

    find 示例
        find -name snow.png 
        find -iname snow.png 
        find / -name  「*.txt」 
        find /var –name 「*log*」 
        find  -user joe  -group joe 
        find -user joe -not -group joe 
        find -user joe -o -user jane 
        find -not  \(  -user joe -o -user jane  \) 
        find / -user joe -o -uid 500
    找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件 
        find /tmp \( -not -user root -a -not -name 'f*' \) -ls 
        find /tmp -not \( -user root -o -name 'f*' \)  –ls 
    排除目錄 
        示例:  
            查找/etc/下,除/etc/sane.d目錄的其它全部.conf後綴的文件    
            find /etc -path ‘/etc/sane.d’ -a –prune -o -name 「*.conf」   
            查找/etc/下,除/etc/sane.d和/etc/fonts兩個目錄的全部.conf後綴的文件    
            find /etc \(–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ \)   -a -prune –o -name 「*.conf」

    根據文件大小來查找:  
        -size [+|-]#UNIT   
            經常使用單位:k, M, G,c(byte)  
        #UNIT: (#-1, #]   
            如:6k 表示(5k,6k]  
        -#UNIT:[0,#-1]   
            如:-6k 表示[0,5k]  
        +#UNIT:(#,∞)   
            如:+6k 表示(6k,∞)  

    根據時間戳:  
        以「天」爲單位;     
            -atime [+|-]#,     
                    #: [#,#+1)   
                    +#: [#+1,∞]   
                    -#: [0,#)      
            -mtime      
            -ctime  
        以「分鐘」爲單位:      
            -amin      
            -mmin      
            -cmin 

    根據權限查找:    
        -perm [/|-]MODE  
            MODE: 精確權限匹配  
            /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配便可,或關係,+ 從centos7開始淘汰  
            -MODE:每一類對象都必須同時擁有指定權限,與關係         
            0 表示不關注  
                find -perm 755 會匹配權限模式剛好是755的文件 
                只要當任意人有寫權限時,find -perm +222就會匹配 
                只有當每一個人都有寫權限時,find -perm -222纔會匹配 
                只有當其它人(other)有寫權限時,find -perm -002纔會匹配  

    處理動做    
        -print:默認的處理動做,顯示至屏幕 
        -ls:相似於對查找到的文件執行「ls -l」命令 
        -delete:刪除查找到的文件 
        -fls file:查找到的全部文件的長格式信息保存至指定文件中 
        -ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令,對於 每一個文件執行命令以前,都會交互式要求用戶確認 
        -exec COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令  不進行提示直接處理要注意安全
        {}: 用於引用查找到的文件名稱自身 
        find傳遞查找到的文件至後面指定的命令時,查找到全部符合條件的文件一次性 傳遞給後面的命令
        因爲不少命令不支持管道|來傳遞參數,而平常工做中有這個必要,因此就有了 xargs命令 
        xargs用於產生某個命令的參數,xargs 能夠讀入 stdin 的數據,而且以空格符 或回車符將 stdin 的數據分隔成爲arguments  
        注意:文件名或者是其餘意義的名詞內含有空格符的狀況 
        有些命令不能接受過多參數,命令執行可能會失敗,xargs能夠解決 
            示例:  ls f* |xargs   
                rm   find /sbin -perm +700 |ls -l       這個命令是錯誤的  
                find /sbin -perm +7000 | xargs ls –l 
        find和xargs格式:find | xargs COMMAND 

    ps:

        備份配置文件,添加.orig這個擴展名  
            find  -name  「*.conf」  -exec  cp {}  {}.orig  \; 
        提示刪除存在時間超過3天以上的joe的臨時文件  
            find /tmp -ctime +3 -user joe -ok rm {} \; 
        在主目錄中尋找可被其它用戶寫入的文件 
            find ~ -perm -002  -exec chmod o-w {} \; 
        查找/data下的權限爲644,後綴爲sh的普通文件,增長執行權限  
            find /data –type  f -perm 644  -name 「*.sh」 –exec chmod 755 {} \; 
        查看/home的目錄  find  /home –type d -ls

練習題:
一、查找/var目錄下屬主爲root,且屬組爲mail的全部文件node

find /var -user root -group mail

find命令基本用法及練習
二、查找/var目錄下不屬於root、lp、gdm的全部文件 centos

find /var -not \( -user root -o -user lp -o -user gdm \)

find命令基本用法及練習
三、查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是 postfix的文件 安全

find /var -not \( -user root -o -user  postfix \) -mtime -7

find命令基本用法及練習
四、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件 app

find /  -nogroup -nouser -atime -7 -ls

find命令基本用法及練習
五、查找/etc目錄下大於1M且類型爲普通文件的全部文件 ide

find /etc -size +1M -type f

find命令基本用法及練習
六、查找/etc目錄下全部用戶都沒有寫權限的文件 工具

find /etc -not -perm /222

find命令基本用法及練習
七、查找/etc目錄下至少有一類用戶沒有執行權限的文件 post

#centos7 +號使用/替代
find /etc -not -perm /222

find命令基本用法及練習
八、查找/etc/init.d目錄下,全部用戶都有執行權限,且其它用戶有寫權限的文件ui

find /etc/init.d -perm -113

find命令基本用法及練習

相關文章
相關標籤/搜索