find命令用法

2022-03-22 18:05:29 字數 3796 閱讀 7374

關於查詢

檔案查詢:

locate非實時查詢:根據索引查詢

find實時查詢:根據檔案的各種屬性去找到相對應檔案

根據檔案的各種屬性去找到相對應檔案

文字搜尋:

grep, egrep, fgrep

find的用法

查詢條件

檔名類

使用者和組類

檔案型別、大小和時間

根據許可權查詢:

組合條件查詢:

處理動作

用法舉例

#按檔名查詢,使用bash的萬用字元

find /etc -name "p*"   

find /etc -name "p*[0-9]*"

find /etc -iname "p*"        #忽略檔名大小寫

#按檔案的屬主和屬組找

find  /home -user fedora -ls         #-user

find  /home -group fedora -ls         #-group

find /home -uid 5056 -gid 5056 -ls    #按uid或gid找沒有屬主和屬組的檔案

find /home -nouser  -ls              #-nouser

find /home -nogroup  -ls             #-nogroup

#組合查詢條件

find ./ -name "*s*" -user gentoo -ls

find ./ -name "*s*" -a ! -user gentoo -ls

#摩根定律在組合條件中的使用,轉換寫法

find ./ ! -iname "*r*" -a ! -user gentoo

find ./ ! \( -iname "*r*" -o -user gentoo \) 

#按大小查詢

find /var/log/ -size 5k  #乙個單位內都算精確值,例如2是按1k< # <=2k

ls -hl /var/log/secure-20150809

ls -dlh 'find /var/log/ -size 2k'   # 等於2k也就是大於1k並小於2k

ls -dlh -s 'find /var/log/ -size -2k' #小於2k也就是小於1k

ls -dlh -s 'find /var/log/ -size +2k' #大於2k正

ls -dlh -s 'find /var/log/ -size +2k'

#按時間查詢

date

wed sep  2 11:47:00 hkt 2015

touch -a -t 201508260900 fstab 

stat fstab 

file: 'fstab'

access: (0644/-rw-r--r--)  uid: (    0/    root)   gid: (    0/    root)

access: 2015-08-26 09:00:00.000000000 +0800

modify: 2015-09-02 10:42:55.812961336 +0800

change: 2015-09-02 11:44:37.644899036 +0800

find . -atime +7 #找7天前的檔案,實際找的是8天前的

#按許可權查詢

find . -perm 222   #許可權精確匹配

find . -perm +222  #任意一使用者有寫許可權即可,這裡只有owner有w許可權

find . -perm +111  #任意一使用者有執行許可權即可

find . -perm +111 -type f  #找所有使用者有執行許可權的檔案

find . -perm +001 -type f  #找其他使用者有執行許可權的檔案,這裡很有用

find . -perm -644  #每類使用者至少包含對應許可權模型指定位的許可權

find . -perm -222  #找每類使用者有寫許可權的

find . -perm -002  #找其他使用者有寫許可權的

#查詢後執行的動作

find ./ -perm -002 -exec chmod -w {} \;

find ./ -perm -002 -exec chmod o-w {} \; #刪除其他使用者執行許可權

find ./ -perm -002 -exec chmod a-w {} \;

find . -perm +200 -a -type f -exec ls -l {} \;

find . -perm +200 -a -type f -a ! -name "*.*" -exec ls -l {} \;

find . -perm +200 -a -type f -a ! -name "*.*" -exec mv {} {}.txt \;  #將屬主有寫許可權且檔名沒有後續名的檔案增加後續名

練習

1、查詢/var/目錄屬主為root且屬組為mail的所有檔案;

# find /var -user root -a -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 -o -user hadoop\)

4、查詢當前系統上沒有屬主或屬組,且最近1個月內曾被訪問過的檔案;

find / \(-nouser -o -nogroup\) -a -atime -30

5、查詢/etc/目錄下大於1m且型別為普通檔案的所有檔案;

find /etc -size +1m -type f

6、查詢/etc/目錄所有使用者都沒有寫許可權的檔案;

find /etc/ -not -perm +222

7、查詢/etc/目錄下至少有一類使用者沒有寫許可權;

find /etc/ -not -perm -222

8、查詢/etc/init.d/目錄下,所有使用者都有執行許可權且其它使用者有寫許可權的檔案;

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

find與xargs

在使用find命令的-exec選項處理匹配到的檔案時, find命令將所有匹配到的檔案一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令執行幾分鐘之後,就會出現 溢位錯誤。錯誤資訊通常是「引數列太長」或「引數列溢位」。這就是xargs命令的用處所在,特別是與find命令一起使用。

find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。

在有些系統中,使用-exec選項會為處理每乙個匹配到的檔案而發起乙個相應的程序,並非將匹配到的檔案全部作為引數一次執行;這樣在有些情況下就會出現程序過多,系統效能下降的問題,因而效率不高;

而使用xargs命令則只有乙個程序。另外,在使用xargs命令時,究竟是一次獲取所有的引數,還是分批取得引數,以及每一次獲取引數的數目都會根據該命令的選項及系統核心中相應的可調引數來確定。

來自為知筆記(wiz)

find命令用法筆記

1.find type f size 200k a size 210k 找到當前目錄及其子目錄下的所有大於200k且小於210k大小的檔案 size n bckw 查詢指定檔案大小的檔案,n後面的字元表示單位,預設為b,代表512位元組的塊。type x 查詢型別為x的檔案,x為下列字元之一 b 塊...

find命令的用法

linu查詢find命令及刪除7天前的檔案 原創碼上筆記 發布於2017 10 16 16 57 49 閱讀數 14910 收藏 展開在 l o g s目錄中查詢更改時間在7日以前的檔案並刪除它們 find logs type f mtime 7 exec rm f 在 l o g s目錄中查詢更改...

find命令高階用法

1.目錄和檔案使用不同的許可權 查詢當前目錄,所有檔案型別為d 目錄 的檔案 執行命令 chmod 755find type d exec chmod 755 查詢當前目錄,所有檔案型別為f 檔案 的檔案 執行命令 chmod 644find type f exec chmod 644 2.刪除不顯...