天天看點

檔案查找

  locate     非實時查找(資料庫查找)支援正則

 ∮查詢系統上預建的檔案索引資料庫

/var/lib/mlocate/mlocate.db

 ∮依賴于事先建構的索引

索引的建構是在系統較為空閑時自動進行( 周期性 任務),管理者手動更新資料(updatedb)

索引建構過程需要周遊整個根檔案系統,極消耗資源

 ∮工作特點:

    查找速度快

    模糊查找

    非實時查找

    搜尋的是檔案的全路徑,不僅僅是檔案名

    可能隻搜尋使用者具備讀取和執行權限的目錄

  locate

     -i 不區分大小寫的搜尋

     -n N 隻列舉前N 個比對項目

           例: locate conf

      搜尋名稱或路徑中帶有“conf ”的檔案

          例:locate -r ‘\.conf$’

      使用Regex 來搜尋以“.conf ”結尾的檔案 

 find 

      ∮搜尋層級

   -maxdepth level 最大搜尋深度

   -minxdepth level 最小搜尋深度

  ∮根據檔案名和inode查找

   -name 基于名稱的精确查找

   -iname 基于名稱忽略大小寫的精确查找查找

   -inum 基于inode查找

   -samefile 基于相同inode号的查找(查找硬連結)

   -links n 硬連結為n的檔案

   -regex 支援正則預設為(emacs标準)

   -regextype egrep -regex 支援egrep同标準的正則 

 ∮根據屬組屬主查找

   -user 使用者名基于檔案owner的查找

   -group 組名基于檔案group的查找

   -uid userid基于檔案uid的查找

   -gid groupid基于檔案gid的查找

   -nouser 查找沒有owner的檔案

   -nogroup 查找沒有group的檔案

 ∮-type 基于檔案類型的查找

    f: 普通檔案  如:find  -type f

    d: 目錄檔案

    l: 符号連結檔案

    s:套接字檔案

    b: 塊裝置檔案

    c: 字元裝置檔案

    p: 管道檔案

    ∮根據時間戳:atime:通路時間  mtime:修改時間   ctime:原檔案時間

    以“天”為機關;

     -atime [+|-]#,  

             #: [#,#+1)     如 find -atime 1:通路時間大于等于1天小于2天的檔案

     +#: [#+1,∞] 如 find -atime +7 :通路時間大于等于7天以上的檔案

     -#: [0,#)   如 find -atime -7 :通路時間7天以内的檔案

             -mtime

      -ctime

       以“分鐘”為機關:

       -amin

       -mmin

       -cmin

 ∮ 根據檔案大小來查找:

    -size [+|-]#UNIT

   常用機關:k, M, G ,c (byte) )

      #UNIT: (#-1, #]

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

    -#UNIT :[0,#-1]

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

   +#UNIT :(#, ∞ )

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

  ∮ -perm

     mode:精确權限比對

     +mode[/mode] 任何一類(u,g,o)對象的權限中隻要能一位比對即可,或關系,+ 從         centos7開始淘汰;/較為普遍

      -mode   每一類對象都必須同時擁有指定權限,與關系 0表示不關注

      -print 預設

      -delete 直接删除所查找到的檔案,不詢問。

      -ls 長列出所查找到的檔案

      -fls file 将查找到的檔案長列出導入到指定檔案。

      > file

      -ok command \; 對查找到的檔案當做下一指令的參數去執行(互動式)

 例如  find -perm /444 -ok chmod  o-x {} \;    {}代表find查找到的檔案,一旦用了 -ok就要用 \; 結尾

      -exec command \; 對查找到的檔案當做下一指令的參數去執行(非互動式)執行指令時不會提示。

  {}: 用于引用查找到的檔案名稱自身

  find 傳遞查找到的檔案至後面指定的指令時,查找到所有符合條件的文 件一次性傳遞給後面的指令

  由于很多指令不支援管道|來傳遞參數,而日常工作中有這個必要,是以 就有了xargs指令

 xargs 用于産生某個指令的參數,xargs可以讀入stdin的數

據,并且以空格符或回車符将将stdin的資料分隔成為arguments

注意:1.檔案名或者是其他意義的名詞内含有空格符的情況。

    2.有些指令不能接受過多參數,指令執行可能會失敗,xargs可以解決

 組合條件:

   與:-a

   或:-o

   非:-not, !

∮ 德 德· 摩根 定律:

   (非 非 A) 或 或 (非 非 B) = 非(A 且 且 B)

   (非 非 A) 且 且 (非 非 B) = 非(A 或 或 B)

∮ 示例:

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

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

練習:

1、查找/var目錄下屬主為root,且屬組為mail的所有檔案

find /var -user root -a -group mail -ls

此題用到的知識點: -user 使用者名基于檔案owner的查找  且:與關系

2、查找/var目錄下不屬于root、lp、gdm的所有檔案

find /var -not \( -user root -o -user lp -o -user gdm \) -ls

知識點:非關系:-not 或!此題中各條件是或關系,是以一定要加括号,并且要對括号進行轉義

3、查找/var目錄下最近一周内其内容修改過,同時屬主不為root,也不是postfix的檔案

find /var/ -mtime -7 -not -user root -not -user postfix -ls

知識點:修改時間:-mtime  一周内 小于七天 :-7

4、查找目前系統上沒有屬主或屬組,且最近一個周内曾被通路過的檔案

find / -nouser -o -nogroup -a -atime -7 -ls

知識點 :無屬主:-nouser 無屬組:-nogroup  通路時間:atime

5、查找/etc目錄下大于1M且類型為普通檔案的所有檔案

find /etc/ -size +1M -a -type f -ls

知識點:檔案大小:-size  檔案類型:-type

6、查找/etc目錄下所有使用者都沒有寫權限的檔案

find /etc ! -perm /222 -ls

   知識點:/222:使用者都有寫權限. /本來是或的關系,但由于都指定了寫的權限,是以和-222沒有差別。

7、查找/etc目錄下至少有一類使用者沒有執行權限的檔案

find /etc ! -perm -111  -ls

題的意思:不是每一類使用者都有執行權限,-111:每一類都有執行權限,前面又用了非。

8、查找/etc/init.d目錄下,所有使用者都有執行權限,且其它

使用者有寫權限的檔案

find /etc/init.d/ -perm -113 -ls

    都:與關系  所有的使用者都有執行權限:-perm -111,其他使用者有寫權限就變成了-113

本文轉自    honeyorange   51CTO部落格,原文連結:http://blog.51cto.com/13172732/1955809