find命令

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
其他使用案例:
  1. 查找/var/目录属主为root且属组为mail的所有文件。
[root@localhost tmp]# find /var -user root -a -group mail
/var/spool/mail
  1. 查找/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
  1. 查找/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
  1. 查找当前系统上没有属主或属组,其最近一个月内曾经被访问过的文件。
[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
  1. 查找/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
  1. 查找/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
  1. 查找/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
  1. 查找/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

你可能感兴趣的:(find命令)