首页/系统/Linux 运维命令速查/inotifywait 监控目录变化
文件与目录76 条

inotifywait 监控目录变化

实时监控文件创建、修改、删除事件并打印,用于调试脚本触发、观察部署过程与简易审计。

Linux 运维命令速查系统更新于 2026-10-13

它监视什么

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 挂载点上的改动由服务端产生,客户端通常收不到通知,共享目录场景要靠轮询或服务端方案。

易错点

  • 监控层级很深时 watch 数暴涨,先调大 fs.inotify.max_user_watches 再上生产,否则静默丢事件
  • 事件会重复与合并,同一次保存可能同时给出 MODIFY 和 CLOSE_WRITE,触发型脚本必须做幂等与去抖
  • 在容器里监控挂载卷时,事件可能只出现在宿主机侧,容器内看不到变化
  • 长期前台运行会刷满日志盘,应配合 --format 精简输出并交给日志轮转

数据来源与参考

  • man 1 inotifywait(inotify-tools 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌