find命令用来在指定的目录路径下查找符合条件的文件。find命令属于实时查找工具,通过遍历指定路径下的文件路径来完成文件查找,其具有精确查找、精准查找、查找速度较慢的特性。
命令格式:
find [选项]... [查找路径] [查找条件] [处理动作]
常用选项:
-L:表示跟踪到所有符号链接的源文件;
-H:表示只跟踪到命令行指定的符号链接的源文件;
-P:默认动作,表示不跟踪到符号链接的源文件;
查找路径:
默认情况下,查找路径为当前目录,显示当前目录下的所有文件;
查找条件:
-name "FILENAME":根据名字进行查找,支持globbing字符;
-iname "FILENAME":根据名字进行查找,忽略字符的大小写;
-user USER:根据文件的属主属性进行查找;
-group GROUP:根据文件的属组属性进行查找;
-uid UID:根据文件的UID进行查找;
-gid GID:根据文件的GID进行查找;
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
-regex:使用正则表达式进行搜索匹配;
-iregex:使用正则表达式进行搜索匹配,但是忽略大小写;
-type:根据文件类型进行查找,常见类型包括:
1. f:普通文件;
2. d:目录文件;
3. l:链接符号文件;
4. b:块设备文件;
5. c:字符设备文件;
6. s:套接字文件;
7. p:命令管道;
-size [+|-]#UNIT: 根据文件文件大小进行搜索,常用单位UNIT包括:k,M,G,如:
-size 5k,表示搜索文件的大小,大于4k,小于等于5K;
-size -5k,表示搜索文件的大小,小于等于4k;
-size +5k,表示搜索文件大小,大于5k;
-atime:以天为单位,对文件的最近访问时间进行匹配搜索,如:
-atime 2:其最近访问时间匹配的区间访问为,2<= atime < 3;
-atime -2:其最近访问时间匹配的区间访问为,atime < 2;
-atime +2:其最近访问时间匹配的区间访问为,2>=3;
-mtime:以天为单位,对文件的修改时间进行匹配搜索;
-ctime:以天为单位,对文件的更改时间进行匹配搜索;
-amin:以分钟为单位,对文件的最近访问时间进行匹配搜索;
-mtime:以分钟为单位,对文件的修改时间进行匹配搜索;
-ctime:以分钟为单位,对文件的更改时间进行匹配搜索;
-perm [/|-] MODE:根据给出的权限模式查找符合条件的文件;
MODE:精确查找与提供的MODE相匹配的文件;
/MODE:所有类型的用户(属主,属组,其他),只有其权限包含对其指定的任何一位权限即可,如:/222表示任何一类用户只要包含写权限即可匹配;/621表示只要属主有读或写权限,或属组有些权限,或其他组有执行权限的文件均满足条件;
-MODE:表示检查每一类用户的权限,确保每一类用户的权限都被包含在指定的权限中,如:-222表示每一类用户的权限只要小于或等于2就满足条件;-666表示匹配权限为666,650,550,111等;
注意:权限位如:700,-600,/202中的0表示不匹配,并不是说该类用户的没有任何权限;
处理动作:
-print:默认处理动作,输出结果至标准输出;
-ls:类似ls -l;
-delete:删除查找到的文件;
-fls PATH:将查找到的所有文件,以长格式保存至指定的文件中;
-ok COMMAND {} \;:对查找到的每一个文件,执行指定的命令;每个文件在执行命令前均会请求用户确认;其中{}表示前面找到的文件的引用;
-exec COMMAND {} \;:对查找到的每个文件执行指定的命令;
组合条件:
find命令可以使用与或非将多个条件组合在一起进行文件搜索,如:
搜索权限为777的普通文件:
[root@localhost tmp]# find /tmp -perm 777 -a -type f
/tmp/tesfile
搜索名字为charlie或uid为1100的文件或目录:
[root@localhost tmp]# find /tmp/ \( -user charlie -o -uid 1100 \) -ls
3012839 0 d--------- 2 charlie charlie 6 2月 10 19:45 /tmp/charlie
101349969 0 -rw-r--r-- 1 fedora centos 0 2月 10 19:47 /tmp/fedora
搜索属主既不属于charlie也不属于fedora的文件:
[root@localhost tmp]# find /tmp -not \( -user charlie -o -user fedora \) -ls
100663425 4 drwxrwxrwt 3 root root 4096 2月 10 19:48 /tmp
104487904 0 -rw-r--r-- 1 root root 0 2月 10 16:00 /tmp/charlie.bak.test.test
100663426 388 -rw-r--r-- 1 root root 396960 2月 10 19:25 /tmp/hello.bak.test.test
101083857 0 -rw-r--r-- 1 root root 0 2月 10 16:00 /tmp/world.bak.test.test
101349968 0 -rwxrwxrwx 1 root root 0 2月 10 19:43 /tmp/tesfile
其他使用案例:
- 查找/var/目录属主为root且属组为mail的所有文件。
[root@localhost tmp]# find /var -user root -a -group mail
/var/spool/mail
- 查找/usr目录下不属于root、bin、或hadoop的所有文件。
[root@localhost tmp]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
67549789 4 drwx------ 2 polkitd root 4096 1月 4 23:56 /usr/share/polkit-1/rules.d
106391737 16 -rwsr-sr-x 1 abrt abrt 15344 8月 10 2017 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
- 查找/etc/目录下最近一周内,文件被访问过的,且不属于root和不属于hadoop的文件。
[root@localhost tmp]# find /etc/ -atime -7 -a -not \( -user root -o -user charlie \) -ls
101132023 0 drwx------ 2 polkitd root 63 1月 4 23:38 /etc/polkit-1/rules.d
72314589 0 drwx--x--x 3 sssd sssd 19 1月 4 23:58 /etc/sssd
106511877 0 drwx--x--x 2 sssd sssd 6 12月 5 23:35 /etc/sssd/conf.d
- 查找当前系统上没有属主或属组,其最近一个月内曾经被访问过的文件。
[root@localhost tmp]# find / \( -nouser -o -nogroup \) -a -atime -30
find: ‘/proc/88262/task/88262/fd/6’: 没有那个文件或目录
find: ‘/proc/88262/task/88262/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/88262/fd/6’: 没有那个文件或目录
find: ‘/proc/88262/fdinfo/6’: 没有那个文件或目录
/var/spool/mail/wwww
/users/fedora
/users/fedora/.bash_logout
/users/fedora/.bash_profile
/users/fedora/.bashrc
/users/fedora/.mozilla
/users/fedora/.mozilla/extensions
/users/fedora/.mozilla/plugins
/users/fedora/.cache
/users/fedora/.cache/abrt
/users/fedora/.config
/users/fedora/.config/abrt
/users/fedora/.bash_history
/users/www
/users/www/.bash_logout
/users/www/.bash_profile
/users/www/.bashrc
/users/www/.mozilla
/users/www/.mozilla/extensions
/users/www/.mozilla/plugins
- 查找/etc/ 目录下不大于1M且类型为普通文件的所有文件。
[root@localhost ~]# find /etc/ -size 1M -a -type f | xargs ls -lh | more
-rw-r--r--. 1 root root 850 8月 10 2017 /etc/abrt/abrt-action-save-package-data.conf
-rw-r--r--. 1 root root 2.1K 8月 10 2017 /etc/abrt/abrt.conf
-rw-r--r--. 1 root root 31 8月 10 2017 /etc/abrt/gpg_keys.conf
-rw-r--r--. 1 root root 1.7K 8月 10 2017 /etc/abrt/plugins/CCpp.conf
-rw-r--r--. 1 root root 263 8月 10 2017 /etc/abrt/plugins/oops.conf
- 查找/etc/目录下所有用户都没有写权限的文件。
[root@localhost ~]# find /etc/ -not -perm /222 -ls
33745174 196 -r--r--r-- 1 root root 198453 1月 4 23:37 /etc/pki/ca-trust/extracted/java/cacerts
67290122 352 -r--r--r-- 1 root root 359773 1月 4 23:37 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
100877573 264 -r--r--r-- 1 root root 266702 1月 4 23:37 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
- 查找/etc/目录下至少有一类用户没有写权限。
[root@localhost ~]# find /etc/ -not -perm -222 -ls | more
33554561 12 drwxr-xr-x 139 root root 8192 2月 10 19:48 /etc/
33554562 4 -rw-r--r-- 1 root root 465 1月 4 23:37 /etc/fstab
33554563 0 -rw------- 1 root root 0 1月 4 23:37 /etc/crypttab
34533805 4 -rw-r--r-- 1 root root 75 2月 10 11:22 /etc/resolv.conf
67149963 0 drwxr-xr-x 10 root root 108 1月 4 23:50 /etc/pki
100663437 0 drwxr-xr-x 2 root root 101 1月 4 23:37 /etc/pki/rpm-gpg
100663438 4 -rw-r--r-- 1 root root 1690 12月 9 2015 /etc/pki/rpm-gpg/RPM-GPG-KEY-
CentOS-7
- 查找/etc/init.d/目录下,所有用户都有执行权限且其他用户有写权限的文件。
[root@localhost ~]# find /etc/init.d/ -perm -113 -ls
34533761 8 -rwxr-xrwx 1 root root 6630 2月 10 20:14 /etc/init.d/network.bak