按时间窗检索变动文件
按最近时间窗检索变动文件有两个典型用途:发布之后核对到底动过哪些文件,以及应急排查中找出新增或修改过的可疑文件。find 提供两条时间轴:-mmin 与 -mtime 看文件内容修改时间(mtime),-cmin 与 -ctime 看元数据变更时间(ctime,涵盖权限、属主与链接数变化)。应急场景两个维度都要看,因为攻击者常把内容写入与权限调整分两步完成。还要注意 mtime 可以被 touch 伪造,重要排查不能只看它。
基本信息
| 适用平台 | Linux/macOS(GNU findutils 与 BSD find) |
|---|---|
| 命令语法 | find 路径 -mmin N 或 find 路径 -cmin N 或 find 路径 -newermt '时间' |
| 常用选项 | -mmin 按分钟看内容修改 -cmin 按分钟看元数据变更 -mtime 与 -ctime 按天 -newermt 指定时间点之后 |
| 组合用法 | 配合 -type f、-name、-exec ls 输出细节 |
| 时间属性 | mtime 内容变化、ctime 元数据变化、atime 访问时间 |
典型使用场景
- 发布核对:确认本次上线实际改动了哪些文件
- 应急排查:找出最近新增或被写入的脚本与页面
- 权限异常:用 -cmin 定位最近被改过权限的文件
- 配置追溯:确认哪些配置文件在指定时间后被修改
- 备份评估:统计当天的变动量,判断是否需要提前备份
常用示例
常用示例
find /var/www/site -type f -mmin -120
find /var/www/site -type f -newermt '2026-10-13 00:00'
find /etc -cmin -60 # 近期元数据变动的文件
find /var/www -name '*.php' -mtime -1 -exec ls -l {} +
find /tmp -type f -mmin -30 -exec ls -lh {} +三条时间轴
| 属性 | 变化时机 | 排查用途 |
|---|---|---|
| mtime 修改时间 | 文件内容被写入 | 发布核对与内容变更追溯 |
| ctime 变更时间 | 元数据变化,如权限、属主、重命名 | 应急排查中权限被改动的痕迹 |
| atime 访问时间 | 文件被读取 | 常被 relatime 等挂载选项弱化,参考价值有限 |
| 时间窗写法 | -mmin 分钟级、-mtime 天级、-newermt 指定时间点 | 按排查粒度选择合适的选项 |
应急排查两个维度都要看:-mtime 找内容变化,-ctime 或 -cmin 找权限与属主被改动的文件,例如被补上可执行位的可疑脚本。
mtime 可以被 touch 任意伪造。重要排查不要只看它,应结合 ctime、内容审计与完整性校验一起判断。
需要按时间先后排序查看时,可用 GNU find 的 -printf 先打印时间戳再排序:find /data -type f -printf '%T@ %p\n' | sort -n | tail 就能拿到最近变动的几项。BSD 与 macOS 的 find 没有 -printf,改用 -exec stat 取时间。时间条件里写绝对时间最稳。
排查动作顺序
- 先锁定业务目录,避免整机扫描拖慢线上服务
- 用 -type f 过滤掉目录,减少噪声
- 先只打印清单核对数量,再决定是否交给后续命令处理
- 同时看内容修改与元数据变更两条时间轴,避免漏掉改权限的动作
- 把命中的文件清单存成证据文件,便于复核与交接