linux 之 find 查找命令

文件查找:    在文件系統上查找符合條件的文件        實現工具:locate,find            locate:依賴事先構建好的索引庫        系統本身實現(週期性任務)        手動更新數據庫(updatedb)            工做特性:        查找速度快        模糊查找        非實時查找         locate 命令:    
locate [OPTION]... PATTERN...
        -b: 只匹配路徑中的基名
        -c: 統計出共有多少個符合條件的文件
        -r: BRE
        
    find 命令:
        文件的實時查找文件的工具,經過遍歷指定路徑
        下文件系統層級結構完成文件的查找
        
    工做特性:
        查找速度很慢
        精確查找
        實時查找
    
    用法:
    find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
    find [OPTIONS] [查找起始路徑][查找條件][處理動做]
    
        查找起始路徑:指定具體搜索目標的起始路徑,默認爲當前目錄
        查找條件:指定的查找標準,能夠根據文件名,大小,類型,從屬關係,權限等等標準進行,默認爲找出路徑下的全部符合條件的文件
        處理動做:對符合查找條件的文件做出的操做,例如刪除等操做,默認爲輸出值標準輸出
    查找條件:
        表達式:選項和測試
        
        測試:結果一般爲Boolean型
            根據文件名查找:
                -name "pattern"
                -iname "pattern"  //不區分大小寫
                    支持glob風格的通配符
                -regex pattern:基於正則表達式模式查找文件,匹配整個路徑,而非文件名
            
            根據文件的從屬關係查找:
                -user username:查找屬主爲指定用戶的全部文件
                -group groupname:查找屬組爲指定組的全部文件
                -uid uid:查找屬主爲指定UID全部文件
                -gid gid :查找屬組爲指定GID的全部文件
                -nouser:查找沒有屬主的文件
                -nogroup:查找沒有屬組的文件
            
            根據文件類型查找:
                -type TYPE:
                    f:普通文件
                    d:目錄文件
                    l:符合連接文件
                    b:塊設備文件
                    c:字符設備文件
                    p:管道文件
                    s:套接字文件
        
            組合測試:
                與:-a
                或:-o
                非:-not,!
                
            根據文件大小查找
                -size[+|-]#UNIT
                    經常使用單位:k,m,g 
                    #UNIT:(#-1,#]
                    -#UNIT:[0,#-1)
                    +#UNIT:(#,OO)
            
            根據時間戳查找:
                以天爲單位:
                    -atime [+|-]#
                        #:[#,#-1)
                        -#:(#,0]
                        +#:(00,#-1]
                    -mtime
                    -ctime
                以分鐘爲單位:
                    -amin
                    -mmin
                    -cmin
            
            根據權限查找:
                -perm [/|-]mode
                    mode :精確權限匹配
                    /mode:任何一類用戶(u,g,)的權限中的任何一位(r,w,x)符合條件既知足
                        9位權限之間存在或的關係
                    -mode:每一類用戶(u,g,o)的權限中的任何一位(r,w,x)同時符合條件既知足
                        9位權限之間存在與的關係
            
            處理動做:
                -print:    輸出至標準輸出,默認的動做;
                -ls:相似於對查找到的文件執行「ls -l」命令,輸出文件的詳細信息
                -delete:刪除查找到的文件
                -fls /PATH/SOMEFILE:把查找的文件信息保存到文件中
                -ok COMMAND{}\;  :對查找到的文件執行COMMAND 的命令,每次操做都有用戶確認
                -exec COMMAND{}\; :對查找到的文件執行COMMAND的命令,直接修改完成
                
            注意:find傳遞查到的文件路徑至後面的命令時,是先查找出全部符合條件的文件路徑,並一次性傳遞給後面的命令
                可是有些命令不能接受過長的參數,此命令會執行失敗,另外一種方式可規避此問題:
                    find | xargs COMMAND 
            
    練習:
        1.查找/var目錄下屬主爲root,且屬組爲mail的全部文件或目錄
            find /var -user root -group mail -ls
        2.查找/usr目錄下不屬於root,bin或hadoop的全部文件或目錄;用兩種方法
            find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
            find /usr -not  -user  root -a -not -user bin -a -not -user hadoop -ls
        3.查找/etc目錄下最近一週內其內容修改過,且屬主不是root也不是hadoop用戶的文件或目錄
            find /etc -not -user root -a -not -user hadoop -a -mtime -7 -ls
        4.查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的文件或目錄
            find / -nouser -o -nogroup -ls -atime -7
        5.查找/etc目錄下大於1M且類型爲普通文件的全部文件
            find /etc -size +1M -type f `-exec ls{}\;`
        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
相關文章
相關標籤/搜索