find命令詳解
### 命令格式 find pathname -options [-print -exec -ok] ### 命令參數 pathname:find命令所查找的目錄路徑。例如用.表示當前目錄,用/來表示系統根目錄 -print:find命令將會匹配的文件輸出到標準輸出。-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }和\;之間的空格。-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。### 命令選項 -name 按照文件名查找文件。-perm 按照文件權限來查找文件。-prune 使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被find命令忽略。-user 按照文件屬主來查找文件。-group 按照文件所屬的組來查找文件。-mtime -n +n 按照文件的更改時間來查找文件, - n表示文件更改時間距現在n天以內,+ n表示文件更改時間距現在n天以前。find命令還有-atime和-ctime 選項,但它們都和-m time選項。-nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在。-nouser 查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。-newer file1 ! file2 查找更改時間比文件file1新但比文件file2舊的文件。-type 查找某一類型的文件,諸如:b - 塊設備文件。 d - 目錄。 c - 字符設備文件。 p - 管道文件。 l - 符號鏈接文件。 f - 普通文件。 -name "文件名稱":支持使用glob *, ?, [], [^] -iname "文件名稱":不區分字母大小寫 -inum n 按inode號查找 -samefile name 相同inode號的文件 -links n 鏈接數為n的文件 -regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不僅僅是文件名稱另外,下面三個的區別: amin n 查找系統中最后N分鐘訪問的文件 -atime n 查找系統中最后n*24小時訪問的文件-cmin n 查找系統中最后N分鐘被改變文件狀態的文件-ctime n 查找系統中最后n24小時被改變文件狀態的文件-mmin n 查找系統中最后N分鐘被改變文件數據的文件-mtime n 查找系統中最后n24小時被改變文件數據的文件
常用實例1. find -atime -2超過48小時內查看或者執行的文件
2. find . -name ".log"查找當前目錄以.log結尾的文件
3. find /var/log -perm 777查找/var/log目錄下權限為777的文件
4. find . -type f -name ".log"查找當前目錄以.log為結尾的普通文件
5. find . size +10M -print查找當前目錄大于1M的文件
6. find .-type d | sort查找當前所有目錄并且排序
7. find -name april* fprint file 在當前目錄下查找以april開始的文件,并把結果輸出到file中
8. find -name ap* -o -name may* 查找以ap或may開頭的文件
9. find /mnt -name tom.txt -ftype vfat 在/mnt下查找名稱為tom.txt且文件系統類型為vfat的文件
10.find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名稱為tom.txt且文件系統類型不為vfat的文件
11.find /tmp -name wa* -type l 在/tmp下查找名為wa開頭且類型為符號鏈接的文件
12.find /home -mtime -2 在/home下查最近兩天內改動過的文件
13.find /home -atime -1 查1天之內被存取過的文件
14.find /home -mmin +60 在/home下查60分鐘前改動過的文件
15.find /home -amin +30 查最近30分鐘前被存取過的文件
16.find /home -newer tmp.txt 在/home下查更新時間比tmp.txt近的文件或目錄
17.find /home -anewer tmp.txt 在/home下查存取時間比tmp.txt近的文件或目錄
18.find /home -used -2 列出文件或目錄被改動過之后,在2日內被存取過的文件或目錄
19.find /home -user cnscn 列出/home目錄內屬于用戶cnscn的文件或目錄
20.find /home -uid +501 列出/home目錄內用戶的識別碼大于501的文件或目錄
21.find /home -group cnscn 列出/home內組為cnscn的文件或目錄
22.find /home -gid 501 列出/home內組id為501的文件或目錄
23.find /home -nouser 列出/home內不屬于本地用戶的文件或目錄
24.find /home -nogroup 列出/home內不屬于本地組的文件或目錄
25.find /home -name tmp.txt -maxdepth 4 列出/home內的tmp.txt 查時深度最多為3層
26.find /home -name tmp.txt -mindepth 3 從第2層開始查
27.find /home -empty 查找大小為0的文件或空目錄
28.find /home -size +512k 查大于512k的文件
29.find /home -size -512k 查小于512k的文件
30.find /home -links +2 查硬連接數大于2的文件或目錄
31.find /home = -perm =0700 查權限為700的文件或目錄
32.find /tmp -name tmp.txt -exec cat {} \;查找/tmp下的tmp.txt文件并且執行catfind
組合條件: 與:-a 或:-o 非:-not, !
德·摩根定律:
非(P 且 Q) = (非 P) 或 (非 Q) 非(P 或 Q) = (非 P) 且 (非 Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B) 在實際操作中,要查找的文件要滿足好幾個條件,這時-a -o -not ! 選項就特別的好用了。下面舉幾個例子
-
查找/var 目錄下書諸位root,且屬組為mail的所有文件
[root@centous1 ~]# find /var -user root -a -group mail/var/spool/mail
-
查找/var目錄下不屬于root、ip、gdm的所有文件
[root@centous1 ~]# find /var -not \( -user root -o -user ip -o gdm \)
-
查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
[root@centous1 ~]# find /var -atime -7 -not \( -user root -o -user postfix \) /var/log/mysqld.log/var/spool/mail/basher /var/spool/mail/user1 /var/spool/mail/zabbix /var/spool/mail/rpc /var/spool/mail/user2
-
查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
find / \( -nouser -o -nogroup \) -atime -7
-
查找/etc目錄下大于1M且類型為普通文件的所有文件
[root@centous1 ~]# find /etc -size +1M -type f/etc/selinux/targeted/modules/active/policy.kern /etc/selinux/targeted/policy/policy.24
-
查找/etc目錄下所有用戶都沒有寫權限的文件
[root@centous1 ~]# find /etc/ -not -perm /222 -ls (這里注意222前面用的是/ )265076 4 -r--r--r-- 1 root root 80 9月 1 2014 /etc/lvm/profile/thin-performance.profile265074 4 -r--r--r-- 1 root root 827 10月 16 2014 /etc/lvm/profile/metadata_profile_template.profile265073 4 -r--r--r-- 1 root root 2231 10月 16 2014 /etc/lvm/profile/command_profile_template.profile265075 4 -r--r--r-- 1 root root 76 9月 1 2014 /etc/lvm/prof mode 精確權限匹配 /mode 每一位只要有一類匹配的就行 -mode 每一類必須同時擁有mode指定的權限0 表示不關注,權限隨意
-
查找/etc目錄下至少有一類用戶沒有執行權限的文件
[root@centous1 ~]# find /home/ -not -perm -111 -ls1831429 4 drwx------ 4 nologin nologin 4096 8月 8 05:32 /home/nologin1831433 4 -rw-r--r-- 1 nologin nologin 18 10月 16 2014 /home/nologin/.bash_logout
-
查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
[root@centous1 ~]# find /etc/init.d/ -perm -113
原創文章,作者:forest,如若轉載,請注明出處:http://www.www58058.com/36405