第二十三章 Linux系统Find命令详解
一、基本概述
ind命令的功能是根据给定的路径和条件查找相关文件或目录,可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能,是系统管理员和普通用户日常工作必须掌握的命令之一。
find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。
语法格式:find [路径] [参数]
二、常用参数
-name | 匹配名称 |
---|---|
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
-type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec …… {}; | 后面可跟用于进一步处理搜索结果的命令 |
-i | 忽略大小写 -iname |
通配符 | * 表示所有 ?只能匹配任意一个字符 [] 匹配中括号中的任意一个字符 [^] 排除中括号中的字符 |
三、常见示例
精确查找
[root@jindada ~]# find / -name "hostnamectl"
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
查找以什么开头的
[root@jindada ~]# find / -name "hostnamectl*"
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
以什么为结尾的
[root@jindada ~]# find / -name "*hostnamectl"
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
查找包含某个字符串的查找
[root@jindada ~]# touch /tmp/rrhostnamectlfg
[root@jindada ~]# find / -name "*hostnamectl*"
/tmp/rrhostnamectlfg
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
忽略大小写
[root@jindada ~]# touch Hostnamectl
[root@jindada ~]# find / -name "*hostnamectl*"
/tmp/rrhostnamectlfg
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
[root@jindada ~]# find / -iname "*hostnamectl*"
/root/Hostnamectl
/tmp/rrhostnamectlfg
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
通配符匹配
[root@jindada ~]# mkdir test
[root@jindada ~]# touch test/hostnamectl{a..g}
[root@jindada ~]# touch test/hostnamectl{o..t}
[root@jindada ~]# touch test/hostnamectl{o..t}123
[root@jindada ~]# ll test/
total 0
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectla
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlb
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlc
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectld
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectle
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlf
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlg
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlo
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlo123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlp
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlp123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlq
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlq123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlr
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlr123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectls
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectls123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlt
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlt123
[root@jindada ~]# find /root -name "hostnamectl*"
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
/root/test/hostnamectle
/root/test/hostnamectlf
/root/test/hostnamectlg
/root/test/hostnamectlo
/root/test/hostnamectlp
/root/test/hostnamectlq
/root/test/hostnamectlr
/root/test/hostnamectls
/root/test/hostnamectlt
/root/test/hostnamectlo123
/root/test/hostnamectlp123
/root/test/hostnamectlq123
/root/test/hostnamectlr123
/root/test/hostnamectls123
/root/test/hostnamectlt123
[root@jindada ~]# find /root -name "hostnamectl?"
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
/root/test/hostnamectle
/root/test/hostnamectlf
/root/test/hostnamectlg
/root/test/hostnamectlo
/root/test/hostnamectlp
/root/test/hostnamectlq
/root/test/hostnamectlr
/root/test/hostnamectls
/root/test/hostnamectlt
[root@jindada ~]# find /root -name "hostnamectl[abcd]"
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
[root@jindada ~]# find /root -name "hostnamectl[^b]"
/root/test/hostnamectla
/root/test/hostnamectlc
/root/test/hostnamectld
/root/test/hostnamectle
/root/test/hostnamectlf
/root/test/hostnamectlg
/root/test/hostnamectlo
/root/test/hostnamectlp
/root/test/hostnamectlq
/root/test/hostnamectlr
/root/test/hostnamectls
/root/test/hostnamectlt
四、根据文件类型查找
1.选项
选项:
-type #根据类型进行查找
f #普通文件
d #目录
l #软链接
s #套接字 socket文件
p #管道文件
b #块设备 硬盘 硬盘分区 镜像光盘
c #字符设备
2.查找所有的普通文件,包括隐藏文件
[root@jindada ~]# find /root -type f
/root/.bash_logout
/root/.bash_profile
/root/.cshrc
/root/.tcshrc
/root/.bash_history
/root/.lesshst
/root/.viminfo
/root/Hostname
/root/Hostnamectl
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
3.查找所有的目录 包括隐藏目录 也包含自己的本身
[root@jindada ~]# find /root -type d
/root
/root/test
/root/.pki
/root/.pki/nssdb
4.查找所有目录,包括软连接
tree命令会把软链接也统计成目录 软链接的源文件是目录 find不会
[root@jindada ~]# tree -ad /root
/root
├── opt -> /opt/
├── .pki
│ └── nssdb
└── test
4 directories
[root@jindada ~]# find /root -type l
/root/opt
5.查找所有目录,包括套接字
[root@jindada ~]# find /dev -type s
/dev/log
6.查找所有目录,包括管道文件
[root@jindada ~]# find /run -type p
/run/systemd/inhibit/1.ref
/run/systemd/sessions/1.ref
/run/systemd/initctl/fifo
7.查找所有目录,包括块设备
[root@jindada ~]# find /dev -type b
/dev/sda3
/dev/sda2
/dev/sda1
/dev/sda
/dev/sr0
8.查找所有目录,包括字符设备
[root@jindada ~]# find /dev -type c
/dev/vsock
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
五、根据文件大小查找
1.选项
选项:
-size #根据文件大小查找
+n #大于
-n #小于
n #精确匹配
b k M G #单位
2.查找空文件
[root@jindada ~]# find /var/log/ -size 0b
/var/log/tallylog
/var/log/anaconda/ks-script-3PCKae.log
/var/log/boot.log
/var/log/firewalld
/var/log/maillog-20200726
/var/log/spooler-20200726
/var/log/spooler
/var/log/spooler-20200716
/var/log/nginx/error.log
/var/log/nginx/access.log
/var/log/spooler-20200723
[root@jindada ~]# ll /var/log/tallylog
-rw-------. 1 root root 0 Jul 6 02:13 /var/log/tallylog
[root@jindada ~]# find /var/log/ -size -1k -ls
67159586 0 -rw------- 1 root root 0 Jul 6 02:13 /var/log/tallylog
67563450 0 -rw------- 1 root root 0 Jul 6 02:17 /var/log/anaconda/ks-script-3PCKae.log
67563454 0 -rw------- 1 root root 0 Jul 27 17:35 /var/log/boot.log
67563460 0 -rw-r--r-- 1 root root 0 Jul 6 02:17 /var/log/firewalld
67588777 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/maillog-20200726
67588781 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/spooler-20200726
67588808 0 -rw------- 1 root root 0 Jul 26 03:33 /var/log/spooler
67528019 0 -rw------- 1 root root 0 Jul 6 02:14 /var/log/spooler-20200716
134348936 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/error.log
134348938 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/access.log
67113674 0 -rw------- 1 root root 0 Jul 16 03:25 /var/log/spooler-20200723
[root@jindada ~]# find /var/log/ -size 1k -ls #字节的大小在find中四舍五入
67160720 4 -rw-r--r-- 1 root root 193 Jul 6 02:13 /var/log/grubby_prune_debug
681834 0 drwxr-xr-x 2 root root 23 Jul 6 02:17 /var/log/tuned
714023 0 drwx------ 2 root root 23 Jul 6 02:17 /var/log/audit
67284924 0 drwxr-xr-x 2 root root 176 Jul 6 02:17 /var/log/anaconda
134317666 0 drwxr-xr-x 2 root root 6 Jul 6 02:17 /var/log/rhsm
67112876 4 -rw-r--r-- 1 root root 696 Jul 6 09:06 /var/log/vmware-network.5.log
67112867 4 -rw-r--r-- 1 root root 678 Jul 13 16:29 /var/log/vmware-network.2.log
67112878 4 -rw-r--r-- 1 root root 674 Jul 6 17:07 /var/log/vmware-network.4.log
67112882 4 -rw-r--r-- 1 root root 678 Jul 20 19:45 /var/log/vmware-network.1.log
67528018 4 -rw------- 1 root root 558 Jul 13 16:29 /var/log/maillog-20200716
134348871 0 drwxrwx--- 2 nginx root 41 Jul 20 19:50 /var/log/nginx
67588805 4 -rw------- 1 root root 186 Jul 27 16:30 /var/log/maillog
67588807 4 -rw------- 1 root root 679 Jul 27 16:30 /var/log/secure
67112916 4 -rw-r--r-- 1 root root 678 Jul 27 16:29 /var/log/vmware-network.log
[root@jindada ~]# find /var/log/ -type f -size 20k
/var/log/cron-20200726
[root@jindada ~]# find /var/log/ -type f -size 20k -ls
67588776 20 -rw------- 1 root root 19815 Jul 26 03:33 /var/log/cron-20200726
[root@jindada ~]# find /var/log/ -type f -size 6k -ls
75 8 -rw-r--r-- 1 root root 6085 Jul 27 16:29 /var/log/tuned/tuned.log
67113677 8 -rw------- 1 root root 6005 Jul 27 18:01 /var/log/cron
67528017 8 -rw------- 1 root root 5865 Jul 13 16:29 /var/log/secure-20200716
67112870 8 -rw-r--r-- 1 root root 5650 Jul 6 08:52 /var/log/vmware-network.9.log
67112865 8 -rw-r--r-- 1 root root 5650 Jul 9 10:36 /var/log/vmware-network.3.log
3.根据范围进行查找
[root@jindada ~]# find /var/log/ -type f -size +100k -size -1000k
/var/log/anaconda/syslog
/var/log/anaconda/packaging.log
/var/log/anaconda/storage.log
/var/log/dmesg.old
/var/log/messages-20200716
/var/log/messages-20200723
/var/log/messages
/var/log/dmesg
[root@jindada ~]# find /var/log/ -type f -size +100k -size -1000k -ls
67496291 276 -rw------- 1 root root 281510 Jul 6 02:17 /var/log/anaconda/syslog
67563447 112 -rw------- 1 root root 110647 Jul 6 02:17 /var/log/anaconda/packaging.log
67563448 124 -rw------- 1 root root 124184 Jul 6 02:17 /var/log/anaconda/storage.log
67112877 120 -rw-r--r-- 1 root root 122832 Jul 20 19:45 /var/log/dmesg.old
67528016 388 -rw------- 1 root root 395555 Jul 16 03:25 /var/log/messages-20200716
67113672 148 -rw------- 1 root root 148158 Jul 23 03:13 /var/log/messages-20200723
67588806 120 -rw------- 1 root root 122869 Jul 27 18:01 /var/log/messages
67112864 120 -rw-r--r-- 1 root root 122838 Jul 27 16:29 /var/log/dmesg
#四舍五入 1k
[root@jindada ~]# find /var/log/ -type f -size 5k
/var/log/vmware-network.8.log
[root@jindada ~]# find /var/log/ -type f -size 5k -ls
67112873 8 -rw-r--r-- 1 root root 4127 Jul 6 09:05 /var/log/vmware-network.8.log
#以M为单位查找时,所有小于1M的文件都四舍五入到1M
[root@jindada ~]# find /var/log/ -type f -size 1M -ls
67160720 4 -rw-r--r-- 1 root root 193 Jul 6 02:13 /var/log/grubby_prune_debug
67284922 48 -rw-rw-r-- 1 root utmp 45696 Jul 27 16:30 /var/log/wtmp
67284923 8 -rw------- 1 root utmp 6912 Jul 23 12:09 /var/log/btmp
75 8 -rw-r--r-- 1 root root 6085 Jul 27 16:29 /var/log/tuned/tuned.log
67495714 28 -rw------- 1 root root 26591 Jul 6 02:17 /var/log/anaconda/anaconda.log
67496291 276 -rw------- 1 root root 281510 Jul 6 02:17 /var/log/anaconda/syslog
67563444 24 -rw------- 1 root root 21872 Jul 6 02:17 /var/log/anaconda/X.log
67563445 32 -rw------- 1 root root 29721 Jul 6 02:17 /var/log/anaconda/program.log
67563447 112 -rw------- 1 root root 110647 Jul 6 02:17 /var/log/anaconda/packaging.log
67563448 124 -rw------- 1 root root 124184 Jul 6 02:17 /var/log/anaconda/storage.log
67563449 4 -rw------- 1 root root 4017 Jul 6 02:17 /var/log/anaconda/ifcfg.log
67563456 12 -rw-r--r-- 1 root root 10054 Jul 27 16:29 /var/log/vmware-vmsvc.log
67563457 8 -rw-r--r-- 1 root root 6934 Jul 27 16:29 /var/log/vmware-vgauthsvc.log.0
67113677 8 -rw------- 1 root root 6005 Jul 27 18:01 /var/log/cron
67588778 12 -rw------- 1 root root 9327 Jul 26 03:33 /var/log/messages-20200726
67588779 16 -rw------- 1 root root 13606 Jul 24 12:11 /var/log/secure-20200726
67112873 8 -rw-r--r-- 1 root root 4127 Jul 6 09:05 /var/log/vmware-network.8.log
67112876 4 -rw-r--r-- 1 root root 696 Jul 6 09:06 /var/log/vmware-network.5.log
67112867 4 -rw-r--r-- 1 root root 678 Jul 13 16:29 /var/log/vmware-network.2.log
67588799 8 -rw------- 1 root root 8015 Jul 27 17:35 /var/log/boot.log-20200727
67112877 120 -rw-r--r-- 1 root root 122832 Jul 20 19:45 /var/log/dmesg.old
67112871 4 -rw-r--r-- 1 root root 3986 Jul 6 09:05 /var/log/vmware-network.7.log
67112878 4 -rw-r--r-- 1 root root 674 Jul 6 17:07 /var/log/vmware-network.4.log
67112882 4 -rw-r--r-- 1 root root 678 Jul 20 19:45 /var/log/vmware-network.1.log
67112913 20 -rw------- 1 root root 16395 Jul 10 03:20 /var/log/boot.log-20200710
67112924 4 -rw------- 1 root root 3925 Jul 22 08:51 /var/log/yum.log
67112866 8 -rw------- 1 root root 7969 Jul 13 17:29 /var/log/boot.log-20200713
67112869 32 -rw------- 1 root root 32040 Jul 16 03:25 /var/log/cron-20200716
67528018 4 -rw------- 1 root root 558 Jul 13 16:29 /var/log/maillog-20200716
67528016 388 -rw------- 1 root root 395555 Jul 16 03:25 /var/log/messages-20200716
67528017 8 -rw------- 1 root root 5865 Jul 13 16:29 /var/log/secure-20200716
67112870 8 -rw-r--r-- 1 root root 5650 Jul 6 08:52 /var/log/vmware-network.9.log
67491686 8 -rw------- 1 root root 8015 Jul 20 20:25 /var/log/boot.log-20200720
67113669 40 -rw------- 1 root root 37990 Jul 23 03:13 /var/log/cron-20200723
67113670 4 -rw------- 1 root root 1856 Jul 22 11:11 /var/log/maillog-20200723
67113672 148 -rw------- 1 root root 148158 Jul 23 03:13 /var/log/messages-20200723
67113673 48 -rw------- 1 root root 48914 Jul 22 12:22 /var/log/secure-20200723
67588776 20 -rw------- 1 root root 19815 Jul 26 03:33 /var/log/cron-20200726
67588805 4 -rw------- 1 root root 186 Jul 27 16:30 /var/log/maillog
67588806 120 -rw------- 1 root root 122869 Jul 27 18:01 /var/log/messages
67588807 4 -rw------- 1 root root 679 Jul 27 16:30 /var/log/secure
67112864 120 -rw-r--r-- 1 root root 122838 Jul 27 16:29 /var/log/dmesg
67112875 4 -rw-r--r-- 1 root root 3986 Jul 6 09:06 /var/log/vmware-network.6.log
67112865 8 -rw-r--r-- 1 root root 5650 Jul 9 10:36 /var/log/vmware-network.3.log
67112916 4 -rw-r--r-- 1 root root 678 Jul 27 16:29 /var/log/vmware-network.log
[root@jindada ~]# find /var/log/ -type f -size -1M -ls
67159586 0 -rw------- 1 root root 0 Jul 6 02:13 /var/log/tallylog
67563450 0 -rw------- 1 root root 0 Jul 6 02:17 /var/log/anaconda/ks-script-3PCKae.log
67563454 0 -rw------- 1 root root 0 Jul 27 17:35 /var/log/boot.log
67563460 0 -rw-r--r-- 1 root root 0 Jul 6 02:17 /var/log/firewalld
67588777 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/maillog-20200726
67588781 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/spooler-20200726
67588808 0 -rw------- 1 root root 0 Jul 26 03:33 /var/log/spooler
67528019 0 -rw------- 1 root root 0 Jul 6 02:14 /var/log/spooler-20200716
134348936 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/error.log
134348938 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/access.log
67113674 0 -rw------- 1 root root 0 Jul 16 03:25 /var/log/spooler-20200723
[root@jindada ~]# find /var/log/ -type f -size 2M -ls
67263633 40 -rw-r--r-- 1 root root 1946764 Jul 27 16:30 /var/log/lastlog
714345 1436 -rw------- 1 root root 1468869 Jul 27 18:01 /var/log/audit/audit.log
67563451 1520 -rw------- 1 root root 1552657 Jul 6 02:17 /var/log/anaconda/journal.log
[root@jindada ~]# ll -h /var/log/lastlog
-rw-r--r--. 1 root root 1.9M Jul 27 16:30 /var/log/lastlog
[root@jindada ~]# ll -h /var/log/audit/audit.log
-rw-------. 1 root root 1.5M Jul 27 18:01 /var/log/audit/audit.log
[root@jindada ~]# find /var/log/ -type f -size +2M -ls
67113676 5704 -rw-r--r-- 1 root root 5840292 Jul 27 17:56 /var/log/test.log
[root@jindada ~]# find /var/log/ -type f -size 6M -ls
67113676 5704 -rw-r--r-- 1 root root 5840292 Jul 27 17:56 /var/log/test.log
[root@jindada ~]# find /var/log/ -type f -size +2M -size -7M
/var/log/test.log
[root@jindada ~]# dd </dev/zero >/var/log/123.log bs=100M count=13
13+0 records in
13+0 records out
1363148800 bytes (1.4 GB) copied, 28.178 s, 48.4 MB/s
[root@jindada ~]# ll /var/log/123.log
-rw-r--r-- 1 root root 1363148800 Jul 27 18:17 /var/log/123.log
[root@jindada ~]# ll /var/log/123.log -h
-rw-r--r-- 1 root root 1.3G Jul 27 18:17 /var/log/123.log
[root@jindada ~]# find /var/log/ -type f -size +1G -ls
67588811 1331200 -rw-r--r-- 1 root root 1363148800 Jul 27 18:17 /var/log/123.log
[root@jindada ~]# find /var/log/ -type f -size 2G -ls
67588811 1331200 -rw-r--r-- 1 root root 1363148800 Jul 27 18:17 /var/log/123.log
六、根据文件时间查找
1.选项
选项:
-mtime #最后修改时间
+n #多少天以前
-n #多少天以内
n #具体某一天
2.环境准备
[root@jindada ~]# for i in {01..27};do date -s 2020/07/$i && touch data/file-${i}.txt;done
[root@jindada ~]#
[root@jindada ~]# ntpdate ntp.aliyun.com
[root@jindada ~]# ll data/
total 0
-rw-r--r-- 1 root root 0 Jul 10 00:00 file-10.txt
-rw-r--r-- 1 root root 0 Jul 11 00:00 file-11.txt
-rw-r--r-- 1 root root 0 Jul 12 00:00 file-12.txt
-rw-r--r-- 1 root root 0 Jul 13 00:00 file-13.txt
-rw-r--r-- 1 root root 0 Jul 14 00:00 file-14.txt
-rw-r--r-- 1 root root 0 Jul 15 00:00 file-15.txt
-rw-r--r-- 1 root root 0 Jul 16 00:00 file-16.txt
-rw-r--r-- 1 root root 0 Jul 17 00:00 file-17.txt
-rw-r--r-- 1 root root 0 Jul 18 00:00 file-18.txt
-rw-r--r-- 1 root root 0 Jul 19 00:00 file-19.txt
-rw-r--r-- 1 root root 0 Jul 1 00:00 file-1.txt
-rw-r--r-- 1 root root 0 Jul 20 00:00 file-20.txt
-rw-r--r-- 1 root root 0 Jul 21 00:00 file-21.txt
-rw-r--r-- 1 root root 0 Jul 22 00:00 file-22.txt
-rw-r--r-- 1 root root 0 Jul 23 00:00 file-23.txt
-rw-r--r-- 1 root root 0 Jul 24 00:00 file-24.txt
-rw-r--r-- 1 root root 0 Jul 25 00:00 file-25.txt
-rw-r--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
-rw-r--r-- 1 root root 0 Jul 2 00:00 file-2.txt
-rw-r--r-- 1 root root 0 Jul 3 00:00 file-3.txt
-rw-r--r-- 1 root root 0 Jul 4 00:00 file-4.txt
-rw-r--r-- 1 root root 0 Jul 5 00:00 file-5.txt
-rw-r--r-- 1 root root 0 Jul 6 00:00 file-6.txt
-rw-r--r-- 1 root root 0 Jul 7 00:00 file-7.txt
-rw-r--r-- 1 root root 0 Jul 8 00:00 file-8.txt
-rw-r--r-- 1 root root 0 Jul 9 00:00 file-9.txt
3.查找7天以前的文件
[root@jindada ~]# find /root -type f -mtime +7
/root/.bash_logout
/root/.cshrc
/root/.tcshrc
/root/.lesshst
/root/.vimrc
/root/data/file-1.txt
/root/data/file-2.txt
/root/data/file-3.txt
/root/data/file-4.txt
/root/data/file-5.txt
/root/data/file-6.txt
/root/data/file-7.txt
/root/data/file-8.txt
/root/data/file-9.txt
/root/data/file-10.txt
/root/data/file-11.txt
/root/data/file-12.txt
/root/data/file-13.txt
/root/data/file-14.txt
/root/data/file-15.txt
/root/data/file-16.txt
/root/data/file-17.txt
/root/data/file-18.txt
/root/data/file-19.txt
4.查找第7天的文件
[root@jindada ~]# find /root -type f -mtime 7
/root/data/file-20.txt
5.查找7天以内的文件
[root@jindada ~]# find /root -type f -mtime -7
/root/.bash_profile
/root/.bash_history
/root/.viminfo
/root/.bashrc
/root/data/file-21.txt
/root/data/file-22.txt
/root/data/file-23.txt
/root/data/file-24.txt
/root/data/file-25.txt
/root/data/file-26.txt
/root/data/file-27.txt
6.查找3天前的文件并删除
[root@jindada ~]# find /root -type f -mtime +3 |xargs rm -f
7.查找指定目录下1天内大于1G的文件并删除
[root@jindada ~]# find /var/log/ -type f -size +1G -mtime -1 | xargs rm -f
七、根据文件权限查找
1.选项
选项:
-perm #根据权限查找
-421 #包含这些权限
421 #精确匹配
/421 #包含其中的某个权限 三个身份中满足一个则匹配
! #取反
2.排除普通的文件的其他所有类型文件
[root@jindada ~]# find /root -type f
/root/.bash_history
/root/.viminfo
/root/data/file-24.txt
/root/data/file-25.txt
/root/data/file-26.txt
/root/data/file-27.txt
[root@jindada ~]# find /root ! -type f #排除普通的文件的其他所有类型文件
/root
/root/.pki
/root/.pki/nssdb
/root/data
3.精确匹配
[root@jindada ~]# chmod 633 data/file-24.txt
[root@jindada ~]# ll data/
total 0
-rw--wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-rw-r--r-- 1 root root 0 Jul 25 00:00 file-25.txt
-rw-r--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@jindada ~]# find data/ -type f -perm 644
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@jindada ~]# find data/ -type f -perm 633
data/file-24.txt
4.满足查找最低权限 每个身份都有满足
[root@jindada ~]# find data/ -type f -perm -644
data/file-26.txt
data/file-27.txt
[root@jindada ~]# ll data/
total 0
-rw--wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-r--r--r-- 1 root root 0 Jul 25 00:00 file-25.txt
-rw-r--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@jindada ~]# chmod 666 data/file-25.txt
[root@jindada ~]# find data/ -type f -perm -644
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@jindada ~]# chmod 744 data/file-26.txt
[root@jindada ~]# find data/ -type f -perm -644
data/file-25.txt
data/file-26.txt
data/file-27.txt
5.满足一个身份的某个权限就可以
[root@jindada ~]# ll data/
total 0
-rw--wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-rw-rw-rw- 1 root root 0 Jul 25 00:00 file-25.txt
-rwxr--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@jindada ~]# find data/ -type f -perm /644
data/file-24.txt
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@jindada ~]# chmod 333 data/file-24.txt
[root@jindada ~]# find data/ -type f -perm /644
data/file-24.txt
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@jindada ~]# ll data/
total 0
--wx-wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-rw-rw-rw- 1 root root 0 Jul 25 00:00 file-25.txt
-rwxr--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@jindada ~]# find data/ -type f -perm /444
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@jindada ~]# find / -perm -4000 -ls
201418870 24 -rws--x--x 1 root root 24048 Oct 31 2018 /usr/bin/chfn
201418873 24 -rws--x--x 1 root root 23960 Oct 31 2018 /usr/bin/chsh
201369302 32 -rwsr-xr-x 1 root root 32096 Oct 31 2018 /usr/bin/fusermount
201418745 80 -rwsr-xr-x 1 root root 78272 Oct 31 2018 /usr/bin/gpasswd
[root@jindada ~]# find / -perm -2000 -ls
201368725 16 -r-xr-sr-x 1 root tty 15344 Jun 10 2014 /usr/bin/wall
201418931 20 -rwxr-sr-x 1 root tty 19624 Oct 31 2018 /usr/bin/write
201614897 376 ---x--s--x 1 root nobody 382240 Apr 11 2018 /usr/bin/ssh-agent
201682585 40 -rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
682454 216 -rwxr-sr-x 1 root postdrop 218632 Oct 31 2018 /usr/sbin/postdrop
[root@jindada ~]# find / -perm -1000 -ls
67108936 4 drwxrwxrwt 16 root root 4096 Jul 27 2020 /tmp
187047 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.font-unix
67284921 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.XIM-unix
134469085 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.ICE-unix
201458049 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.X11-unix
八、根据文件属主属组查找
1.选项
选项:
-user #根据属主
-group #根据属组
-nouser #没有属主
-nogroup #没有属组
2.查找属主为ops01
[root@jindada ~]# find / -user ops01 -ls
201696842 0 -rw-rw---- 1 ops01 mail 0 Jul 24 09:08 /var/spool/mail/ops01
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
820161 4 -rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 /data/ops01.log
3.查找属主为ops01并且 属组为ops01
[root@jindada ~]# find / -user ops01 -group ops01 -ls
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
-a 并且
[root@jindada ~]# find / -user ops01 -a -group ops01 -ls
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
[root@jindada ~]# find / -user ops01 -a -group ops_group -ls
67495942 0 --wx-wx-wx 1 ops01 ops_group 0 Jul 24 00:00 /root/data/file-24.txt
820161 4 -rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 /data/ops01.log
# 括号前后要有空格 也需要使用转义字符进行转义 -o 或者
[root@jindada ~]# find / \( -user ops01 -o -group ops_group \) -ls
67495942 0 --wx-wx-wx 1 ops01 ops_group 0 Jul 24 00:00 /root/data/file-24.txt
201696842 0 -rw-rw---- 1 ops01 mail 0 Jul 24 09:08 /var/spool/mail/ops01
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
818813 0 drwxrws--- 3 root ops_group 121 Jul 20 10:48 /data
820160 4 -rw-r--r-- 1 root ops_group 5 Jul 24 09:14 /data/root.log
820161 4 -rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 /data/ops01.log
820162 4 -rw-rw-r-- 1 ops02 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 ops02 ops_group 6 Jul 24 09:21 /data/test
820215 0 -rw-r--r-- 1 root ops_group 0 Jul 20 10:48 /data/file-20.log
4.查找没有属主
[root@jindada ~]# find / -nouser -ls
201729427 0 -rw-rw---- 1 666 mail 0 Jul 21 16:47 /var/spool/mail/user02
201685422 0 -rw-rw---- 1 6666 mail 0 Jul 21 16:40 /var/spool/mail/user123
5.查找没有属组的
[root@jindada ~]# find / -nogroup -ls
134355712 0 -rw------- 1 root 1013 0 Jul 22 11:11 /var/db/sudo/lectured/qiudao
6.没有属主也没有属组的
[root@jindada ~]# userdel ops02
[root@jindada ~]# ll data/file-26.txt
67255910 0 -rwxr--r-- 1 1045 1047 0 Jul 26 00:00 /root/data/file-26.txt
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
134356977 4 -rw-r--r-- 1 1045 1047 18 Oct 31 2018 /home/ops02/.bash_logout
134356978 4 -rw-r--r-- 1 1045 1047 193 Oct 31 2018 /home/ops02/.bash_profile
134356979 4 -rw-r--r-- 1 1045 1047 231 Oct 31 2018 /home/ops02/.bashrc
134356980 4 -rw------- 1 1045 1047 276 Jul 24 09:49 /home/ops02/.bash_history
134356968 4 -rw------- 1 1045 1047 637 Jul 24 09:16 /home/ops02/.viminfo
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
[root@jindada ~]# find / \( -nouser -o -nogroup \) -ls
67255910 0 -rwxr--r-- 1 1045 1047 0 Jul 26 00:00 /root/data/file-26.txt
134355712 0 -rw------- 1 root 1013 0 Jul 22 11:11 /var/db/sudo/lectured/qiudao
201729427 0 -rw-rw---- 1 666 mail 0 Jul 21 16:47 /var/spool/mail/user02
201685422 0 -rw-rw---- 1 6666 mail 0 Jul 21 16:40 /var/spool/mail/user123
201696843 0 -rw-rw---- 1 1045 mail 0 Jul 24 09:08 /var/spool/mail/ops02
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
134356977 4 -rw-r--r-- 1 1045 1047 18 Oct 31 2018 /home/ops02/.bash_logout
134356978 4 -rw-r--r-- 1 1045 1047 193 Oct 31 2018 /home/ops02/.bash_profile
134356979 4 -rw-r--r-- 1 1045 1047 231 Oct 31 2018 /home/ops02/.bashrc
134356980 4 -rw------- 1 1045 1047 276 Jul 24 09:49 /home/ops02/.bash_history
134356968 4 -rw------- 1 1045 1047 637 Jul 24 09:16 /home/ops02/.viminfo
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
九、根据目录层级查找
1.选项
选项:
-maxdepth #最大的目录层级 tree -L
2.常用示例
[root@jindada ~]# find / -maxdepth 2 \( -nouser -o -nogroup \) -ls
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
[root@jindada ~]# find / -maxdepth 3 \( -nouser -o -nogroup \) -ls
67255910 0 -rwxr--r-- 1 1045 1047 0 Jul 26 00:00 /root/data/file-26.txt
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
134356977 4 -rw-r--r-- 1 1045 1047 18 Oct 31 2018 /home/ops02/.bash_logout
134356978 4 -rw-r--r-- 1 1045 1047 193 Oct 31 2018 /home/ops02/.bash_profile
134356979 4 -rw-r--r-- 1 1045 1047 231 Oct 31 2018 /home/ops02/.bashrc
134356980 4 -rw------- 1 1045 1047 276 Jul 24 09:49 /home/ops02/.bash_history
134356968 4 -rw------- 1 1045 1047 637 Jul 24 09:16 /home/ops02/.viminfo
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
十、find执行的动作
1.选项
-print #默认的动作 打印你所查找出来的文件的名称
-ls #把查找出来的文件以长格形式显示出来文件的详细信息
-delete #把查找出来的文件进行删除 只能删除空目录
-exec #后面加自定义的shell命令
2.常用示例
[root@jindada ~]# find / -maxdepth 2 \( -nouser -o -nogroup \)
/home/ops02
/data/ops02.txt
/data/ops02.log
/data/test
[root@jindada ~]# find / -maxdepth 2 \( -nouser -o -nogroup \) -print
/home/ops02
/data/ops02.txt
/data/ops02.log
/data/test
[root@jindada ~]# find / -maxdepth 2 \( -nouser -o -nogroup \) -ls
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
[root@jindada ~]# find /opt/ -type d -name "opt"
/opt/
[root@jindada ~]# ll /opt/
total 0
[root@jindada ~]# cp /etc/hosts /opt/
[root@jindada ~]# find /opt/ -type d -name "opt" -delete
find: cannot delete ‘/opt/’: Directory not empty
[root@jindada ~]# ll /opt/
total 4
-rw-r--r-- 1 root root 158 Jul 27 12:11 hosts
[root@jindada ~]# find /opt/ -type f -name "hosts" -delete
[root@jindada ~]# ll /opt/
total 0
[root@jindada ~]# find /opt/ -type d -name "opt" -delete
[root@jindada ~]# find /root/data/ -type f
/root/data/file-24.txt
/root/data/file-25.txt
/root/data/file-26.txt
/root/data/file-27.txt
[root@jindada ~]# find /root/data/ -type f -delete
[root@jindada ~]# ll data/
total 0
#把某个目录下七天以前的数据删除
[root@jindada ~]# find /backup -type f -mtime +7 -delete
[root@jindada ~]# find /var/log/ -type f -name "*.log" -exec cp {} /opt/ \;
[root@jindada ~]# ll /opt/
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:17 access.log
-rw------- 1 root root 26591 Jul 27 12:17 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:17 audit.log
-rw------- 1 root root 0 Jul 27 12:17 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:17 error.log
-rw------- 1 root root 4017 Jul 27 12:17 ifcfg.log
-rw------- 1 root root 1552657 Jul 27 12:17 journal.log
-rw------- 1 root root 0 Jul 27 12:17 ks-script-3PCKae.log
-rw------- 1 root root 110647 Jul 27 12:17 packaging.log
-rw------- 1 root root 29721 Jul 27 12:17 program.log
-rw------- 1 root root 124184 Jul 27 12:17 storage.log
-rw-r--r-- 1 root root 5840292 Jul 27 12:17 test.log
十一、find和xargs命令的配合
[root@jindada ~]# find /var/log/ -type f -name "*.log" | xargs cp -t /opt/a
[root@jindada ~]# ll /opt/a
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:22 access.log
-rw------- 1 root root 26591 Jul 27 12:22 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:22 audit.log
-rw------- 1 root root 0 Jul 27 12:22 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:22 error.log
-rw------- 1 root root 4017 Jul 27 12:22 ifcfg.log
-rw------- 1 root root 1552657 Jul 27 12:22 journal.log
[root@jindada ~]# find /var/log/ -type f -name "*.log" | xargs -I {} cp {} /opt/b
[root@jindada ~]# ll /opt/b
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:23 access.log
-rw------- 1 root root 26591 Jul 27 12:23 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:23 audit.log
-rw------- 1 root root 0 Jul 27 12:23 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:23 error.log
-rw------- 1 root root 4017 Jul 27 12:23 ifcfg.log
[root@jindada ~]# cp `find /var/log/ -type f -name "*.log"` /opt/c
[root@jindada ~]# ll /opt/c
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:24 access.log
-rw------- 1 root root 26591 Jul 27 12:24 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:24 audit.log
-rw------- 1 root root 0 Jul 27 12:24 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:24 error.log
-rw------- 1 root root 4017 Jul 27 12:24 ifcfg.log
-rw------- 1 root root 1552657 Jul 27 12:24 journal.log
[root@jindada ~]# \cp $(find /var/log/ -type f -name "*.log") /opt/c
$() == `` #优先执行里面的命令 把命令执行的结果交给外面的命令
[root@jindada ~]# find /var/log/ -type f -name "*.log" |xargs ls -l
-rw-------. 1 root root 26591 Jul 6 02:17 /var/log/anaconda/anaconda.log
-rw-------. 1 root root 4017 Jul 6 02:17 /var/log/anaconda/ifcfg.log
-rw-------. 1 root root 1552657 Jul 6 02:17 /var/log/anaconda/journal.log
-rw-------. 1 root root 0 Jul 6 02:17 /var/log/anaconda/ks-script-3PCKae.log
-rw-------. 1 root root 110647 Jul 6 02:17 /var/log/anaconda/packaging.log
-rw-------. 1 root root 29721 Jul 6 02:17 /var/log/anaconda/program.log
[root@jindada ~]# find /opt/a -type f -name "*.log" |xargs rm -f
[root@jindada ~]# ll /opt/a
total 0
十二、企业级经典示例
1.场景1:服务器磁盘满,一般由大的日志文件导致,需找到大文件并删除。
解决1: find / -size +500M -print0|xargs -0 du -m|sort -nr
find指令为找出500M以上的文件,print0和xargs -0配合使用,用来解决文件名中有空格或特殊字符问题。du -m是查看这些文件的大小,并以m为单位显示。最后sort -nr是按照数字反向排序(大的文件在前)
解决2:上述方法从根路径查找,可能列出一些系统文件。可以在这个查找之前先进行一下过滤。
使用du -m -d 1 /|sort -nr 先看看根路径下,哪个文件夹比较大,并且有嫌疑是导致磁盘满的罪魁祸首。然后再基于那个目录进行find。
2.场景2: 记得写过一个xxx.c的文件,但是忘了放哪里了
解决: find / -name *xxx*.c 模糊查找下这个文件