find是一个非常有效的工具,他可以遍历指定目录甚至整个系统来查找某些文件或目录
find [查找路径] [查找条件] [处理动作]
一、查找路径
(1) ./ 指的是当前目录下开始查找
(2)/ 系统目录下开始查找
(3)/home/username/ 指定目下开始查找(绝对路径)
二、查找条件
1、根据名称查找
(1)-name :区分名称字母大小写
[root@nn nn]# find / -name mn
/usr/share/locale/mn
/usr/share/X11/xkb/symbols/mn
(2)-iname :不区分名称字母大小写
[root@nn ~]# find / -iname mn
/root/MN
/usr/share/locale/mn
/usr/share/X11/xkb/symbols/mn
2、根据文件从属关系查找
(1)-user :查找指定属主的文件
[root@nn ~]# find / -user gdm
/var/lib/gdm/.pulse
/var/lib/gdm/.pulse/default.pa
-rw-------. 1 gdm gdm 354 4月 11 2018 default.pa
[root@nn ~]# ll /var/lib/gdm/.pulse/default.pa
-rw-------. 1 gdm gdm 354 4月 11 2018 /var/lib/gdm/.pulse/default.pa
(2)-group :查找指定属组的文件
[root@nn MN]# find /root/MN/ -group root
/root/MN/
/root/MN/1
/root/MN/2
/root/MN/3
[root@nn MN]# ll
总用量 0
-rw-r--r--. 1 root root 0 8月 14 19:39 1
-rw-r--r--. 1 root root 0 8月 14 19:39 2
-rw-r--r--. 1 root root 0 8月 14 19:39 3
(3)-uid : 查找属主为指定的UID的文件
[root@master ~]# useradd -u 500 user11 #创建新用户uid为500
[root@master ~]# find / -uid 500 #查找uid为500的文件
/var/spool/mail/user11
/home/user11
/home/user11/.bash_logout
/home/user11/.bash_profile
/home/user11/.bashrc
(4)-gid :查找属组为指定的GID的文件
[root@master ~]# cat /etc/group #查看属组信息
docker:x:994:
user11:x:1000:
[root@master ~]# find / -gid 994 -ls #查找gid为944的文件
263628 0 srw-rw---- 1 root docker 0 8月 20 14:12 /run/docker.sock
(5)nouser :查找无属主文件
[root@nn ~]# find / -nouser | head -3/var/lib/docker/overlay2/de8233d5480dd675767f5b938329557152600440855f58fade5577c4e2e2b4a9/diff/usr/local/apache2
/var/lib/docker/overlay2/05f462df51b86abd8ca78aab436dc6693f498b25e1cdd848ac96f66a49cc5b55/diff/var/cache/apt/archives/partial
/var/lib/docker/overlay2/cf2c1c9b669135b78ed5aec64b9fb5a8f01002ed940a134a6e5b2deeefd1ac47/diff/usr/local/apache2
(6)nogroup :查找无数组文件
[root@nn ~]# find / -nogroup | tail -3
/var/lib/docker/overlay2/cd1cf0c250448680c6f18458d422f7c7a81e1dc9a0687d457d2c6c8f7658c56b/diff/var/log/lastlog
/var/lib/docker/overlay2/cd1cf0c250448680c6f18458d422f7c7a81e1dc9a0687d457d2c6c8f7658c56b/diff/var/log/wtmp
/var/lib/docker/overlay2/977f3e26c1d475d32c5b28a27078954570e9880dc217ed803aa0ea0c4447b29b/diff/usr/bin/ssh-agent
3、根据权限查找
(1)-perm mode :精确匹配(匹配的权限值必须完全相等)
[root@nn nn]# find /nn -perm 755 -ls
976546 4 drwxr-xr-x 8 root root 4096 7月 7 2017 /nn
48641923 0 drwxr-xr-x 2 root root 58 7月 7 2017 /nn/css
78622835 4 drwxr-xr-x 2 root root 4096 7月 7 2017 /nn/img
103528340 4 drwxr-xr-x 2 root root 4096 7月 7 2017 /nn/index
976452 0 drwxr-xr-x 2 root root 94 7月 7 2017 /nn/js
48641927 0 drwxr-xr-x 2 root root 112 7月 7 2017 /nn/php
78622854 0 drwxr-xr-x 2 root root 154 7月 7 2017 /nn/.idea
(2)-perm -mode :模糊查询(每一类用户(属主,属组,其他)的权限中的每一位(r,w,x)同时符合条件既满足,9位权限之间存在 “且” 关系);
[root@nn MN]# find / -perm -755 -ls | head
524352 0 drwxr-xr-x 4 root root 32 7月 24 11:06 /boot/efi/EFI
79 0 drwxr-xr-x 2 root root 62 7月 24 11:06 /boot/efi/EFI/BOOT
524353 12 drwxr-xr-x 2 root root 8192 7月 24 17:42 /boot/grub2/i386-pc
1069121 4 drwxr-xr-x 2 root root 4096 7月 24 17:42 /boot/grub2/locale
1572930 0 drwxr-xr-x 2 root root 25 7月 24 17:42 /boot/grub2/fonts
68 0 drwxr-xr-x 2 root root 27 7月 24 17:38 /boot/grub
74 6488 -rwxr-xr-x 1 root root 6639904 11月 9 2018 /boot/vmlinuz-3.10.0-957.el7.x86_64
77 6488 -rwxr-xr-x 1 root root 6639904 7月 24 17:41 /boot/vmlinuz-0-rescue-187c4b8ed94d49429dd12ab3ea220b47
3 0 drwxr-xr-x 20 root root 3340 8月 12 23:36 /dev
37126 0 lrwxrwxrwx 1 root root 3 8月 12 14:11 /dev/cdrom -> sr0
(3)-perm /mode :模糊查询(任何一类用户(属主,属组,其他)的权限中的任何一位(r,w,x)符合条件即满足,9位权限之间存在 “或” 关系);
[root@nn MN]# find /root/MN /perm 600 -ls
103529246 0 drwxr-xr-x 2 root root 33 8月 14 19:39 /root/MN
103533344 0 -rw-r--r-- 1 root root 0 8月 14 19:39 /root/MN/1
103533345 0 -rw-r--r-- 1 root root 0 8月 14 19:39 /root/MN/2
103533346 0 -rw-r--r-- 1 root root 0 8月 14 19:39 /root/MN/3
4、根据文件类型查询
-type : 根据不同的文件类型筛选
[root@nn MN]# find / -type f -ls | head -3
1069156 4 -rwx------ 1 root root 134 11月 10 2018 /boot/efi/EFI/centos/BOOT.CSV
1069157 4 -rwx------ 1 root root 134 11月 10 2018 /boot/efi/EFI/centos/BOOTX64.CSV
1069158 1128 -rwx------ 1 root root 1151864 11月 10 2018 /boot/efi/EFI/centos/MokManager.efi
[root@nn MN]# find / -type d -ls | head -3
64 0 dr-xr-xr-x 18 root root 234 8月 14 15:39 /
64 4 dr-xr-xr-x 5 root root 4096 8月 12 14:12 /boot
67 0 drwx------ 3 root root 17 11月 9 2018 /boot/efi
5、根据文件大小查询
常用单位: k,M, G
(1)-size +#unit : (#,∞ )大于#的文件
[root@nn MN]# ll -h
-rw-r--r--. 1 root root 4.1K 8月 15 00:55 1
-rw-r--r--. 1 root root 3.4K 8月 15 00:55 2
-rw-r--r--. 1 root root 2 8月 15 00:33 3
[root@nn MN]# find /root/MN/ -size +4k #大于4k
/root/MN/1
(2)-size -#unit : [0,#-1] 大于等于0,小于等于#-1
[root@nn MN]# ll -h
-rw-r--r--. 1 root root 4.1K 8月 15 00:55 1
-rw-r--r--. 1 root root 3.4K 8月 15 00:55 2
-rw-r--r--. 1 root root 2 8月 15 00:33 3
[root@nn MN]# find /root/MN/ -size -4k #大于等于0k小于3k
/root/MN/
/root/MN/3
[root@nn MN]# find /root/MN/ -size -3k #大于0k小于等于2k
/root/MN/
/root/MN/3
[root@nn MN]# find /root/MN/ -size -5k #大于0k夏鸥等于4k
/root/MN/
/root/MN/2
/root/MN/3
(3)-size #unit :(#-1,#] 大于#-1,小于等于#
[root@nn MN]# ll -h
-rw-r--r--. 1 root root 4.1K 8月 15 00:55 1
-rw-r--r--. 1 root root 3.4K 8月 15 00:55 2
-rw-r--r--. 1 root root 2 8月 15 00:33 3
[root@nn MN]# find /root/MN/ -size 3k #大于2k小于3k
[root@nn MN]# find /root/MN/ -size 4k #大于3K小于4k
/root/MN/2
[root@nn MN]# find /root/MN/ -size 5k #大于4k小于5k
/root/MN/1
6、根据时间查找
n为n*24小时 ,即以天为单位。通过以下命令 可查看文件的这三个时间戳
stat filename
(1)-atime :access time :文件的最后访问时间 cat
[root@nn ~]# find / -atime +2 | head -1 #查找最近一次访问时间在两天以前的文件
/boot/efi/EFI/centos/BOOT.CSV
[root@nn ~]# stat /boot/efi/EFI/centos/BOOT.CSV #查看文件时间戳
文件:"/boot/efi/EFI/centos/BOOT.CSV"
大小:134 块:8 IO 块:4096 普通文件
设备:801h/2049d Inode:1069156 硬链接:1
权限:(0700/-rwx------) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:boot_t:s0
最近访问:2018-11-10 01:53:06.000000000 +0800 #所找到的文件符合条件
最近更改:2018-11-10 01:53:06.000000000 +0800
最近改动:2019-07-24 11:06:31.939673005 +0800
创建时间:-
(2)-ctime:change time :文件最后改动时间,这里改动是指文件内容发生修改或者文件权限,路径发生改变。 echo chmod chown chgrp
[root@nn ~]# find / -ctime -1 | head -3 #查找一天内被改动的文件
/
/dev/char
/dev/char/189:137
[root@nn ~]# stat /dev/char #查看时间
文件:"/dev/char"
大小:3080 块:0 IO 块:4096 目录
设备:5h/5d Inode:9718 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:device_t:s0
最近访问:2019-08-15 23:57:17.386863729 +0800
最近更改:2019-08-15 23:20:23.209021653 +0800
最近改动:2019-08-15 23:20:23.209021653 +0800 #符合查找条件的文件
创建时间:-
(3)-mtime:modify time :文件最后更改时间,指的是文件内容发生修改的最后时间。 echo
[root@nn ~]# find / -mtime 1 | head -3 #查找从现在起往前算一天更改过的文件
/proc/sys/fs/binfmt_misc
/proc/sys/fs/binfmt_misc/register
/proc/sys/fs/binfmt_misc/status
[root@nn ~]# stat /proc/sys/fs/binfmt_misc #查看时间
文件:"/proc/sys/fs/binfmt_misc"
大小:0 块:0 IO 块:4096 目录
设备:4ch/76d Inode:1 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:binfmt_misc_fs_t:s0
最近访问:2019-08-16 00:01:12.588839041 +0800
最近更改:2019-08-14 19:16:20.741997870 +0800 #符合查找条件的文件
最近改动:2019-08-14 19:16:20.741997870 +0800
创建时间:-
(4)-amin 、 -cmin 、 -mmin 是以分钟为单位,用法和上面的一样
三、处理动作
1、-ls :类似于对查找到的文件执行 “ls -l”命令;
2、-ok COMMAND {} \ ; :执行命令,交互式
3、-exec COMMAND {} \ ; :执行命令
4、| xargs COMMAND : 执行命令
四、多个选项共同使用
1、-a :与,同时满足,如果组合条件中只有 -a ,可以省略
2、-o :或,只需要满足其一即可,优先级比 -a 低,如果要先执行,需要加(),()需要转译,即 \(··· \)
3、-not :取反
4、非A且非B : -not A -a -not B = -not \( A -o B \)
5、非A或非B :-not A -o -not B = -not \( A -a B \)