温馨提示×

ubuntu inotify怎么用

小樊
52
2026-10-16 08:29:34
栏目: 智能运维

inotify 是 Linux 内核提供的文件系统事件监控机制,Ubuntu 下通常配合 inotify-tools 或 编程接口(C / Python) 使用。下面从命令行和编程两个层面讲清楚。


一、命令行方式(最简单,推荐先学)

1. 安装 inotify-tools

sudo apt update
sudo apt install inotify-tools

2. 常用命令

主要用两个:

  • inotifywait:等待事件发生
  • inotifywatch:统计事件

3. inotifywait 基础用法

监控某个目录(创建、删除、修改)

inotifywait -m -r -e create,delete,modify /path/to/dir

参数说明:

  • -m:持续监控(monitor)
  • -r:递归子目录
  • -e:指定事件
  • /path/to/dir:监控路径

示例输出:

/path/to/dir/ CREATE file.txt
/path/to/dir/ MODIFY file.txt

4. 配合脚本自动处理

inotifywait -m -r -e close_write /data |
while read path action file
do
    echo "文件变动: $path$file ($action)"
done

常见事件类型:

  • create
  • delete
  • modify
  • move
  • attrib
  • close_write

5. inotifywatch 统计

inotifywatch -v -t 60 -r /path/to/dir

统计 60 秒内事件次数。


二、系统限制(很重要)

查看当前限制

cat /proc/sys/fs/inotify/max_user_watches

修改监听数量(常见报错)

echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches

永久生效:

echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

三、编程方式(进阶)

Python 示例

import inotify.adapters

notifier = inotify.adapters.Inotify()
notifier.add_watch('/path/to/dir')

for event in notifier.event_gen(yield_nones=False):
    (_, type_names, path, filename) = event
    print(f"{path}/{filename}: {type_names}")

安装:

pip install inotify

C 语言(核心 API)

主要函数:

  • inotify_init()
  • inotify_add_watch()
  • read()
  • inotify_rm_watch()

适合写系统级工具。


四、典型使用场景

  • 自动同步文件(rsync)
  • 热重载配置
  • 日志监控
  • 构建工具(如 webpack、watch)
  • 安全审计

如果你愿意,可以告诉我:

  • 你是命令行用还是写程序用
  • 监控什么(目录 / 文件 / 特定后缀)
  • Ubuntu 版本

我可以直接给你可用脚本。

0 踩