find命令詳解
我們在日常使用電腦的時候,經常需要查找某個文件,這時我們就可以是用find命令來進行查找,find命令可以基於文件各種屬性,查找一個目錄來查找文件,find命令是一個功能非常強大的命令,但是當服務器負載比較重的時候,還是等待系統空閒時候用比較好,find命令使用時對CPU,內存資源消耗是比較大的,爲了服務的穩定性,還是建議等待系統空閒下來再使用find命令。(PS:如果能用locate解決的問題最好就不要使用find了,畢竟locate更加節省資源。)
find命令的語法
find[OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑;默認爲當前目錄;
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的所有文件;
處理動作:對符合條件的文件做什麼操作;默認輸出至屏幕;
根據文件名或者正則表達是查找;
-neme "pattern"
例如:[root@localhost ~]# find /etc/sysconfig/ -name network
/etc/sysconfig/netwok
這個是區分大小寫的,用find [查找路徑] -ineme "pattern"查找是將不會區分大小寫。
例如:[root@localhost ~]# find /etc/sysconfig/ -iname network
/etc/sysconfig/network
/etc/sysconfig/Network
在你的電腦上可能沒有Network這個文件,因爲這個文件是我自己建立的,不要誤以爲是-iname條件沒有生效,另外這兩個命令還支持支持glob風格的通配符。
例如:在/etc/sysconfig目錄下查找以net開頭的文件
[root@localhost~]# find /etc/sysconfig/ -name net*
/etc/sysconfig/netconsole
/etc/sysconfig/network-scripts
/etc/sysconfig/network-scripts/network-functions
/etc/sysconfig/network-scripts/network-functions-ipv6
/etc/sysconfig/network
根據文件從屬關係查找:
-user USERNAME:查找屬主指定用戶的所有文件;
-group GRPNAME:查找屬組指定組的所有文件;
例如: [root@localhost ~]# find /home/ -user root -group hadoop -ls
33859580 0 drwxr-xr-x 2 root hadoop 6 12月 17 20:20 /home/root
-uid UID:查找屬主指定的UID的所有文件;
-gid GID:查找屬組指定的GID的所有文件;
例如find /home/ -uid 0 -gid 1001 -ls
33859580 0 drwxr-xr-x 2 root hadoop 6 12月 17 20:20 /home/root
-nouser:查找沒有屬主的文件;
-nogroup:查找沒有屬組的文件;
使用方法如下:
抱歉,我的主機上沒有這樣沒有屬主和屬組的文件
根據文件的類型查找:
-type TYPE [f][d][l][b][c][p][s]:
例如:[root@localhost ~]# find /home -type d
/home
/home/hadoop
/home/hadoop/.mozilla
/home/hadoop/.mozilla/extensions
/home/hadoop/.mozilla/plugins
/home/root
組合測試:
與:-a, 默認組合邏輯;
或:-o
非:-not, !
例如:[root@localhost~]# find /home -type d -user root就相當於
[root@localhost~]# find /home -type d -a -user root
/home
/home/root
[root@localhost~]# find /home -type d -o -user root
/home
/home/hadoop
/home/hadoop/.mozilla
/home/hadoop/.mozilla/extensions
/home/hadoop/.mozilla/plugins
/home/root
[root@localhost~]# find /home -type d -o -user root
/home
/home/hadoop
/home/hadoop/.mozilla
/home/hadoop/.mozilla/extensions
/home/hadoop/.mozilla/plugins
/home/root
根據文件的大小查找:
-size [+|-]文件大小n 常用單位:k, M, G
+nM則大於nM
-nM則小於nM
nM則等於nM
例如:
根據時間戳查找:以“天”爲單位;
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#
這裏的+-與上面size的+-類似只不過+變成了n天之前,-變成了n天以內。atime是指定時間之時被存取的文件或目錄,mtime是指定時間之時被改動的文件或目錄,ctime是指定時間之時被更改的文件或目錄。
例如:[root@localhostroot]# find /home/root -atime +1
/home/root/Fedora-i386-20-20131211.1-sda.qcow2
以“分鐘”爲單位:
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]#
這個與上面以“天”爲單位的操作類似就不多做說明了。
根據權限查找:
-perm [/|-]mode
mode:精確權限匹配;
/mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足;
9位權限之間存在“或”關係;
-mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足;
9位權限之間存在“與”關係;
例如find /home -typef -perm 777(查找/home目錄下權限爲rwxrwxrwx的文件)
find /home -type f -perm /222(查找/home目錄下文件u,g,o權限中只要一個有w權限的文件)
find /home -type f -perm -222(查找/home目錄下文件u,g,o權限中每個都有W權限的文件)