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

Find命令總結shell

實時apache

精確api

支持衆多查找標準安全

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

find 查找路徑 查找標準 查找到之後的處理運做ide

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

查找標準:默認爲指定路徑下的全部文件spa

處理運做:默認爲顯示文檔


匹配標準it

-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: 查找沒有屬組的文件


實例:

一、查找/var目錄下屬主爲root而且屬組爲mail的全部文件;

find /var -user root -group mail


二、查找/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: 指定時間文件被讀取過


一、找出3天「之前」被修改過的文檔

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


二、找出3天「內」被修改過的文檔

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


三、找出第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找到

相關文章
相關標籤/搜索