Linux 命令和 Shell 技能
find:无所不能的 Linux 搜索
find 是生产服务器上最危险的命令,这正是它值得掌握的原因。它在一个表达式中枚举、过滤和执行,每一个经典的“/var here be Dragons”事件都可以追溯到有人跳过的预览。这些习惯是机械的:首先使用 -print 或 -ls 进行操作,使用 -exec ... + 进行批处理,通过 -print0 传递到 xargs -0,并将 -delete 视为第二遍决策,而不是初稿。
要点
- 过滤元数据,而不是仅过滤名称:-type f、-mtime +30、-size +100M 和 -perm -o+w 查找命名约定和年龄报告都遗漏的奇怪文件。
- 预览每个破坏性查询:首先查找 /var/www/uploads -name 'core.*' -ls,仅在实际阅读列表后将 -ls 替换为 -delete;预览是安全检查,而不是建议。
- -exec cmd {} + 将文件批处理为几次调用并击败 \;形成于大树上;相同的语法支持“rm 一个进程中的每个匹配文件”,而不会出现参数列表太长的错误。
- 默认空安全输出: find 。 -name '*.old' -print0 | xargs -0 rm -v;当文件名包含空格时,将普通管道插入 xargs 是一种已知的数据丢失模式。
- -xdev 和 -maxdepth 保持行走诚实:它们停止查找挂载和快照,这可以挽救运行时和您对“此目录”的假设。
- 如果精确询问,时间窗口是精确的:-mmin -1440 表示过去 24 小时,-newermt '2026-01-01' 表示自某个日期以来,并记住 -xtime 表示“n 个完整的 24 小时前”,然后在票证中引用它。
- 故意修剪:找到 . -path '*/node_modules' -prune -o -name '*.js' -print 跳过一个目录,否则该目录在大小和时间上都会超过树的其余部分。
- 预计在不可读的目录中出现非零退出;像“权限被拒绝”这样的 stderr 行是跳过的文件,而不是数据,因此脚本要么容忍 find 的退出状态,要么显式检查它,而不是假设干净的行走。
一线手记
我们最糟糕的 find -delete 故事以不带引号的 -name 模式开始,第二个 shell 在 find 的上游扩展为三个单词。此后的规则很简单:首先 -print,始终引用,并且 -delete 在第一次运行时从不出现在命令中。
常见问题
我的查找找到了文件,但下游命令没有执行任何操作。为什么?
几乎总是引用或空输入:模式在 find 看到它之前被 shell 扩展,或者 xargs 没有收到任何信息。引用模式,并将 -print0 与 xargs -0 每次配对。
- 查找后删除或 rm ?
- 删除是直接、快速且无情的;它不能与 -exec 在同一表达式中混合。先运行匹配的-print并读取它;这就是整个学科。
为什么在系统目录上发现打印权限错误?
组件无法将打印错误读取到 stderr 并使 find 退出非零;使用 2>/dev/null 进行过滤以获得交互舒适性,并且永远不要将这些错误解释为缺少文件。
-mtime 和 -ctime 又有什么区别?
-mtime 是内容更改,-ctime 是元数据更改(权限、重命名、硬链接计数); chown 或移动会影响 ctime,但不会影响 mtime,这使得每个季度只有一份报告感到困惑。
Kinetikatech 如何在linux 命令和 shell 技能方面为您提供帮助
情况就是这样:决定管理员是操作服务器还是对抗服务器的命令和脚本编写习惯:使用每个基本安装中的工具搜索、转换、传输和监督文本和进程。交给我们的Linux 服务器安全和服务器管理服务即可全程覆盖:规范评估、干净实施、全天候监控。