文件查找詳解

一、簡介

    在文件系統上常常需要根據文件的各種屬性去查找符合條件的文件,文件查找工具有兩個,locate和find。

二、分類

    文件查找分爲:

        實時查找:遍歷所有文件進行條件匹配(find);

        非實時查找:又叫數據庫查找,根據索引查找(locate);

三、locate

    1.查詢系統上預建的文件索引數據庫:/var/lib/mlocate/mlocate.db;

    2.依賴於事先構建的索引:

        索引的構建是在系統空閒時由系統自動進行(週期性任務);管理員手動更新數據庫使用updatedb命令;

    3.索引構建過程需要遍歷整個根文件系統,極消耗資源;

    4.工作特點:

        查找速度快、非精確查找、模糊查找、搜索的是文件全路徑,不僅僅是文件名、可能只搜索用戶具備讀取和執行權限的目錄;

    5.格式:locate KEYWORD

                搜索名稱或路徑帶有“issue”的文件

                wKiom1mRraCAg_ltAACJMcPMkN0970.png-wh_50


    OPTION:

        -i:忽略大小寫的搜索;

                wKioL1mRrmmyVpQtAACcJirrPgE719.png-wh_50


        -n X:只列舉前X個匹配項目;

                wKiom1mRrpHCoRfWAAArWY0lUl8536.png-wh_50


            eg1:使用Regex來搜索以“.sh”結尾的文件

                wKiom1mRr-PBcXjtAABbelyP4vg450.png-wh_50

四、find

    1.find屬於實時查找工具,通過遍歷指定路徑下的文件系統完成文件查找;

    2.工作特點:

        精確查找、查找速度略慢、可能只搜索用戶具備讀取和執行權限的目錄;

    3.語法:find [OPTION]... [查找路徑] [查找條件] [處理動作]

        查找路徑:制定具體目標路徑,默認爲當前目錄;

        查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的所有文件;

        處理動作:對符合條件的文件做操作,默認輸出至屏幕;

    4.查找條件

        根據文件名和inode查找

            -name "文件名稱":支持使用glob *, ?, [], [^]


                搜索名爲root的所有文件;

                wKioL1mRtFniaK-KAABhAmaJ044291.png-wh_50


                wKioL1mRtKPT8KVeAABp1wptVPY050.png-wh_50


            -iname "文件名稱":不區分字母大小寫

                wKiom1mRtRChTpMaAABrrQjRxQ0632.png-wh_50


            -inum n:按inode號查找

                wKiom1mRtcGhW7DdAAAcMyXUfZI638.png-wh_50


            -samefile name:相同inode號的文件

                wKioL1mRtmfxo9zPAACBfH9rqgM474.png-wh_50


            -links n:鏈接數爲n的文件

                wKiom1mRtwizZTXrAACFFz2peqo613.png-wh_50


            -regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不僅僅是文件名稱

                wKiom1mRt5qx1iOPAAD7RYPKx_Y171.png-wh_50


    根據屬主、屬組查找:

        -user USERNAME:查找屬主爲指定用戶(UID)的文件

                wKiom1mRu8eyFQzrAAB3FWok25A870.png-wh_50


        -group GRPNAME: 查找屬組爲指定組(GID)的文件

                wKiom1mRvB-xlzF7AACBGEVMT3I228.png-wh_50


        -uid UserID:查找屬主爲指定的UID號的文件

                wKiom1mRvJTRYSAvAAB5OKvqyYE828.png-wh_50


        -gid GroupID:查找屬組爲指定的GID號的文件

                wKiom1mRvMDxx0nSAACDsVx1uyQ473.png-wh_50

        -nouser:查找沒有屬主的文件     

        -nogroup:查找沒有屬組的文件


    根據文件類型查找:

        -type TYPE:

            f: 普通文件

                wKiom1mRv4GwxdfPAABIugZN__I063.png-wh_50

            d: 目錄文件

            l: 符號鏈接文件

                wKiom1mRv8qDKG3sAAByTdF06c4747.png-wh_50

            s:套接字文件

            b: 塊設備文件

            c: 字符設備文件

            p: 管道文件


    根據組合條件查找:       

        與:-a

        或:-o

        非:-not,!,條件取反

    德·摩根定律:

        非(P 且 Q) = (非 P) 或 (非 Q)

        非(P 或 Q) = (非 P) 且 (非 Q)

        -not(A -a B)=-not A -o -not B:不是A或者不是B;

        -not(A -o B)=-not A -a -not B:不是A也不是B;

                

            eg1:查找屬主是tom且不是普通文件的文件;        

                wKiom1mRwmbi9vqjAABuOHt_n1c540.png-wh_50


            eg2:查找屬主是tom和bash的所有文件;

                wKiom1mRw4_xcziSAAC3jTwV-nY615.png-wh_50


            eg3:查找屬主是tom且屬組不是tom的文件

                wKioL1mRxjChkUMfAABpPpFtYXs614.png-wh_50


            eg4:查找屬主是tom或者屬主是bash的文件

                wKiom1mRxx6AnAfFAACz1zUb_48968.png-wh_50


            eg5:查找屬主不是tom也不是bash的文件

                wKioL1mRx_Kh1xq9AAB_cJdaeEI189.png-wh_50


            eg6:查找數值是bash或者屬主UID號爲4010的文件

                wKioL1mRyGrg0GEYAAC2lSSEJ_U160.png-wh_50


             eg7:找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件

                wKioL1mRyiPTYwfJAABfwSs6oZo450.png-wh_50


            eg8:排除目錄:find /etc -path ‘/etc/sane.d’ -a -prune -o-name *.conf

                wKioL1mRytbBsvS8AADQykmgRDo901.png-wh_50


    根據文件大小來查找:

        -size [+|-]#UNIT

            常用單位:k, M, G

        #UNIT: (#-1, #],如:10k

        -#UNIT:[0,#-1], 如:-10k

        +#UNIT:(#,∞),   如:+10k

                wKioL1mRzvWjd7eRAACQG6X-1oU120.png-wh_50


    根據時間戳查找

        以“天”爲單位;

            -atime [+|-]#, 

            #: [#,#+1)

            +#: [#+1,∞]

            -#:[0,#)

            -mtime;

            -ctime;

        以“分鐘”爲單位:

            -amin;

            -mmin;

            -cmin;


    根據權限查找:

        -perm [/|-]MODE


            MODE: 精確權限匹配;

                wKiom1mR3PGjB57SAABjg2ER3FQ897.png-wh_50


            /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關係,+ 從centos7開始淘汰;    

                表示任何一類用戶的權限中包含寫權限就OK;

                wKioL1mR3X-A38gGAABMEZxApy0512.png-wh_50


            -MODE:每一類對象都必須同時擁有指定權限,與關係;

                wKiom1mR3sigdm0EAAB8ozQNJ8I408.png-wh_50


            0:表示不關注;

            find -perm 755 會匹配權限模式恰好是755的文件;

            find -perm /222,只要當任意人有寫權限時,就會匹配;

            find -perm -222,只有當每個人都有寫權限時,纔會匹配;

            find -perm -002,只有當其它人(other)有寫權限時,纔會匹配;


    處理動作:

        -print:默認的處理動作,顯示至屏幕; 

        -ls:類似於對查找到的文件執行“ls-l”命令;

        -delete:刪除查找到的文件; 

        -fls file:查找到的所有文件的長格式信息保存至指定文件中;

                wKioL1mSVA-xU-1QAACGews3vVk443.png-wh_50


        -ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;

                對於每個文件執行命令之前,都會交互式要求用戶確認

                wKioL1mSVzKDn38qAAB49ENqqPc145.png-wh_50


        -exec COMMAND {} \; 對查找到的每個文件執行由 COMMAND指定的命令;

                wKiom1mSV3Ox6vP0AACGNGw6JEo279.png-wh_50

                

        {}: 用於引用查找到的文件名稱自身;

        find傳遞查找到的文件至後面指定的命令時,查找到所有符合 條件的文件一次性傳遞給後面的命令; 

        有些命令不能接受過多參數,此時命令執行可能會失敗,下 面方式可規避此問題 find |xargs COMMAND;           

         示例:
              find -name  “*.conf”  -exec cp {}  {}.org  \;
              ##備份配置文件,添加.orig這個擴展名
                
              find /tmp -ctime +3 -user joe -ok rm {} \;
              ##提示刪除存在時間超過3天以上的joe的臨時文件 
                
              find ~ -perm -002 -exec chmod o-w {} \;
              ##在你的主目錄中尋找可被其它用戶寫入的文件 
                
              find /data –type  f -perm 644 -name *.sh – exec chmod 755 {} \; 
              ##查找.sh結尾權限爲644的普通文件,把644文件權限改爲755
                
              find /home –type d -ls
              ##查找/home目錄下的目錄文件並以長格式顯示;

                    


                

       

            

                


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