文件查找

文件查找

簡介:在文件系統上查找符合條件的文件,就是文件查找。

  • 文件查找命令:locate, find

           非實時查找(數據庫查找):locate

           實時查找:find

  • 查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db

  • 依賴于事先構建的索引索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb)

  • 索引構建過程需要遍歷整個根文件系統,極消耗資源

  • 工作特點:

            ? 查找速度快

            ? 模糊查找

            ? 非實時查找

            ? 搜索的是文件的全路徑,不僅僅是文件名

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

locate命令

locate KEYWORD

  • 有用的選項

    ? -i 執行區分大小寫的搜索

    ? -n  N 只列舉前N個匹配項目

  • locate  sh

           ? 搜索名稱或路徑中帶有“sh”的文件  

如:

blob.png

  • locate  -r  ‘\.sh$’

            ? 使用Regex來搜索以“.sh”結尾的文件

如:

blob.png

find

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

  • 工作特點:

        ? 查找速度略慢

        ? 精確查找

        ? 實時

  • find [OPTION]… [查找路徑] [查找條件] [處理動作]

    查找路徑:指定具體目標路徑;默認為當前目錄

    查找條件:指定的查找標準,可以文件名、大小、類型、 權限等標準進行;默認為找出指定路徑下的所有文件

    處理動作:對符合條件的文件做操作,默認輸出至屏幕

    查找條件

  • 根據文件名和inode查找:

        -name "文件名稱":支持使用文件通配符 *, ?, [], [^]

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

        -inum n  按inode號查找

        -samefile name  相同inode號的文件

        -links n   鏈接數為n的文件

        -regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不僅僅是文件名稱

  • 根據屬主、屬組查找:

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

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

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

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

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

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

  • 根據文件類型查找:

                      -type TYPE:

                    ? f: 普通文件

                    ? d: 目錄文件

                    ? l: 符號鏈接文件

                    ? s:套接字文件

                    ? b: 塊設備文件

                    ? c: 字符設備文件

                    ? p: 管道文件

組合條件:

    與:-a

    或:-o

    非:-not, !

德·摩根定律: 德·摩根首先發現了在命題邏輯中存在著下面這些關系:

        非(P 且 Q) = (非 P) 或 (非 Q)

        非(P 或 Q) = (非 P) 且 (非 Q)

德·摩根定律在數學邏輯的定理推演中,在計算機的邏輯設計中以及數學的集合運算中都起著重要的作用。

在文件查找中的應用如:

尋找文件系統中屬主不是root名字不以

find / \( -not -user root -a -not -name 'h*' \) -ls

blob.png

我們把根據德摩爾定律把not提取出來

find /  -not \( -user root -o -name 'h*' \) -ls

blob.png

如圖所示,這兩條命令的結果相同,所以這兩條命令是等價的。

  • 根據文件大小來查找:

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

        #UNIT: (#-1, #] 如:6k 表示(5k,6k]

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

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

  • 根據時間戳:

   以“天”為單位;

        -atime [+|-]#,  

        #: [#,#+1)

        +#: [#+1,∞]

        -#: [0,#)

        -mtime [+|-]#,

        -ctime [+|-]#,

   以“分鐘”為單位:

        -amin [+|-]#,

        -mmin [+|-]#,

        -cmin [+|-]#,

  • 根據權限查找:

        -perm [/|-]MODE

        MODE: 精確權限匹配

如:blob.png

                      /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系。

如:blob.png

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

        ? find -perm 755 會匹配權限模式恰好是755的文件

        ? 只要當任意人有寫權限時,find -perm +222就會匹配

        ? 只有當每個人都有寫權限時,find -perm -222才會匹配

        ? 只有當其它人(other)有寫權限時,find -perm -002才會匹配

如:blob.png

  • 處理動作:

        1. -print:默認的處理動作,顯示至屏幕;

        2. -ls:類似于對查找到的文件執行“ls -l”命令

        3. -delete:刪除查找到的文件;

        4. -fls file:查找到的所有文件的長格式信息保存至指定文件中

        5. -ok COMMAND {} \;對查找到的每個文件執行由 COMMAND指定的命令;對于每個文件執行命令之前,都會交互式要求用戶確認

        6. -exec COMMAND {} \;對查找到的每個文件執行由 COMMAND指定的命令

        7. {}: 用于引用查找到的文件名稱自身

        8. find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令

        9. 有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題find|xargs COMMAND

一、實例:

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

find /var -user root -group mail

blob.png

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

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

blob.png

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

find /var -mtime -7 -a -not \( -user root -o -user postfix \)

blob.png

4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

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

blob.png

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

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

blob.png

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

find /etc/ -perm /o=rw

blob.png

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

find /etc -not -perm -111 -ls

blob.png

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

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

blob.png

原創文章,作者:502795641,如若轉載,請注明出處:http://www.www58058.com/37324

(0)
502795641502795641
上一篇 2016-08-18 15:20
下一篇 2016-08-18 17:14

相關推薦

  • 17 正則表達式及作業

    17 正則表達式及作業     因為正則表達式類型較多且比較重要,因此單獨拿出一篇進行陳述。 正則表達式是各種文本處理工具的基礎,也是shell編程必須牢牢掌握的知識,其重要性不言而喻。 一、雜項知識整理 1、一個[:space:]包括一個tab。 2、區分好文件名通配(globing)和文件內容通配(正則表達式)。 …

    Linux干貨 2016-08-05
  • Linux基礎知識

    命令的語法通用格式: # COMMAND OPTIONS ARGUMENTS COMMAND:  發起一命令:請求內核將某個二進制程序運行為一個進程; 程序 –> 進程 靜態 –> 動態(有生命周期) 命令本身是一個可執行的程序文件:二進制格式的文件,有可能會調用共享庫文件; 多數系統程序文件都存放在:/bin,…

    Linux干貨 2016-10-29
  • 馬哥教育網絡班21期+第四周博客作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 2、編輯/etc/group文件,添加組hadoop。 3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。 4、復制/etc/sk…

    Linux干貨 2016-07-07
  • 網絡配置——命令家族

    Linux網絡屬性配置命令: ifcfg家族:ifconfig,route,netstat ifconfig命令:接口及地址查看和管理          ·ifconfig [INTERFACE]       &nbsp…

    Linux干貨 2016-09-07
  • Linux 命令小結

    cat /proc/meminfo 校驗內存使用 cat /proc/swaps 顯示哪些swap被使用 cat /proc/version 顯示內核的版本 cat /proc/net/dev 顯示網絡適配器及統計 cat /proc/mounts 顯示已加載的文件系統 lspci -tv 羅列 PCI 設備…

    Linux干貨 2017-06-18

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 11:22

    文章對find命令的常見選項跟查找條件有了一個詳細的介紹,需要注意的是find的處理動作也是很重要的,希望課后能對find命令進行多加練習,達到熟練掌握。

欧美性久久久久