它监视什么
inotifywait 是 inotify-tools 套件中的命令行工具,直接读取 Linux 内核的 inotify 接口,把指定目录或文件上发生的创建、写入、关闭、移动、删除、属性变更等事件实时打印出来。它的价值在于给出「哪个文件、什么时候、发生了什么」的确定答案,用来验证脚本是否被触发、部署过程改了哪些文件、配置热加载有没有生效。
基本信息
| 适用平台 | Linux(依赖内核 inotify 子系统),macOS 与 Windows 不可用 |
|---|---|
| 安装方式 | dnf / yum install inotify-tools,或 apt install inotify-tools |
| 语法 | inotifywait [选项] 路径... |
| 常用选项 | -m 持续监控、-r 递归、-e 指定事件、-t 超时退出、-q 安静、--format 输出格式 |
典型使用场景
- 调试上传目录:确认文件是传到了还是根本没落地
- 观察 Ansible、CI 发布脚本在目标机上实际改动了哪些文件
- 验证 nginx、应用的热加载是否真的读到了新配置
- 写 shell 触发式任务时先在交互态确认事件类型,再固定脚本逻辑
- 对关键目录做轻量审计,记录谁在什么时间动了配置
常用示例
常用示例
inotifywait -m -r -e create,modify,delete /data/uploads # 递归持续监控三类事件
inotifywait -m -e close_write --format '%T %w%f' --timefmt '%F %T' /etc/nginx/conf.d/ # 只在文件写完时输出
inotifywait -t 60 -e modify /etc/nginx/nginx.conf # 60 秒内无事件自动退出
inotifywait -m -q -e move,delete /var/spool/at # 安静模式,只输出事件行
inotifywait -m -e attrib,delete_self /etc # 关注属性变更与删除自身常见事件逐项读法
| 事件 | 触发时机 | 典型用途 |
|---|---|---|
| CREATE | 目录中新建文件或子目录 | 只关心新文件出现时用它,会比 MODIFY 早 |
| CLOSE_WRITE | 以可写方式打开的文件被关闭 | 判断一次写入是否结束,优于 MODIFY 去重 |
| MOVED_TO | 有文件被移动进被监控目录 | 上传常是先写临时名再改名,这类要盯它 |
| DELETE | 文件被删除 | 清理任务是否生效的验证点 |
| ATTRIB | 权限、时间戳、属主等元数据改变 | 排查 chmod、chown 是否被外部改动 |
生产环境监控大量目录会消耗 inotify watch 配额,上限见 /proc/sys/fs/inotify/max_user_watches,耗尽时看到 No space left on device 这类报错,同时也会影响同机器的其他程序。
inotify 只反映本机文件系统事件:NFS、SMB 挂载点上的改动由服务端产生,客户端通常收不到通知,共享目录场景要靠轮询或服务端方案。