1. 程式人生 > >Linux之find文件(目錄)查找

Linux之find文件(目錄)查找

-a some 默認 目錄文件 -- and ted perm word

  1 文件查找:
  2     在文件系統上查找符合條件的文件;
  3 
  4     文件查找:locate, find
  5         非實時查找(數據庫查找):locate
  6         實時查找:find
  7 
  8     locate:
  9         依賴於事先構建的索引;索引的構建是在系統較為空閑時自動進行(周期性任務);手動更新數據庫(updatedb);
 10 
 11         索引構建過程需要遍歷整個根文件系統,極消耗資源;
 12 
 13         工作特點:
 14             查找速度快;
 15
模糊查找; 16 非實時查找; 17 18 locate KEYWORD 19 20 find: 21 實時查找工具,通過遍歷指定路徑下的文件系統完成文件查找; 22 23 工作特點: 24 查找速度略慢; 25 精確查找; 26 實時查找; 27 28 語法: 29 find [OPTION]... [查找路徑] [查找條件] [處理動作] 30
查找路徑:指定具體目標路徑;默認為當前目錄; 31 查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件; 32 處理動作:對符合條件的文件做什麽操作;默認輸出至屏幕; 33 34 查找條件: 35 根據文件名查找: 36 -name "文件名稱":支持使用glob 37 *, ?, [], [^]
38 -iname "文件名稱":不區分字母大小寫 39 40 -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱; 41 42 根據屬主、屬組查找: 43 -user USERNAME:查找屬主為指定用戶的文件; 44 group GRPNAME: 查找屬組為指定組的文件; 45 46 -uid UserID:查找屬主為指定的UID號的文件; 47 -gid GroupID:查找屬組為指定的GID號的文件; 48 49 -nouser:查找沒有屬主的文件; 50 -nogroup:查找沒有屬組的文件; 51 52 根據文件類型查找: 53 -type TYPE: 54 f: 普通文件 55 d: 目錄文件 56 l: 符號鏈接文件 57 s:套接字文件 58 b: 塊設備文件 59 c: 字符設備文件 60 p: 管道文件 61 62 組合條件: 63 與:-a 64 或:-o 65 非:-not, ! 66 67 !A -a !B = !(A -o B) 68 !A -o !B = !(A -a B) 69 70 找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件; 71 find /tmp \( -not -user root -a -not -name fstab \) -ls 72 find /tmp -not \( -user root -o -name fstab \) -ls 73 74 根據文件大小來查找: 75 -size [+|-]#UNIT 76 常用單位:k, M, G 77 78 #UNIT: (#-1, #] 3k ---- (2,3] 79 -#UNIT:[0,#-1] 3k ---- [0,2] 80 +#UNIT:(#,oo) 3k ==== (3,+oo) 81 82 根據時間戳: 83 以“天”為單位; 84 -atime [+|-]#, 85 #: [#,#+1) 3 [3,4) 86 +#: [#+1,oo] [4,oo) 87 -#: [0,#) [0.3) 88 -mtime 89 -ctime 90 91 以“分鐘”為單位: 92 -amin 93 -mmin 94 -cmin 95 96 根據權限查找: 97 -perm [+|-]MODE 98 MODE: 精確權限匹配 99 +MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可; 100 -MODE:每一類對象都必須同時擁有為其指定的權限標準; 101 102 處理動作: 103 -print:默認的處理動作,顯示至屏幕; 104 -ls:類似於對查找到的文件執行“ls -l”命令; 105 -delete:刪除查找到的文件; 106 -fls /path/to/somefile:查找到的所有文件的長格式信息保存至指定文件中; 107 -ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令; 108 對於每個文件執行命令之前,都會交互式要求用戶確認; 109 -exec COMMAND {}\; 對查找到的每個文件執行由COMMAND指定的命令; 110 {}: 用於引用查找到的文件名稱自身; 111 112 註意:find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性傳遞給後面的命令; 113 有些命令不能接受過多參數,此時命令執行可能會失敗;另一種方式可規避此問題: 114 find | xargs COMMAND 115 116 練習: 117 1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄; 118 # find /var -user root -group mail 119 120 2、查找/usr目錄下不屬於root、bin或hadoop的所有文件或目錄; 121 # find /usr -not -user root -a -not -user bin -a -not -user hadoop 122 # find /usr -not \( -user root -o -user bin -o -user hadoop \) 123 124 3、查找/etc目錄下最周一周內其內容修改過,同時屬主不為root,也不是hadoop的文件或目錄; 125 # find /etc -mtime -7 -a -not -user root -a -not -user hadoop 126 # find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \) 127 128 4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件或目錄; 129 # find / -nouser -a -nogroup -a -atime -7 130 131 5、查找/etc目錄下大於1M且類型為普通文件的所有文件; 132 # find /etc -size +1M -type f 133 134 135 6、查找/etc目錄下所有用戶都沒有寫權限的文件; 136 # find /etc -not -perm /222 137 138 7、查找/etc目錄下至少有一類用戶沒有執行權限的文件; 139 # find /etc -not -perm -111 140 141 8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件; 142 # find /etc/init.d -perm -113

文件查找:在文件系統上查找符合條件的文件;
文件查找:locate, find非實時查找(數據庫查找):locate實時查找:find
locate:依賴於事先構建的索引;索引的構建是在系統較為空閑時自動進行(周期性任務);手動更新數據庫(updatedb);
索引構建過程需要遍歷整個根文件系統,極消耗資源;
工作特點:查找速度快;模糊查找;非實時查找;
locate KEYWORD
find:實時查找工具,通過遍歷指定路徑下的文件系統完成文件查找;
工作特點:查找速度略慢;精確查找;實時查找;
語法:find [OPTION]... [查找路徑] [查找條件] [處理動作]查找路徑:指定具體目標路徑;默認為當前目錄;查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件;處理動作:對符合條件的文件做什麽操作;默認輸出至屏幕;
查找條件:根據文件名查找:-name "文件名稱":支持使用glob*, ?, [], [^]-iname "文件名稱":不區分字母大小寫
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱;
根據屬主、屬組查找:-user USERNAME:查找屬主為指定用戶的文件;group GRPNAME: 查找屬組為指定組的文件;
-uid UserID:查找屬主為指定的UID號的文件;-gid GroupID:查找屬組為指定的GID號的文件;
-nouser:查找沒有屬主的文件;-nogroup:查找沒有屬組的文件;
根據文件類型查找:-type TYPE:f: 普通文件d: 目錄文件l: 符號鏈接文件s:套接字文件b: 塊設備文件c: 字符設備文件p: 管道文件
組合條件:與:-a或:-o非:-not, !
!A -a !B = !(A -o B)!A -o !B = !(A -a B)
找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件;find /tmp \( -not -user root -a -not -name ‘fstab‘ \) -lsfind /tmp -not \( -user root -o -name ‘fstab‘ \) -ls
根據文件大小來查找:-size [+|-]#UNIT常用單位:k, M, G
#UNIT: (#-1, #] 3k ---- (2,3]-#UNIT:[0,#-1] 3k ---- [0,2]+#UNIT:(#,oo) 3k ==== (3,+oo)
根據時間戳:以“天”為單位;-atime [+|-]#, #: [#,#+1) 3 [3,4)+#: [#+1,oo][4,oo)-#: [0,#)[0.3)-mtime-ctime
以“分鐘”為單位:-amin-mmin-cmin
根據權限查找:-perm [+|-]MODEMODE: 精確權限匹配+MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可;-MODE:每一類對象都必須同時擁有為其指定的權限標準;
處理動作:-print:默認的處理動作,顯示至屏幕;-ls:類似於對查找到的文件執行“ls -l”命令;-delete:刪除查找到的文件;-fls /path/to/somefile:查找到的所有文件的長格式信息保存至指定文件中;-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;對於每個文件執行命令之前,都會交互式要求用戶確認;-exec COMMAND {}\; 對查找到的每個文件執行由COMMAND指定的命令; {}: 用於引用查找到的文件名稱自身;
註意:find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性傳遞給後面的命令;有些命令不能接受過多參數,此時命令執行可能會失敗;另一種方式可規避此問題:find | xargs COMMAND
練習: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、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件或目錄;# find / -nouser -a -nogroup -a -atime -7
5、查找/etc目錄下大於1M且類型為普通文件的所有文件;# find /etc -size +1M -type f

6、查找/etc目錄下所有用戶都沒有寫權限的文件;# find /etc -not -perm /222
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件;# find /etc -not -perm -111
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件;# find /etc/init.d -perm -113

Linux之find文件(目錄)查找