【APP】Linux運維利器--Find命令

Find命令總結

實時

精確

支持衆多查找標準

遍歷指定目錄中的所有文件完成查找,速度相對慢;

find 查找路徑 查找標準 查找到以後的處理運作

查找路徑:默認爲當前目錄

查找標準:默認爲指定路徑下的所有文件

處理運作:默認爲顯示


匹配標準

-name 'FILENAME':對文件名作精確匹配

文件名通配:

*:任意長度的任意字符

?

[]

-iname 'FILENAME': 文件名匹配時不區分大小寫


實例:

find ./ -name "*.conf"

find ./ -iname "MyC.c"    忽略大小寫!

find . -perm 777


+++++++++++++++++++++++++++++++++++++++++++++++

-user USERNAME: 根據屬主查找

-group GROUPNAME: 根據屬組查找

-uid UID: 根據UID查找

-gid GID: 根據GID查找

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

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


實例:

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

find /var -user root -group mail


2、查找/usr目錄下不屬於root,bin,或student的文件;

find /usr -not -user root -a -not -user bin -a -not -user student

find /usr -not \( -user root -o -user bin -o -user student \)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-type

f: 普通文件

d: 目錄

c:字符設備

b:塊設備

l:軟連接文件

p:管道文件

s:套節字


實例:

find /etc -type f

find /etc -type d

find ./ ! -type d     #在當前目錄下查找除目錄以外的所有類型的文件


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-size [+|-]

表示文件大小,+表示大於某個數,-表示小於某個數,c表示單位是字節,你可以將c換成k,M,G.


實例:

find ./ -size 0 -exec rm {} \;

find ./ -size 0 | xargs rm -f

find . -size +1000000c   #在當前目錄下查找文件長度大於1 M字節的文件

find /home/apache -size 100c  #在/home/apache目錄下查找文件長度恰好爲100字節的文件

find . -size +10     #在當前目錄下查找長度超過10塊的文件(一塊等於512字節)


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

文件狀態判斷

-mtime: 指定時間文件內容被修改過

-ctime: 指定時間文件權限被修改過

-atime: 指定時間文件被讀取過


1、找出3天“以前”被修改過的文檔

find /var/log/ -mtime +3 -type f -print


2、找出3天“內”被修改過的文檔

find /var/log/ -mtime -3 -type f -print


3、找出第3天被修改過的文檔.

find /var/log/ -mtime 3 -type f -print

或這樣寫:

find /var/log/ -mtime +2 -mtime -4 -type f -print


注:

訪問過用amin,修改過用mmin,文件狀態改變過用cmin

精確到分鐘的用amin,mmin,cmin,精確到天的用atime,mtime,ctime


find /logs -type f -mtime +5 -exec rm {} \;  #在/logs目錄中查找更改時間在5日以前的文件並刪除它們

find / -mtime -5 -print   #在系統根目錄下查找更改時間在5日以內的文件


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-mount:在查找文件時不跨越文件系統mount點,這樣限制在本文件系統!

這個用的不多就不舉實例了!


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-prune

find /apps -path "/apps/bin" -prune -o -print    #在/apps目錄下查找文件,但不希望在/apps/bin目錄下查找。在用這條命令時,要麼各目錄最好用絕對路徑,要麼前後對應,如:find test/  -path "./test/a" -prune -o -print  這種方式是不對的.


-depth:在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。

-maxdepth:

find . -maxdepth 1 -name fred   #在當前目錄下查找

find . -maxdepth 2 -name fred   #在當前目錄的下一級目錄查找

find -mindepth 3 -maxdepth 5 -name passwd

[root@fb13 /]# find . -maxdepth 3 -name test

./b/test

./usr/bin/test

./a/test


find /project -maxdepth 2 \( -path "/project/exapi/log" -o -path "/project/exapi/backup" \) -prune -o -print |grep "/project/exapi/" |xargs tar zcf /backup/exapi_`date +%F`.tar.gz


++++++++++++++++++++++++++++++++++++++++++++++++++++

使用混合查找方式: -a -o -not

find /tmp -size +10000000c -a -mtime +2

find / -user andy -o -user jack

find /tmp -not -user zjqiu


運作

   -print: 顯示

   -ls:類似ls -l的形式顯示每一個文件的詳細

   -ok COMMAND {} \;

   -exec COMMAND {} \;


-ok,和-exec的作用相同,只不過以一種更爲安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行,如:

find . -name "*.conf"  -mtime +5 -ok rm {} \;


查找並顯示文件的方法:

查找到某個文件是我們的目的,我們更想知道查找到的文件的詳細信息和屬性,可以:

find / -name "httpd.conf" -ls


++++++++++++++++++++++++++++++++++++++++

find -perm參數的詳細說明:

-perm

  MODE:  精確匹配

   /MODE: 任意一位匹配即滿足條件

  -MODE: 文件權限能完全包含此MODE時才符合條件

-644

644: rw-r--r--

755: rwxr-xr-x

750: rwxr-x---


find ./ -perl -001


#(case 1)-perm mode (比如: -perm 775)

解釋:775 前面沒有橫線是代表只要找到百分之百一樣的權限纔算

好比說一個檔案是 -rwxrwxr-x (775)就是100%的match

但是另一個檔案是 -rwxrwxrwx (777)不是100%的match,others 多了寫的權限就不是100%,所以不match!


# (case 2) -perm -mode (例如: -perm -775)

解釋:-775 前面有橫線表示只要標示的權限match,其他的無所謂,所以上面的第二個檔案(777的)在這個case也會match的。


關於find命令中-perm中+- 的含義

舉個例子:比如當前目錄下有a b c d4個文件

a文件的權限爲6000 也就是a文件僅有suid sgid的特殊權限

b文件的權限爲2000 也就是b文件僅有sgid的特殊權限

c文件的權限爲4000 也就是c文件僅有suid的特殊權限

d文件的權限爲6600 也就是d文件有sgid suid的特殊權限並且該文件擁有者對該文件有讀寫權限

那麼現在find . -type f -perm 6000 可以找到a文件,因爲a文件權限爲6000

那麼現在find . -type f -perm -6000 可以找到a d兩個文件,這是因爲:

我們可以先將a b c d這4個文件的權限轉化爲2進制那麼,

a權限轉爲2進制後爲 110 000 000 000

b權限轉爲2進制後爲 010 000 000 000

c權限轉爲2進制後爲 100 000 000 000

d權限轉爲2進制後爲 110 110 000 000

在find

. -type f -perm -6000 中的6000權限轉爲2進製爲110 000 000

000,那麼6000前的-號代表缺一不可,也就是如果有1的地方必須有1,那麼這裏找-6000權限的文件,這6000權限裏前面有2個位置都是1,所

以這裏find找-6000權限的文件就是找前面2個位置都是1的文件.而只有a d這兩個文件前2個位置都是1,所以find . -type f

-perm -6000 只會找到a d兩個文件.

find . -type f -perm +6000會找到a b c d這4個文件,這是因爲:

+6000

裏的這個+號代表有1即可,也就是有1的位置只要有1就可以.那麼這裏找+6000權限的文件,這6000權限前面2個位置都有1,所以這裏find

找+6000權限的文件就是找前面2個位置只要有一個位置有1的文件就可以了,這4個文件都符合要求所以最後都能被 find . -type f

-perm +6000找到


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