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找到