前言你好欢迎来到 Linux 运维第二章的第四部分前面三篇文章我们学习了用户管理、权限控制和软件包管理你已经能够创建用户、分配权限、安装软件了。但还有一个高频需求没有涉及——找文件。在 Linux 系统中文件散落在各个目录中。当你需要找到所有.log日志文件查找大于 100MB 的大文件找出 7 天前修改的文件并清理定位所有设置了 SUID 的可执行文件这时候就需要find命令出场了。find是 Linux 中最强大的文件查找工具它直接在磁盘上实时搜索支持按名称、类型、大小、时间、权限等多种条件组合查找。今天我们将系统学习find 命令基本语法从哪里找、按什么找、找到后做什么按名称、类型、大小、时间、权限查找-exec 与 -ok 执行操作find 与 xargs 配合使用学完今天的内容你将能在 Linux 系统中快速精准地定位任何文件并进行批量操作。好让我们正式开始今天的旅程 一、find 命令概述1.1 find 是什么find是 Linux 中最强大的文件查找工具。与locate基于数据库快速查找不同find直接在磁盘上实时搜索支持按名称、类型、大小、时间、权限等多种条件组合查找结果精确但速度相对较慢。find的特点 │ ├── 实时搜索直接在磁盘上查找结果准确 ├── 条件丰富支持名称、类型、大小、时间、权限等 ├── 组合查找多个条件可以组合使用 └── 执行操作找到后可以执行删除、复制等操作1.2 基本语法find[查找路径][查找条件][执行动作]示例在/var/log目录查找所有.log文件find/var/log-name*.log在根目录查找大于 100MB 的文件find/-size100M查找并删除 7 天前的日志文件⚠️ 慎重操作find/var/log-name*.log-mtime7-delete二、查找方式2.1-name—— 按文件名查找按文件名查找是最常用的方式支持通配符*和?。环境准备安装 Nginx 产生一些配置文件用于演示dnf-yinstallnginx# Ubuntu: apt -y install nginxsystemctl start nginx查找示例查找精确名称的文件find/etc-namenginx.conf查找所有.conf文件find/etc-name*.conf查找以nginx开头的文件find/etc-namenginx*查找所有以.log结尾的文件find/var/log-name*.log查找文件名包含error的文件find/var/log-name*error*2.2-iname—— 不区分大小写查找-iname与-name用法相同但忽略大小写。find/var/log-iname*.LOGfind/var/log-inameerror*2.3-type—— 按文件类型查找类型含义示例f普通文件find / -type fd目录find / -type dl符号链接find / -type lb块设备文件find /dev -type bc字符设备文件find /dev -type c示例查找所有目录find/etc-typed查找所有文件不包括目录find/etc-typef查找所有符号链接find/usr/bin-typel组合使用查找所有配置文件文件 .conffind/etc-typef-name*.conf限制查找深度只查一层子目录find/etc-maxdepth1-typed2.4-size—— 按文件大小查找符号含义示例大于100M大于 100MB-小于-100M小于 100MB无等于100M正好 100MB常用单位c字节、kKB、MMB、GGB示例查找大于 100MB 的文件find/-typef-size100M查找小于 10KB 的文件find/var/log-typef-size-10k查找大于 10MB 且小于 50MB 的文件组合条件find/-typef-size10M-size-50M查找大于 100MB 的文件并显示详细信息find/-typef-size100M-execls-lh{}\;2.5-mtime—— 按时间查找参数含义说明-mtime修改时间文件内容被修改的时间-ctime改变时间文件属性权限、属主被修改的时间-atime访问时间文件被读取的时间-mmin修改时间分钟按分钟计算-cmin改变时间分钟按分钟计算-amin访问时间分钟按分钟计算符号含义示例大于超过7表示 7 天前-小于以内-7表示 7 天内无等于正好7表示正好 7 天前示例查找 7 天内修改的文件find/var/log-typef-mtime-7查找 7 天前修改的文件find/var/log-typef-mtime7查找正好 7 天前修改的文件find/var/log-typef-mtime7查找 30 分钟内修改的文件find/var/log-typef-mmin-30查找超过 1 天未访问的文件find/home-typef-atime1查找 1 小时内修改的配置文件find/etc-typef-name*.conf-mmin-602.6-perm—— 按权限查找精确匹配查找权限为 644 的文件find/etc-perm644find/etc-perm644-ls查找所有 777 权限的文件不安全文件find/-typef-perm777权限匹配扩展命令含义逻辑find . -perm -644权限至少包含rw-r--r--中的所有位AND必须全部包含find . -perm /644权限任意一位匹配rw-r--r--OR只要包含其中任何一个位示例查找所有可执行文件find/usr/bin-typef-perm/111查找所有其他用户可写的文件安全风险find/-typef-perm-002查找所有设置了 SUID 的文件find/-typef-perm-4000查找所有设置了 SGID 的文件find/-typef-perm-2000三、执行操作3.1 常用动作动作含义-print打印默认-ls类似ls -l输出-delete删除文件-exec执行命令-ok交互式执行会询问确认3.2-exec用法语法-exec命令{}\;{}代表查找到的文件\;表示命令结束示例查找并删除所有.tmp文件find/tmp-name*.tmp-execrm{}\;查找所有.conf文件并复制到备份目录find.-name*.conf-execcp{}/backup/config/\;查找大文件并显示详细信息find/-typef-size100M-execls-lh{}\;3.3-ok—— 安全执行-ok与-exec用法相同但会在执行前询问确认适合删除等危险操作。查找并删除.old文件每个文件都会询问find.-name*.old-okrm{}\;输出示例rm./file.old? y/n安全删除大日志文件find/var/log-name*.log-size100M-okrm{}\;四、find 与 xargs 结合4.1 xargs 核心作用xargs是find的好搭档它的核心作用有三个作用说明凑批把一堆文件名凑在一起一次传给命令少启动几次进程解决参数太长有些命令如rm一次接受不了太多参数xargs会自动分批让管道更有用很多命令不支持从管道读数据如rm、lsxargs充当桥梁find找到文件 → 管道 →xargs凑批 → 传给命令执行4.2 xargs 常用选项选项含义示例-I {}替换字符串xargs -I {} cp {} /tmp/-0处理空字符分隔xargs -04.3 find xargs 实战案例 案例一基础用法 —— 删除文件准备测试环境mkdirdir1touchdir1/file{1..10}.txtlsdir1输出示例file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt先用ls -l预览要操作的文件安全习惯finddir1-namefile*.txt|xargsls-l确认无误后再删除finddir1-namefile*.txt|xargsrm验证删除结果lsdir1/核心知识点xargs默认把参数追加到命令末尾删除前先用ls -l预览避免误删 案例二-I {}占位符替换 —— 复制文件准备测试环境mkdirdir2touchdir2/file{1..10}.txt方式一使用{}作为占位符finddir2-namefile*.txt|xargs-I{}cp-ra{}/var/tmp/方式二自定义占位符任意字符串都可以finddir2-namefile*.txt|xargs-IYANGGEcp-raYANGGE /tmp/验证复制结果ls-lh/var/tmp/file*.txtls-lh/tmp/file*.txt核心知识点为什么要用-I {}因为cp的参数顺序是cp 源 目标需要指定占位符来控制参数位置占位符可以自定义{}、QIANYI、%都可以 案例三-print0xargs -0—— 安全处理特殊文件名准备测试环境mkdirdir3touchdir3/file{1..10}.txttouchdir3/file qianyi.txt# 创建一个含空格的文件名❌ 错误写法文件名中包含空格时默认方式会报错finddir3-name*.txt|xargsls-l输出示例报错ls: cannot accessdir3/file:No suchfileor directory ls: cannot accessqianyi.txt:No suchfileor directory -rw-r--r--.1root root0Jul1715:23 dir3/file10.txt...其他文件正常显示✅ 正确写法一使用-I {}占位符finddir3-name*.txt|xargs-I{}ls-l{}输出示例成功处理含空格文件名-rw-r--r--.1root root0Jul1715:23 dir3/file10.txt... -rw-r--r--.1root root0Jul1715:24dir3/file qianyi.txt✅ 正确写法二使用-print0xargs -0生产环境推荐finddir3-name*.txt-print0|xargs-0ls-l输出示例完美处理所有文件名-rw-r--r--.1root root0Jul1715:23 dir3/file10.txt -rw-r--r--.1root root0Jul1715:23 dir3/file1.txt... -rw-r--r--.1root root0Jul1715:24dir3/file qianyi.txt核心知识点-print0用空字符\0分隔文件名而非默认的换行符xargs -0按空字符解析输入完美处理空格、换行符、引号等特殊字符生产环境推荐写法find ... -print0 | xargs -0 ...三种写法对比写法命令空格文件名结果① 默认findxargs ls -l❌②-I {}findxargs -I {} ls -l {}✅③-print0find -print0xargs -0 ls -l✅五、结语恭喜你 到这里你已经完成了 Linux 运维第二章2-4的全部学习内容。今天我们系统学习了find 命令基本语法查找路径 查找条件 执行动作按名称查找-name、-iname、通配符使用按类型查找-type f/d/l/b/c按大小查找-size 100M、-10k按时间查找-mtime、-atime、-ctime、-mmin按权限查找-perm、-perm -644、-perm /644执行操作-exec、-ok、-deletefind xargs 结合xargs -I {}、-print0xargs -0find命令是 Linux 运维中高频使用的工具之一。掌握了今天的内容你将在文件查找和批量处理上游刃有余。如果在学习过程中遇到任何问题欢迎在评论区留言讨论也别忘了点赞收藏方便以后查阅附录核心知识点速查表你想干什么敲什么命令按名称查找文件find /etc -name nginx.conf不区分大小写查找find /var/log -iname *.LOG查找所有目录find /etc -type d查找所有文件find /etc -type f查找大于 100MB 的文件find / -type f -size 100M查找小于 10KB 的文件find /var/log -type f -size -10k查找 7 天内修改的文件find /var/log -type f -mtime -7查找 7 天前修改的文件find /var/log -type f -mtime 7查找 30 分钟内修改的文件find /var/log -type f -mmin -30查找权限为 777 的文件find / -type f -perm 777查找所有可执行文件find /usr/bin -type f -perm /111查找设置了 SUID 的文件find / -type f -perm -4000查找并删除find /tmp -name *.tmp -exec rm {} \;查找并交互式删除find . -name *.old -ok rm {} \;查找并复制find . -name *.conf -exec cp {} /backup/ \;使用 xargs 预览find dir -name “*.txt”使用 xargs 删除find dir -name “*.txt”使用占位符复制find dir -name “*.txt”安全处理特殊文件名find dir -name “*.txt” -print0附录find 条件组合速查场景命令查找大于 10MB 且小于 50MB 的文件find / -type f -size 10M -size -50M查找 7 天前修改的 .log 文件find /var/log -type f -name *.log -mtime 7查找 1 小时内修改的配置文件find /etc -type f -name *.conf -mmin -60查找所有 777 权限且是文件的find / -type f -perm 777查找所有可执行文件find /usr/bin -type f -perm /111附录xargs 三种用法对比用法命令示例适用场景默认追加find …xargs rm-I {}find …xargs -I {} cp {} /target/-print0find … -print0xargs -0 ls -l