day07 find檔案查詢

2021-08-09 16:43:20 字數 3162 閱讀 7064

find檔案查詢:

在檔案系統上查詢符合條件的檔案;

檔案查詢: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' \) -ls

find /tmp -not \( -user root -o -name 'fstab' \) -ls

根據檔案大小來查詢:

-size [+|-]#unit

常用單位:k, m, g

#unit: (#-1, #]

-#unit:[0,#-1]

+#unit:(#,oo)

根據時間戳:

以「天」為單位;

-atime [+|-]#,

#: [#,#+1)

+#: [#+1,oo]

-#: [0,#)

-mtime

-ctime

以「分鐘」為單位:

-amin

-mmin

-cmin

根據許可權查詢:

-perm [/|-]mode

mode: 精確許可權匹配

/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

find檔案查詢

我們很多時候會忘記某個檔案在什麼位置,此時就需要進行檔案查詢。linux檔案查詢主要是使用find命令來進行查詢,find命令可以通過不同的維度來定位到某個想要查詢的檔案。find 查詢的範圍 選項 表示式 動作 使用示例如下 root oldboy find name ls 以根目錄下的所有檔案作...

檔案查詢 find

find 查詢目錄 引數 檔案名字 find usr name time.c 使用萬用字元 find usr name ime.c find usr name ime.c 代表任意個字元 代表單個字元 touch命令用於修改檔案或者目錄的時間屬性,包括訪問時間和更改時間。若檔案不存在,系統會建立乙個...

find 檔案的查詢

這個命令在linux中是乙個比較強大的功能,它會在你指定的資料夾下可以很精確的查詢某乙個檔案。但是它同時有乙個缺點,就是會效率會比較低,所以我推薦當你去查詢某個檔案或者想知道某個命令的路徑時,先用whereis和locate這兩個命令先去試試,如果真查不到,再使用此命令。命令說明 root loca...