“一切皆檔案”是 Linux的哲學思想之一, 這條指令可以統計目前linux系統中有多少檔案ls -R / |wc -l &建議放在背景執行,因為你的系統檔案很多則會消耗很多時間,你可以看見這個結果是龐大的,linux的系統中的檔案實在是太多了,怎麼樣才能快速而且精确的在linux系統找出你想要的檔案呢?Linux 的find指令提供了很強大的功能,學好find指令的使用,可以給你節省大量花費在找檔案的時間。
find的基本文法格式:
find [查找位置] [查找标準] [處理動作]
查找位置:預設為目前目錄,可以指定多個目錄,多個之間用空格
查找标準:預設為查找指定目錄下的所有檔案
處理動作:顯示到标準輸出,預設為print
剖析find的查找标準可分為哪些:
1)檔案名
-name "檔案名稱" : 根據檔案名查找,支援glob
<a target="_blank" href="http://blog.51cto.com/attachment/201307/112613593.png"></a>
-iname "檔案名稱",根據檔案名查找,不區分大小寫
<a target="_blank" href="http://blog.51cto.com/attachment/201307/112736368.png"></a>
2)檔案的屬主、屬組
-user "USERNAME" : 根據屬主查找
-group "GROUP" : 根據屬組查找
-uid "UID" : 根據UID查找
-gid "GID" : 根據GID查找
-nouser : 查找沒有屬主的檔案
-nogroup : 查找沒有屬組的檔案
<a target="_blank" href="http://blog.51cto.com/attachment/201307/113036813.png"></a>
1
2
3
4
5
6
7
8
<code>[root@Redhat6 /]</code><code># find / -nouser -nogroup #沒有屬主,也沒有屬組</code>
<code>/tmp/user1dir</code>
<code>[root@Redhat6 /]</code><code># ls -ld /tmp/user1dir/ #驗證查找的檔案是否符合要求,檔案沒有使用者表示屬主和屬組,但會以ID号來表示</code>
<code>drwxrwxr-x 2 500 500 4096 Jul 23 10:36 </code><code>/tmp/user1dir/</code>
<code>[root@Redhat6 /]</code><code># find / -user root -gid 500 #查找使用者為root,gid為500</code>
<code>[root@Redhat6 /]</code><code># ls -ld /tmp/user1dir/</code>
<code>drwxrwxr-x 2 root 500 4096 Jul 23 10:36 </code><code>/tmp/user1dir/</code>
3)檔案的類型
-type
f 檔案
d 目錄
b 塊裝置
c 字元裝置
l 符合連結檔案
p 指令管道檔案
s 套接字檔案
<a target="_blank" href="http://blog.51cto.com/attachment/201307/113633257.png"></a>
4)檔案的大小
-size
#[k|M|G]:#表示數字,比對的時候為模糊比對
+#[k|M|G]:+#表示大于,比對的結果大于#
-#[k|M|G] :-#表示小于,比對的結果是小于#
<a target="_blank" href="http://blog.51cto.com/attachment/201307/120502830.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/121148430.png"></a>
5)檔案修改時間
-atime [+|-]# :通路時間,預設為天,#表示#天的這個時間點,+#表示至少有#天沒通路 , -#表示#天之内沒通路
-mtime [+|-]# : 修改時間,#表示#天的這個時間點沒有被修改,+#表示至少有#天沒有修改 , -#表示#天之内沒有修改
-ctime [+|-]# : 改變時間,#表示#天的這個時間點沒有被改變,+#表示至少有#天沒有被改變 , -#表示#天之内沒有被改變
-amin [+|-]# : 時間為分鐘,#表示#分鐘的這個時間點沒有被通路,+#表示至少有#分鐘沒有被通路 , -#表示#分鐘之内沒通路
-mmin [+|-]# :時間為分鐘,#表示#分鐘的這個時間點沒有被修改,+#表示至少有#分鐘沒有被修改 , -#表示#分鐘之内沒有被修改
-cmin [+|-]# :時間為分鐘,#表示#分鐘的這個時間點沒有被改變,+#表示至少有#分鐘沒有被改變 , -#表示#分鐘之内沒有被改變
<a target="_blank" href="http://blog.51cto.com/attachment/201307/122843920.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/124303783.png"></a>
6)檔案權限
-perm [+|-] MODE
不帶[+|-]表示精确權限比對,
+表示任何一類使用者的任何一位權限比對
- 表示每類使用者的每位權限都比對
<a target="_blank" href="http://blog.51cto.com/attachment/201307/135422987.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/135758724.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/141955529.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/142435106.png"></a>
find在查找标準時支援組合查找條件,在使用組合查找條件時要考慮優先級,優先級為順序為非→與→或,在組合參數是想改變優先級可以用()來提升優先級。
-a (and) 與預設是與
-o (or) 或
-not,! 非
find的處理動作可以是:
-print 預設為輸出
-ls 顯示查找到的檔案的詳細資訊
-ok COMMAND \; 要确認
-exec COMMAND \; 其中COMMAND中有對查找到的檔案進行操作時,用{}來替代查找到的 檔案,\;表示使用-exec的結束符,是固定格式; 使用-exec來出來查找的檔案時,還可以通過管道送給xargs指令來解決,xargs在執行指令時,如果有對檔案進行操作則用-i選項,{}也表示要操作的檔案。
9
10
11
12
13
14
15
16
17
18
<code>1、查找</code><code>/var</code><code>目錄下屬主為root并且屬組為mail的所有檔案;</code>
<code>find</code> <code>/var</code> <code>-user root -group mail</code>
<code>2、查找</code><code>/usr</code><code>目錄下不屬于root,bin,或student的檔案;</code>
<code>find</code> <code>/usr</code> <code>-not \( -user root -o -user bin -o -user student \)</code>
<code>find</code> <code>/usr</code> <code>-not -user root -a -not -user bin -a -not -user student</code>
<code>3、查找</code><code>/etc</code><code>目錄下最近一周内内容修改過且不屬于root及student使用者的檔案;</code>
<code>find</code> <code>/etc</code> <code>-mtime -7 -a -not -user root -a -not -user student</code>
<code>find</code> <code>/etc</code> <code>-mtime -7 -a -not \( -user root -o -user student \)</code>
<code>4、查找目前系統上沒有屬主或屬組且最近1天内曾被通路過的檔案,并将其屬主屬組均修改為root;</code>
<code>find</code> <code>/ \( -nouser -o -nogroup \) -a -atime -1 -</code><code>exec</code> <code>chown</code> <code>root:root {} \;</code>
<code>5、查找</code><code>/etc</code><code>目錄下大于1M的檔案,并将其檔案名寫入</code><code>/tmp/etc</code><code>.largefiles檔案中;</code>
<code>find</code> <code>/etc</code> <code>-size +1M -</code><code>exec</code> <code>echo</code> <code>{} >> </code><code>/tmp/etc</code><code>.largefiles \;</code>
<code>find</code> <code>/etc</code> <code>-size +1M >> </code><code>/tmp/etc</code><code>.largefiles</code>
<code>6、查找</code><code>/etc</code><code>目錄下所有使用者都沒有寫權限的檔案,顯示出其詳細資訊;</code>
<code>find</code> <code>/etc</code> <code>-not -perm +222</code>
<code>7、删除類型不是目錄,而且沒有屬主的檔案;</code>
<code>find</code> <code>/ -not -</code><code>type</code> <code>d -a -nouser -</code><code>exec</code> <code>rm</code> <code>-f {} \;</code>
<code>find</code> <code>/ -not -</code><code>type</code> <code>d -a -nouser | </code><code>xargs</code> <code>-i </code><code>rm</code> <code>-f {}</code>
<code></code>
本文轉自 jie783213507 51CTO部落格,原文連結:http://blog.51cto.com/litaotao/1261246,如需轉載請自行聯系原作者