Linux命令:find命令


find:實時查找工具,通過遍歷指定路徑完成文件查找

工作特點:

  查找速度略慢

  精確查找

  實時查找

  可能只搜索用戶具備讀取和執行權限的目錄

格式:

  find [options] [查找路徑] [查找條件] [處理動作] 

    查找路徑:默認為當前路徑

    查找條件:默認為查找指定路徑下的所有文件,包括隱藏文件

    處理動作:默認為顯示,可以接-ls,相當於ll顯示文件

    注意:先寫查找路徑,后寫查找條件,順序不能變

 

查找條件:

  1、指搜索層級

    -maxdepthlevel 最大搜索目錄深度,指定目錄為第1級

    -mindepthlevel 最小搜索目錄深度

  2、先處理目錄內的文件,再處理目錄

    -depth

  3、根據文件名和inode查找:

    -name "文件名稱":支持使用glob(*, ?, [], [^]),文件名稱必須加引號

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

    -inumn :按inode號查找

    -samefilename:相同inode號的文件

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

    -regex“PATTERN”:以PATTERN匹配整個文件路徑,而非文件名稱

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

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

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

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

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

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

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

  5、根據文件類型查找:

    -type TYPE:

      f: 普通文件

      d: 目錄文件

      l: 符號鏈接文件

      s:套接字文件

      b: 塊設備文件

      c: 字符設備文件

      p: 管道文件

  6、空文件或目錄

    -empty

    例如:find /app -type d -empty

 

  7、根據文件大小來查找:

    -size [+|-]#UNIT     UNIT常用單位:k, M, G,c(byte)

      #: (#-1, #]

        例如:6k 表示(5k,6k]

      -#:[0,#-1]

        例如:-6k 表示[0,5k]

      +#:(#,∞)

        例如:+6k 表示(6k,∞)

 

    舉例:     

      2M:1M~2M

      +2M:>2M

      -2M:0~1M

 

      1M:0~1M

      +1M:>1M

      -1M:0~0M

       

      3M:2~3M

      +3M:>3M

      -3M:0~2M

    表示5M到10M之間大小的文件:-size +5M -size -11M

 

  8、根據時間戳查找:

    以天為單位(time)

      -atime [+|-]#

        +2:表示3天前被訪問過

        -2:表示最近2天訪問過

        2:表示2天前到3天前之間

      -mtime

      -ctime

    以分鍾為單位(min):

      -amin

      -mmin

      -cmin

  9、根據權限查找:

    -perm [/|-]MODE:

        MODE:精確匹配,rwx所有都相同

/MODE:任何一類用戶的任何一位權限匹配(rwx有一位滿足即可):常用於查找某類用戶的某特定權限是否存在(+模式從CentOS7開始淘汰,不支持了,CentOS6兩種方法都支持)

例如:-perm /111 表示屬主、屬組、其他用戶,任意位有執行權限都匹配          

-MODE:每類用戶的指定要檢查的權限位都匹配, 屬主、屬組、其他用戶每一位都要匹配

例如:-444可以匹配到 444,644,555,等,只要包含444即可

  10、組合條件:

    與:-a

    或:-o

    非:-not, !

    !A -a !B = !(A -o B)

    !A -o !B = !(A -a B)

 

處理動作:

  -print:打印在標准輸出上,默認操作

  -ls:以長格式輸出個文件信息,相當於對查找的文件采用ls -l命令

  -delete:刪除查找到的文件(慎用)

  -fls /path/to/somefile:查找到的所有文件的長格式信息保存至指定文件中,相當於-ls >file中

  -exec COMMAND { } \; :對查找到的文件執行指定的命令,{ }代表搜索到的文件名,\;表示轉意";"

  -ok COMMAND { } \; :交互式的-exec

 

  舉例:給查找到的文件改名

    # find / -name "*.doc" -exec mv {} {}s \; 

    # find / -name "*.jpgs" -exec rename .jpgs .jpg {} \;

 

練習

1、查找/var/目錄屬主為root且屬組為mail的所有文件
# find /var -user root -group mail

2、查找/usr目錄下不屬於root、bin或hadoop的所有文件
# find /usr/ -not -user root -a -not -user bin -a -not -user hadoop
# find /usr/ -not \( -user root -o -user bin -o -user hadoop \)

3、查找/etc/目錄下最近一周內其內容修改過的,且不屬於root或不屬於hadoop的文件
# find /etc/ -mtime -7 -a -not -user root -a -not -user hadoop
# find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)

4、查找當前根目錄上沒有屬主或屬組,且最近1個月內曾被訪問過的文件
# find / \(-nouser -o -nogroup \) -a -atime -30

5、查找/etc/目錄下大於1M且類型為普通文件的所有文件
# find /etc/ -size +1M -a -type f

6、查找/etc/目錄下所有用戶都沒有寫權限的文件
# find /etc/ -not -perm +222
所有都沒有:相反:只要有一個有
所有都有:相反:只要有一個沒有

7、查找/etc/目錄下不是所有用戶都有寫權限的文件
# find /etc/ -not -perm -222

8、查找/etc/init.d/目錄下,所有用戶都有執行權限且其他用戶有寫權限的文件
# find /etc/init.d/ -perm -113

9、查找所有帶有特殊權限位的文件
# find / -perm /7000 -ls

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM