Linux學習之:find命令詳解

find命令:
       在Linux文件管理中,find的命令是個很強大的實時查找工具,通過遍歷指定路徑下文件系統層級結構完成文件查找。      
       特性:查找速度慢(因爲從根目錄開始查找)、精確查找、實時查找。            

用法:
       find [OPTION] [查找起始路徑] [查找條件] [處理動作]
       查找起始路徑:指定具體搜索目標起始路徑,默認爲當前目錄;
       查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關係、權限等等標準進行;默認爲找出指定路徑下的所有文件;

    1. 查找條件:
            表達式:選項和測試
            測試:結果通常爲布爾型("true", "false")    

            根據文件名查找:
                  -name "pattern"
                    例如:find /etc -name "passwd"   #精確匹配文件名,以passwd命名的文件   
                  -iname "pattern" :不區分文件名中的大小寫,支持glob風格的通配符  *,?,[],

                    例如:  
                           find  /etc  -iname  "passwd"    #不區分大小寫查找passwd命名的文件或目錄
                           find  /etc  -iname  "*passwd"   #查找文件名以passwd結尾的文件或目錄
                           find  /etc  -iname  "passwd*"   #查找文件名以passwd開頭的文件或目錄 
                  -regex pattern;基於正則表達式查找
           根據文件從屬關係查找:
                  -user USERNAME:查找屬主爲指定用戶的所有文件;
                  例如: find  /tmp  -user  shakura    #查找tmp目錄下shakura用戶的文件或目錄
                  -group USERNAME:查找屬組爲指定組的所有文件;

                   例如:find  /tmp  -group root    #查找tmp目錄下屬組爲root的文件文件或目錄

                  -uid UID:查找屬主指定的UID的所有文件;

                    例如:find  /tmp  -uid 1003   #查找tmp目錄下用戶id爲1003的文件或目錄

                  -gid GID: 查找屬組爲指定的GID的所有文件;       
                  -nouser: 查找沒有屬主的文件;

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

                   注意:如果你將系統中的某個賬號刪除了,但是該賬號又在系統內創建了很多文件就                            可以使用-nouser命令將這些文件找出來了;

                  例如:find ./  -nouser(#-nogroup)  #在根目錄下查找沒有屬主、屬組的文件或目錄
           根據文件類型查找:
                  -type TYPE   

                  文件的主要類型有:普通文件(f)、目錄文件(d)、符號連接文件(l)、

                    設備文件(b:塊 設備文件、c:字符設備文件)、套接字文件(s)、管道文件(p) 

                   例如:find  /var  -type  s    #查找/var目錄下文件類型爲Socket的文件

           組合測試:
                   與:-a
                   或:-o
                   非:-not

           根據文件大小查找:
                   -size[+|-]#UNIT
                           常用單位:k,M,G
                            #UNIT:(#-1, #]  #以50k爲例,比50k小1K或等於50k的文件

                            -#UNIT:[0,#-1]  #以50k爲例,比50k小的文件(不包含)

                            +#UNIT:(#,+OO)  #以50k爲例,比50k大的文件(不包含)

           根據時間戳查找:
                  以“天”爲單位:-mtime、-ctime、-atime                     

                         -atime [+|-]#:n
                               #:[#,#-1)  #天之前”一天之內“被訪問過的文件

                               +#:(oo, #-1]  #天之前(不含#天)被訪問過的文件

                               -#:(#, 0]  #天之內(含#天)被訪問過的文件
                以“分鐘”爲單位:-amin、mmin、cmin;(同上,這裏不再贅述)
           根據權限來查找:
                  -perm [+|-]mode
                        mode:精確權限匹配;

                        例如:查找權限爲755的文件或目錄,只能匹配到的權限爲rwxr-xr-x的文件。

                        +mode:任何一類用戶(u,g,o)的任何一位權限(r,w,x)符合條件即滿足;
                         9位權限之間存在“或”關係;

                        例如:查找權限爲755的文件,即rwxr-xr-x,權限爲rw-------的文件也滿足條件。

                        -mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足;
                            9位權限之間存在“與”關係;

                        例如:查找權限爲744的文件,即rwxr--r--,權限爲rw-r-xr-x的文件也滿足條件。



    

  2.處理動作

            對符合查找條件的文件做出的操作,例如刪除等操作,默認爲輸出至標準輸出。
                -print:輸出至標準輸出;默認的動作;
                -s:類似於對查找到的文件執行"ls -l"命令,輸出文件的詳細信息;
                -delete: 刪除查找到的文件;

                      find  -name  1.txt  -delete  #查找文件名爲1.txt的文件並刪除

                -fls /PATH/TO/SOMEFILE: 把查找到的所有文件的長格式信息保存至文件中;

                例如:
                    [root@localhost ~]# find /var/log -fls /1.txt | cat /1.txt
                    786433    4 drwxr-xr-x  12 root     root    4096 Dec 19 19:01 /var/log
                    786437    4 drwx------   2 root     root     4096 Mar 16  2015 /var/log/ppp
                    786451    4 drwx------   2 root     root     4096 Jul 24 19:53 /var/log/httpd
                    786448    4 -rw-------   1 root     root      591 Dec 19 19:01 /var/log/maillog
                    786473    8 -rw-r--r--   2 root     root       6772 Dec 19 19:01 /var/log/boot.log

                    # 查找/var/log目錄下的文件,將文件信息的長格式信息保存至1.txt文件中,用cat命令查

                    看1.txt文件的內容,輸出信息如上圖所示;

                -ok COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都                                                        與用戶進行確認;
                    例如:find ./ -nouser -a -nogroup -ok chmod  root:root {}\;

                        #查找在根目錄下無屬主、屬組的文件並將屬主、屬組該爲root

                -exec COMMAND{}\; :對查找到的每個文件執行由COMMAND表示的命令,直接修改完成   

                    find ./ -perm /002 -exe            c mv {} {}.dangereous \;
                          #查找其他用戶有寫權限的文件並在文件名後添加後綴dangerous
      注意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有符合條件的文件路徑,並一次性傳遞給後面的命令。但是有些命令不能接受過長的參數,此時命令執行會失敗,另一種方式可規避此問題;

       

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