find是linux命令,它將檔案系統內符合expression的檔案列出來,你可以指要檔案的名稱、類別、時間、大小、許可權等不同命令的組合,只有完全相符的才會被列出來。
find可以在目前的目錄下甚至整個檔案系統來尋找某些檔案或目錄;
注意:find命令是相當耗資源的不得以的時候不要find的,比如說根 / 目錄;
功能說明:尋找檔案或目錄
find-->即時尋找:速度慢、精確匹配
命令文法:
find [options] [尋找路徑] [尋找條件] [處理動作]
尋找路徑:預設為目前的目錄
尋找條件:預設為尋找指定路徑下的所有檔案
處理動作:預設為顯示
下面就來一起看下find的用法吧:
1.尋找條件:根據檔案名稱尋找時是嚴格區分字母大小寫
-name "檔案名稱": 支援使用globbing
* :重複0次或者任意多次前面字元
? :單個字元
[] :字元範圍
[^]:排除字元範圍
應用執行個體:
1).查看/etc目錄下有多少passwd檔案:
[root@xiaomazi ~]#
[root@xiaomazi ~]# find /etc -name "passwd"
/etc/pam.d/passwd
/etc/passwd
[root@xiaomazi ~]#
2).查看/etc目錄下所有以passwd開頭的檔案:
[root@xiaomazi ~]# find /etc -name "passwd*"
/etc/pam.d/passwd
/etc/passwd-
/etc/passwd
[root@xiaomazi ~]#
3).查看/etc目錄下所有以passwd結尾的檔案:
[root@xiaomazi ~]# find /etc -name "*passwd"
/etc/pam.d/passwd
/etc/passwd
/etc/security/opasswd
[root@xiaomazi ~]#
2.-iname "檔案名稱":尋找時不區分字元大小寫
應用舉例:
1).尋找/etc下所有以passwd開頭的檔案(並不區分大小寫):
[root@xiaomazi ~]# touch /etc/Passwd -->建立測試檔案
[root@xiaomazi ~]# find /etc -iname "passwd*"
/etc/pam.d/passwd
/etc/passwd-
/etc/passwd
/etc/Passwd
[root@xiaomazi ~]# rm -rf /etc/Passwd
注意不要再/etc目錄下隨便建立檔案吆.
3. 根據屬主屬組來尋找:
-user UserName: 根據屬主尋找
-group GroupName: 根據屬組尋找
應用舉例:
1).尋找檔案的屬主是Hadoop使用者的檔案:
[root@xiaomazi ~]# su - hadoop
[hadoop@xiaomazi ~]$ cp/etc/fstab/tmp/-->注意以誰的身份複製檔案,檔案的屬主屬組就是誰的.
[hadoop@xiaomazi ~]$ ls-l /tmp/
total 28
-rw-r--r-- 1 hadoop hadoop 921 Feb 26 18:14 fstab
[hadoop@xiaomazi ~]$
[root@xiaomazi ~]# find /tmp -user hadoop
/tmp/fstab
[root@xiaomazi ~]#
2).尋找檔案的屬組是hadoop使用者的檔案:
[root@xiaomazi ~]# find /tmp -group hadoop
/tmp/fstab
[root@xiaomazi ~]#
4.根據UID/GID來尋找:
-uid UID
-gid GID
如果我將Fedora使用者刪除,沒有加選項-r,就不會刪除使用者檔案的;如果檔案的屬主屬組不在了,會發生什麼問題呢?但是,如果此前不確定使用者名稱,也可以使用uid的;
應用舉例:
1).尋找/tmp目錄下uid是501的所有檔案:
[root@xiaomazi ~]# useradd fedora -->建立使用者
[root@xiaomazi ~]# su - fedora -->切換到fedora使用者
[fedora@xiaomazi ~]$ cp/etc/inittab/tmp/-->以fedora使用者來複製檔案
[fedora@xiaomazi ~]$ ls-l /tmp/
total 28
-rw-r--r-- 1 hadoop hadoop 921 Feb 26 18:14 fstab
-rw-r--r-- 1 fedora fedora 884 Feb 26 18:22 inittab
[fedora@xiaomazi ~]$ exit
logout
[root@xiaomazi ~]# userdel fedora -->類比刪除使用者
[root@xiaomazi ~]# ls -l /tmp/
total 28
-rw-r--r-- 1 hadoop hadoop 921 Feb 26 18:14 fstab
-rw-r--r-- 1 501 501 884 Feb 26 18:22 inittab -->注意:現在屬主屬組屬於501
[root@xiaomazi ~]# find /tmp -user fedroa -->這是找不到的啦!
find: `fedroa' is not the name of a known user
[root@xiaomazi ~]# find /tmp -uid 501 -->假設我們知道fedora的uid,就可以全域範圍的尋找fedora的檔案了.
/tmp/inittab
[root@xiaomazi ~]#
5.根據-nouser、-nogroup: 尋找沒有屬主、屬組的檔案;
-nouser:尋找沒有屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。
-nogroup: 尋找沒有屬組的檔案,即該檔案所屬的組在/etc/group中不存在。
應用舉例:
1).假如說現在就在系統上找沒有屬主的檔案應該怎麼樣找呢?
[root@xiaomazi ~]# find /tmp -nouser
/tmp/inittab
[root@xiaomazi ~]#
6.組合條件:
-a: 與,同時滿足(可以不寫的)
-o: 或,表示一個滿足就可以
-not, !:非,取反
應用舉例:
1).尋找/tmp目錄下沒有屬主或屬主為hadoop的檔案:
[root@xiaomazi ~]# find /tmp -nouser -o -user hadoop
/tmp/inittab
/tmp/fstab
[root@xiaomazi ~]#
2).尋找/tmp目錄下屬主為hadoop,並且檔案以.txt結尾的檔案:
[hadoop@xiaomazi ~]$ whoami
hadoop -->目前使用者
[hadoop@xiaomazi ~]$ cd /tmp/
[hadoop@xiaomazi tmp]$ touch word.doc hello.txt
[hadoop@xiaomazi tmp]$ ll -->建立檔案以便測試.
total 28
-rw-r--r-- 1hadoop hadoop 921Feb 2618:14fstab
-rw-rw-r-- 1hadoop hadoop 0Feb 2618:58hello.txt
-rw-r--r-- 1501501884Feb 2618:22inittab
-rw-rw-r-- 1hadoop hadoop 0Feb 2618:58word.doc
root使用者
[root@xiaomazi ~]# find /tmp -user hadoop -name "*.txt"
/tmp/hello.txt
[root@xiaomazi ~]#
3).尋找/tmp目錄下屬主為hadoop,並且也不是以.txt結尾的檔案:
[root@xiaomazi ~]# find /tmp -user hadoop -a -not -name "*.txt"
/tmp/fstab
/tmp/word.doc
[root@xiaomazi ~]#
4).尋找/tmp目錄下屬主不是hadoop,並且也不是以.txt結尾的檔案
I.使用的是-a選項:
[root@xiaomazi tmp]# find /tmp -not -user hadoop -a -not -name "*.txt"
/tmp
/tmp/inittab
/tmp/.ICE-unix
[root@xiaomazi tmp]#
II.使用的是-o選項:
[root@xiaomazi tmp]#
[root@xiaomazi tmp]# find /tmp -not \( -user hadoop -o -name "*.txt" \)
/tmp
/tmp/inittab
/tmp/.ICE-unix
[root@xiaomazi tmp]#
5).尋找/tmp目錄下屬主不是hadoop,或者不是以.txt結尾的:
[root@xiaomazi tmp]# find /tmp -not -user hadoop -o -not -name "*.txt"
/tmp
/tmp/inittab
/tmp/fstab
/tmp/word.doc
/tmp/.ICE-unix
[root@xiaomazi tmp]#
6.根據檔案類型尋找:
-type: 根據檔案類型尋找
f: 普通檔案
d: 目錄
b: 塊裝置
c: 字元裝置
l: 符號連結檔案
p: 具名管道
s: 通訊端
應用舉例:
1).將/tmp目錄下的目錄顯示出來:
[root@xiaomazi tmp]# find /tmp -type d
/tmp
/tmp/.ICE-unix
[root@xiaomazi tmp]#
2).尋找/tmp目錄下的普通檔案顯示出來:
[root@xiaomazi tmp]# find /tmp -type f
/tmp/inittab
/tmp/fstab
/tmp/word.doc
/tmp/hello.txt
[root@xiaomazi tmp]#