linux中find命令的那些事

     概述:在介紹find這個強大的文件查找命令前,我們先介紹兩個較簡單的文件查找命令whereis和locate命令,通常我們都是先使用whereis或者是locate檢查,如果真的找不到了,才用find來查找,因為whereis和locate是利用數據庫來查找數據的,速度相當快,節約時間,缺點就是有可能找不到你想要的文件,而find是針對整個磁盤系統, 可以根據你的需求查找到你需要的文件,因此說find非常的強大,我們必須得掌握。

 第一部分、whereis和locate命令

    1、whereis(尋找特定的文件)

        常用選項:

            -b :只找二進制格式的文件

            -m :只找在說明文件(manual)路徑下的文件

            -s :只找source源文件

            -u :查找不在上述三個選項的其他特殊文件

       

    2、locate(非實時查找)

        a、locate KEYWORD
?     常用選項:
            -i :執行區分大小寫的搜索
            -n N 只列舉前N個匹配項目

        b、locate foo
            搜索名稱或路徑中帶有“ foo”的文件
?  

        c、locate -r ‘\.foo$’(后面接正則表達式)
            使用Regex來搜索以“ .foo”結尾的文件

       

    查詢系統上預建的文件索引數據庫
        依據/var/lib/mlocate/mlocate.db內的數據庫的記載,找出用戶輸入的關鍵字文件名
?  

    依賴于事先構建的索引
        索引的構建是在系統較為空閑時自動進行(周期性任務), 管理員手動更新數據庫(updatedb),索引構建過程需要遍歷整個根文件系統,極消耗資源。

    工作特點:
        ? 查找速度快
        ? 模糊查找
        ? 非實時查找
        ? 搜索的是文件的全路徑,不僅僅是文件名
        ? 可能只搜索用戶具備讀取和執行權限的目錄 

第二部分、find命令詳解

    實時查找工具,通過遍歷指定路徑完成文件查找;
?     工作特點:
        ? 查找速度略慢
        ? 精確查找
        ? 實時查找
        ? 可能只搜索用戶具備讀取和執行權限的目錄

    find [OPTION]… [查找路徑] [查找條件] [處理動作]
        查找路徑:指定具體目標路徑;默認為當前目錄
        查找條件:指定的查找標準,可以文件名、大小、類型、
        權限等標準進行;默認為找出指定路徑下的所有文件
        處理動作:對符合條件的文件做操作,默認輸出至屏幕

    1、根據文件名或者inode查找

        -name "文件名稱":支持使用glob
                *, ?, [], [^]
        -iname "文件名稱":不區分字母大小寫
        -inum n 按inode號查找
        -samefile name 相同inode號的文件
        -links n 鏈接數為n的文件
        -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

    2、根據屬主、屬組查找:

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

    3、根據文件類型查找:
        -type TYPE:

        TYPE類型:
        f: 普通文件
        d: 目錄文件
        l: 符號鏈接文件
        s:套接字文件
        b: 塊設備文件
        c: 字符設備文件
        p: 管道文件

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

    5、根據時間戳:
        以“天”為單位;
        -atime [+|-]#,
            #: [#,#+1)
            +#: [#+1,∞]
            -#: [0,#)
        -mtime
        -ctime
        以“分鐘”為單位:
            -amin
            -mmin
            -cmin

    6、根據權限查找:
        -perm [/|-]MODE
        

        MODE: 精確權限匹配
        /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系, + 從centos7開始淘汰
        -MODE:每一類對象都必須同時擁有指定權限,與關系0 表示不關注
            find -perm 755 會匹配權限模式恰好是755的文件

            只要當任意人有寫權限時, find -perm +222就會匹配
            只有當每個人都有寫權限時, find -perm -222才會匹配
            只有當其它人( other)有寫權限時, find -perm -002才會匹配

    7、處理動作

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

        -ls:類似于對查找到的文件執行“ ls -l”命令
?      -delete:刪除查找到的文件;
?      -fls file:查找到的所有文件的長格式信息保存至指定文件中
?      -ok COMMAND {} \; 對查找到的每個文件執行由
        COMMAND指定的命令;對于每個文件執行命令之前,都會交互式要求用戶確認

        -exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
?         {}: 用于引用查找到的文件名稱自身
?         find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
? 有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題
            find | xargs COMMAND

    8、組合條件:
        與: -a
        或: -o
        非: -not, !
?     

        德·摩根定律:
            (非 P) 或 (非 Q) = 非(P 且 Q)
            (非 P) 且 (非 Q) = 非(P 或 Q)
?      示例:
            !A -a !B = !(A -o B)
            !A -o !B = !(A -a B)

    

    9、find命令使用實例

        find -name snow.png        搜索名為snow.png的文件
?      find -iname snow.png       不分大小寫地搜索名為snow.png、 Snow.png、SNOW.PNG等等的文件
?      find / -name “*.txt”     搜索根目錄下以后綴名為.txt的文件
?      find /var –name “*log*” 搜索/var目錄下面包含log字符串的文件
        find -user joe -group joe  搜索被用戶joe 以及組群joe所擁有的文件

        find -user joe -not -group joe               查找屬主是joe其屬組不是joe的文件

        find -user joe -o -user jane                 查找屬主是joe或者是jane的文件
        find -not \( -user joe -o -user jane \)      查找屬主既不是joe且不是jane的文件
        find / -user joe -o -uid 500                 查找屬主是joe或者其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” -print

        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 {} \; 

            查找到權限是644,且后綴名為.sh的普通文件,并將其權限更改為755
?      find /home –type d -ls         查找/home目錄下面是目錄的文件且將其列出來

第三部分、習題

        1、查找/var目錄下屬主為root,且屬組為mail的所有文件

            find /var -user root -group mail -ls

        2、查找/var目錄下不屬于root、 lp、 gdm的所有文件

            find /var -not -user root -not -user  lp -not -user gdm 

            或者find /var -not \(-user root -o -user lp -o -user gdm\) -ls
        3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

            find /var -mtime -7 -not -user root -not -user postfix

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

        4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

            find / \( -nouser -o -nogroup \) -atime -7 -ls
?      5、查找/etc目錄下大于1M且類型為普通文件的所有文件

            find /etc -size +1M -type f
     ? 6、查找/etc目錄下所有用戶都沒有寫權限的普通文件

            find /etc -not -perm /222 -type f -ls
?      7、查找/etc目錄下至少有一類用戶沒有執行權限的普通文件

            find /etc -not -perm /111 -type f -ls
?      8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

            find /etc/init.d -perm /113 -type f -ls

原創文章,作者:AndyIvanXue,如若轉載,請注明出處:http://www.www58058.com/37269

(0)
AndyIvanXueAndyIvanXue
上一篇 2016-08-18
下一篇 2016-08-18

相關推薦

  • openssl總結及私有CA的搭建

    一、前言 什么是openssl?講openssl之前我們先了解一下什么是ssl?ssl是secure socket layer的簡稱,其使用對稱加密,非對稱加密(公鑰加密解密),單向加密解密結合證書實現數據傳輸安全,openssl默認是在系統安裝時就已經安裝上去的。隨著互聯網的迅速發展,網絡通信已經成為傳遞信息的主要途徑。而通信時的數據傳輸大部分都是明文傳輸…

    Linux干貨 2016-01-05
  • 文本處理章練習題

    2017.7.27練習 1、找出ifconfig “網卡名” 命令結果中本機的IPv4地址 ifconfig |head -n 2 |tail -n 1|tr -s ” ” : |cut -d: -f4   2、查出分區空間使用率的最大百分比值 df|tr -s ‘ ‘ %|sort -t% -k5 …

    2017-07-29
  • Linux程序包管理

      Linux的各個release版本開發商,在發布各種應用程序,以及一些團體發布應用程序時,通常會根據發布的程序所適應的開發語言,使用環境,預設參數等,事先編譯完成一個可以在相應平臺上安裝的程序包供使用者直接使用,該程序包含有安裝前(preinstall)操作系統環境檢測的腳本,程序包中所有文件的相關信息,程序預定義的配置參數文件,程序…

    Linux干貨 2016-11-30
  • DNS轉發、ACL以及VIEW

    DNS全稱是Domain Name System的簡稱,即域名系統。因特網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議運行在UDP/TCP協議之上,使用端口號53。 DNS轉發、ACL以及VIEW…

    Linux干貨 2016-12-08
  • 創建私有CA及dropbear的編譯安裝

    使用openssl創建私有CA 配置文件/etc/pki/tls/openssl.cnf certs           = $dir/certs         &nb…

    Linux干貨 2016-09-26
  • 導讀谷歌三大核心技術之一 GoogleFileSystem(一)

    GoogleFileSystem設計構想 為滿足Google數據處理的需求,Google工程師設計并實現了GoogleFileSystem(GFS)。GFS與傳統分布式文件系統類似,也需要滿足高性能、可伸縮性、可靠性以及可用性。與傳統分布式文件系統思路不不同的是: GFS認為組件失效是常態而非意外,GFS由大量廉價設備組成 文件數量異常巨大 絕大部分文件修改…

    Linux干貨 2017-05-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 13:25

    對find的命令總結的很詳細,同時,find是筆試中必定會遇到的考點,希望下來能多加練習,達到熟練掌控。

欧美性久久久久