find 命令是 Linux 系统中一个强大而灵活的文件搜索工具,允许用户根据指定的路径和条件查找文件或目录,支持使用正则表达式,并且可以与管道符结合使用,实现更加复杂的搜索操作。本教程主要介绍Linux find命令的语法格式、常用参数和使用示例。
与 whereis、which 或 locate 等其他搜索命令相比,find 通常执行的是从根目录(/)开始的全面搜索。在服务器负载较高的情况下,建议避免在高峰时段使用 find 进行模糊搜索,因为这可能会消耗大量系统资源。
一、语法格式
find 命令的基本语法格式如下:
二、常用参数
下面是一些常用的 find 参数:
1、-name: 匹配指定的文件名模式。
2、-nouser: 查找没有所有者的文件。
3、-perm: 根据文件权限进行匹配。
4、-nogroup: 查找没有所属组的文件。
5、-user: 匹配特定用户拥有的文件。
6、-newer: 查找比指定文件更新的文件。
7、-group: 匹配特定组拥有的文件。
8、-type: 根据文件类型进行匹配(如普通文件、目录等)。
9、-mtime: 匹配最后修改时间符合特定条件的文件。
10、-size: 根据文件大小进行匹配。
11、-atime: 匹配最后访问时间符合特定条件的文件。
12、-prune: 排除指定目录不进行搜索。
13、-ctime: 匹配最后状态改变时间符合特定条件的文件。
14、-exec: 对搜索结果执行指定的命令。
三、使用示例
1、全盘搜索系统中所有以.conf结尾的文件:
[root@zzbaike ~]# find / -name *.conf
/run/tmpfiles.d/kmod.conf
/etc/dnf/plugins/copr.conf
/etc/dnf/plugins/debuginfo-install.conf
/etc/dnf/plugins/product-id.conf
/etc/dnf/plugins/subscription-manager.conf
2、在/etc目录中搜索所有大于1MB的文件:
[root@zzbaike ~]# find /etc -size +1M
/etc/selinux/targeted/policy/policy.31
3、在/home目录中搜索所有属于指定用户的文件:
[root@zzbaike ~]# find /home -user linuxprobe
/home/linuxprobe/.mozilla
/home/linuxprobe/.mozilla/extensions
/home/linuxprobe/.mozilla/plugins
/home/linuxprobe/.bash_logout
/home/linuxprobe/.bash_profile
4、列出当前工作目录中的所有文件、目录以及子文件信息:
5、在/var/log目录下搜索所有指定后缀的文件:
[root@zzbaike ~]# find /var/log -name "*.log"
/var/log/rhsm/rhsmcertd.log
/var/log/sssd/sssd_implicit_files.log
/var/log/sssd/sssd_nss.log
/var/log/sssd/sssd_kcm.log
/var/log/anaconda/anaconda.log
6、在/var/log目录下搜索所有不是以.log结尾的文件:
[root@zzbaike ~]# find /var/log ! -name "*.log"
7、搜索当前工作目录中所有近7天被修改过的文件:
[root@zzbaike ~]# find . -mtime +7
8、全盘搜索系统中所有类型为目录,且权限为1777的目录文件:
[root@zzbaike ~]# find / -type d -perm 1777
9、全盘搜索系统中所有类型为普通文件,且可以执行的文件信息:
[root@zzbaike ~]# find / -type f -perm /a=x
/boot/vmlinuz-4.18.0-80.el8.x86_64
/boot/vmlinuz-0-rescue-c8b04558503242459d908c6c22a2d481
/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
10、全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件:
[root@zzbaike ~]# find / -name "*.mp4" -exec rm -rf {} \;