find 命令是 Linux 系统中一个强大而灵活的文件搜索工具,允许用户根据指定的路径和条件查找文件或目录,支持使用正则表达式,并且可以与管道符结合使用,实现更加复杂的搜索操作。本教程主要介绍Linux find命令的语法格式、常用参数和使用示例。
与 whereis、which 或 locate 等其他搜索命令相比,find 通常执行的是从根目录(/)开始的全面搜索。在服务器负载较高的情况下,建议避免在高峰时段使用 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/resolv.conf /etc/dnf/dnf.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 /etc/udev/hwdb.bin
3、在/home目录中搜索所有属于指定用户的文件:
[root@zzbaike ~]# find /home -user linuxprobe /home/linuxprobe /home/linuxprobe/.mozilla /home/linuxprobe/.mozilla/extensions /home/linuxprobe/.mozilla/plugins /home/linuxprobe/.bash_logout /home/linuxprobe/.bash_profile /home/linuxprobe/.bashrc
4、列出当前工作目录中的所有文件、目录以及子文件信息:
[root@zzbaike ~]# find . ./.bash_logout ./.bash_profile ./.bashrc ./.cshrc ./.tcshrc ./anaconda-ks.cfg ………………省略部分输出信息………………
5、在/var/log目录下搜索所有指定后缀的文件:
[root@zzbaike ~]# find /var/log -name "*.log" /var/log/audit/audit.log /var/log/rhsm/rhsmcertd.log /var/log/rhsm/rhsm.log /var/log/sssd/sssd.log /var/log/sssd/sssd_implicit_files.log /var/log/sssd/sssd_nss.log /var/log/sssd/sssd_kcm.log /var/log/tuned/tuned.log /var/log/anaconda/anaconda.log /var/log/anaconda/X.log ………………省略部分输出信息………………
6、在/var/log目录下搜索所有不是以.log结尾的文件:
[root@zzbaike ~]# find /var/log ! -name "*.log" /var/log /var/log/lastlog /var/log/README /var/log/private /var/log/wtmp /var/log/btmp /var/log/samba
7、搜索当前工作目录中所有近7天被修改过的文件:
[root@zzbaike ~]# find . -mtime +7 ./.bash_logout ./.bash_profile ./.bashrc ./.cshrc ./.tcshrc ………………省略部分输出信息………………
8、全盘搜索系统中所有类型为目录,且权限为1777的目录文件:
[root@zzbaike ~]# find / -type d -perm 1777 /dev/mqueue /dev/shm /var/tmp /tmp ………………省略部分输出信息………………
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 /etc/X11/xinit/Xclients /etc/X11/xinit/Xsession /etc/X11/xinit/xinitrc ………………省略部分输出信息………………
10、全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件:
[root@zzbaike ~]# find / -name "*.mp4" -exec rm -rf {} \;