inotify-tools介绍/安装

1.inotify-tools 简介

  • 背景:Linux 内核提供了 inotify 机制,可以在文件或目录发生变化时通知用户空间进程(代替低效的轮询)。

  • inotify-tools:就是一个对 inotify 的封装,提供了命令行工具,主要有两个:

    • inotifywait:阻塞等待并打印文件系统事件,适合写脚本。
    • inotifywatch:统计某个路径在一段时间内发生的事件次数。
  • 典型应用场景

    • 配置文件变更 → 自动重载服务
    • 日志文件更新 → 实时分析或告警
    • 代码文件变动 → 自动编译/部署(热加载)
    • 批量文件导入监控(例如新文件进目录就处理)

2.安装

大多数 Linux 发行版直接能装:

1
2
3
4
5
# Debian/Ubuntu
sudo apt-get install inotify-tools

# CentOS/RHEL
sudo yum install inotify-tools

源码地址:inotify-tools GitHub


3.使用例子

3.1. 监控目录变动(实时输出)

1
inotifywait -m -e create,delete,modify /tmp
  • -m → 持续监控(monitor)

  • -e → 指定事件,这里是创建、删除、修改

  • 输出示例:

    /tmp/ CREATE new.txt
    /tmp/ MODIFY new.txt
    /tmp/ DELETE new.txt
    

3.2. 阻塞直到某个文件被修改

1
2
3
inotifywait -e modify /etc/nginx/nginx.conf
echo "nginx.conf changed, reload nginx..."
systemctl reload nginx

👉 很适合自动热加载配置。


3.3. 递归监控目录及子目录

1
inotifywait -m -r -e modify,create,delete /var/www/
  • -r → recursive(递归)
  • 常见于网站项目目录,文件一变就触发。

3.4. 统计事件发生次数(分析用途)

1
inotifywatch -t 30 -r /var/log/
  • -t 30 → 统计 30 秒

  • -r → 递归子目录

  • 输出类似:

    # watches established
    total  modify  attrib  open  close_write  ...
    100    30      10      20    40
    

3.5. 脚本化:文件到达目录就处理

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
WATCH_DIR="/data/incoming"

inotifywait -m -e create "$WATCH_DIR" | while read path action file; do
echo "New file detected: $file"
# 假设是 CSV 文件就处理
if [[ "$file" == *.csv ]]; then
mv "$path/$file" /data/processed/
echo "$file moved to processed"
fi
done

👉 常见于数据采集、ETL 前置任务。


4.可监控的事件类型

  • create → 新建文件/目录
  • delete → 删除文件/目录
  • modify → 文件内容修改
  • move → 移动文件
  • attrib → 属性变更(权限、时间戳)
  • close_write → 写入并关闭

一般用 modify,create,delete 就够了。


🔥 总结:

  • inotify-tools 适合轻量场景:简单的监控 + 脚本联动。
  • 更复杂的需求:可能要用 systemd.pathfanotify 或者写一个守护进程。