1. 程式人生 > >linux文件查找之find

linux文件查找之find

linux find

find - search for files in a directory hierarchy
在層級目錄中查找文件工具

語法

find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]

常用選項

  • -name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫。支持glob風格的通配符;
  • -user USERNAME:查找屬主指定用戶的所有文件;
  • -group GRPNAME:查找屬組指定組的所有文件;
  • -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)
  • 根據時間戳查找:

    • 以“天”為單位:這裏的天是以24小時位單位
      • -atime [+|-]# 訪問時間
      • -mtime 修改時間
      • -ctime 創建時間
    • 以“分鐘”為單位:
      • -amin
      • -mmin
      • -cmin
  • 根據權限查找:-perm [/|-]mode;0表示不參與

    • mode:精確權限匹配;
    • /mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足;9位權限之間存在“或”關系;
    • -mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足;9位權限之間存在“與”關系;
  • 處理動作:
    • -print:輸出至標準輸出;默認的動作;
    • -ls:類似於對查找到的文件執行“ls -l”命令,輸出文件的詳細信息;
    • -delete:刪除查找到的文件;
    • -fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;
    • -ok COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;
    • -exec COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;

DEMO:

找出/tmp目錄下屬主為非root的所有文件

[root@localhost ~]# find /tmp/   -not -uid 0 -ls
[root@localhost ~]# find /tmp/   -not -user root -ls

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

[root@localhost test]# find /var/ -user root -group mail
find /var/ -uid 0 -group mail

文件大小查找

[root@localhost test]# ll -h
總用量 52K
-rw-------. 1 root root 24K 4月  22 13:31 messages
-rw-------. 1 root root 25K 4月  22 13:31 messages.bak
[root@localhost tmp]# find ./  -size -25k -ls     
[root@localhost tmp]# find ./  -size 25k -ls      (24k,25k]    24k< x <=25k
./messages.bak
[root@localhost test]# find ./ -size -25k -type f    [0,24k]    0<= x <=24k
./messages
[root@localhost test]# find ./ -size +24k -type f   [25k,  ]    25<= x
./messages.bak

按照文件時間來查找
技術分享圖片

[root@localhost test]# date
2018年 04月 22日 星期日 13:49:30 EDT

[root@localhost test]# find /etc/ -type f -atime 3 -ls
[root@localhost ~]# stat /etc/kdump.conf
  File: ‘/etc/kdump.conf’
  Size: 7265        Blocks: 16         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 17265603    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:kdump_etc_t:s0
Access: 2018-04-18 23:03:40.914728405 -0400
Modify: 2018-04-16 13:12:52.585009262 -0400
Change: 2018-04-16 13:12:52.585009262 -0400
 Birth: -

查找/usr目錄下不屬於root, bin或zander的所有文件或目錄;

[root@localhost test]# find /usr -not \( -user root -o -user bin -o -user zander  \)
[root@localhost test]# find /usr -not -user root  -a -not -user bin -a -not  -user zander

查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是zander用戶的文件或目錄;

[root@localhost test]# find /etc/ -mtime -7 -a  -not -user root -a -not -user zander
[root@localhost test]# find /etc/ -mtime -7 -a  -not \( -user root -o  -user zander \)

查找當前系統上沒有屬或屬組,且最近一周內曾被訪問過的文件或目錄;

[root@localhost test]# find / \( -nouser -o -nogroup \) -a -atime -7

查找/etc目錄下大於1M且類型為普通文件的所有文件;

[root@localhost test]# find /etc/ -size +1M -type f -exec ls -lh {} \;

查找/etc目錄下所有用戶都沒有寫權限的文件;

先找任何一個有寫權限 && 取反
[root@localhost test]# find /etc/ -not -perm /222 -type f -exec ls -lh {} \;

查找/etc目錄至少有一類用戶沒有執行權限的文件;

所有用戶都有權限  && 取反
[root@localhost test]# find /etc/ -not  -perm  -111 -type  f  -exec ls -lh {} \;

查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有文件;

[root@localhost test]# find /etc/init.d/ -perm -111 -a -perm -112 -type f  -ls
[root@localhost test]# find /etc/init.d/ -perm -113 -type f  -ls

找出/tmp目錄下文件名中不包含fstab字符串的文件

[root@localhost ~]# find /tmp/  -type f -not -name   ‘*fstab*‘

找出/tmp目錄下屬主為非root,而且文件名不包含fstab字符串的文件

[root@localhost ~]# find /tmp/  -not -name   ‘*fstab*‘ -not -user root

linux文件查找之find