文件的查找

        在Linux這個一切皆文件的系統中怎麼能快速和精確的查找到文件,是我們必不可少的技能。而文件查找的命令可以讓我們在很短的時間內在文件系統中找到我們要查找的文件。這就是我們要掌握的,因此我來介紹一下文件查找的這兩個命令locate和find。


文件查找:在文件系統上查找符合條件的文件;

文件查找:locate, find

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

    實時查找:find


locate命令

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

依賴於事先構建的索引;

        索引的構建是在系統較爲空閒時自動進行( 週期性任務) ;管理員手動更新數據庫(updatedb); ;索引構建過程需要遍歷整個根文件系統,極消耗資源;

工作特點:

    查找速度快;

    模糊查找;

    非實時查找;

    搜索的是文件的全路徑,不僅僅是文件名可能只搜索用戶具備讀取和執行權限的目錄。

locate 命令語法

locate KEYWORD

locate passwd:搜索名稱或路徑中帶有“passwd ”的文件

wKioL1e5SyTRN3nhAAAIAkML5yQ898.png-wh_50

有用的選項

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

wKiom1e5S2bS1tNIAAAOzR5cytk636.png-wh_50

    -n X 只列舉前X 個匹配項目

wKiom1e5S8WCTasvAAAjDOx2NLc701.png-wh_50




find命令

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

工作特點:

    查找速度略慢

    精確查找

    實時查找

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

find命令語法:

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

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

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

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


查找條件

根據文件名和inode 查找:

    -name " 文件名稱" :支持使用glob

        *, ?, [], [^]

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

    -inum n 按inode 號查找

    -samefile name 相同inode 號的文件

    -links n 鏈接數爲n 的文件

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

wKioL1e5UAXCeBhDAAANKx8Hm_0327.png-wh_50

wKiom1e5UAXwofQWAABUtrmEPXU015.png-wh_50

根據屬主、屬組查找:

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

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

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

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

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

wKiom1e5U5jSl8XMAAA3wra0KN8933.png-wh_50

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

wKioL1e5U6OwFrfSAAAw6SDWAKs640.png-wh_50

根據文件類型查找:

    -type TYPE:

    f:  普通文件

    d:  目錄文件

wKioL1e5VPay5FqiAAArLrKh7ks278.png-wh_50

    l:  符號鏈接文件

    s :套接字文件

    b:  塊設備文件

wKiom1e5VQbTe7bwAAANCvP4Z7g670.png-wh_50

    c:  字符設備文件

    p:  管道文件

根據文件大小來查找:

-size [+|-]#UNIT

常用單位:k, M, G

#UNIT: (#-1, #] ,如:6k

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

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

wKioL1e5Wb6CWM0kAAAIHCOU3qY072.png-wh_50

6k  :是5k - 6k 之間,不包含5k,但包含6k。

-6k   :是0k - 5k 之間,不僅包含0k, 也包含5k。

+6k :是6k-正無窮之間,不包含6k。

wKioL1e5Va_CZAmHAABenSjiszw470.png-wh_50

根據時間戳:

以“天”爲單位;

wKioL1e5XeKDPB3hAAAGTwVIW1U361.png-wh_50

7 :是7天前 - 8天前之間,包含剛好第7天的,不包含剛好第8天的

+7 :是8天前 - 正無窮天前之間,包含剛好第八天的

-7 :未來時間

    -atime [+|-]#,

    #: [#,#+1)

    +#: [#+1, ∞ ]

    -#: [0,#)

    -mtime

    -ctime

wKioL1e5XUmQFDsdAABrHb_65mw268.png-wh_50

以“分鐘”爲單位:

    -amin

    -mmin

    -cmin

wKioL1e5XSaD2sXQAAAwo9yX-SI227.png-wh_50

根據權限查找:

-perm [/|-]MODE

MODE:  精確權限匹配

    /MODE :任何一類(u,g,o) 對象的權限中只要能一位匹配即可,或關係,+  從centos7 開始淘汰

    -MODE :每一類對象都必須同時擁有指定權限,與關係

    0  表示不關注

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

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

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

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

wKiom1e5YdmiiDMnAABJV9bP0jk363.png-wh_50


組合條件:

    與:-a

    或:-o

    非:-not, !

wKioL1e5bQfSkRdoAABoMycpjQY218.png-wh_50

wKiom1e5bQiiC1fFAABmewMtBHA531.png-wh_50

    德· 摩根 定律:

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

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

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

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

wKioL1e5plXinyfjAAAiThZ2R10801.png-wh_50

wKiom1e5pxmzk6rfAAAg1tF0g0U281.png-wh_50

P=1+3 , Q=2+3 , P 且 Q=3 , P 或 Q=1+2+3


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

非(P 且 Q):非(1+3 且 2+3)=(2+4 或 1+4)= 1+2+4

(非P)或(非Q): (非 1+3)或(非2+3)=(2+4)或(1+4)= 1+2+4

(可以看出除了3其他都是)


非(P 或 Q) = (非 P) 且 (非 Q)
非(P 或 Q):非(1+3 或 2+3)=(2+4 且 1+4)= 4

(非P)且(非Q) :(非 1+3)且(非 2+3)=(2+4)且(1+4)=4

(可以看出除了4其他都不是)

排除目錄

find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print

wKioL1e5rO_TNVsGAAAWY5sPBts091.png-wh_50

wKiom1e5rO-Dv7qTAAAf3b6ITX0209.png-wh_50


處理動作

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

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

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

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

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

對於每個文件執行命令之前,都會交互式要求用戶確認

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

{}:  用於引用查找到的文件名稱自身

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

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

find | xargs COMMAND



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章