温馨提示×

linux inotify是什么

小樊
46
2026-10-27 23:51:40
栏目: 智能运维

inotify 是 Linux 内核提供的一种文件系统事件监控机制,全称是 inode notify。它可以让你实时监听文件或目录发生的变化,而不需要轮询(不断去查)。


一、inotify 能做什么?

可以监控的事件包括(常见):

  • 文件被创建(IN_CREATE)
  • 文件被删除(IN_DELETE)
  • 文件被修改(IN_MODIFY)
  • 文件被移动(IN_MOVE)
  • 文件被访问(IN_ACCESS)
  • 文件属性改变(IN_ATTRIB)
  • 目录被监控(IN_ISDIR)

典型应用:

  • 日志实时采集
  • 配置热加载
  • 文件同步工具(如 rsync + inotify)
  • 热部署、自动重启服务

二、inotify 的基本工作方式

  1. 应用程序通过系统调用创建 inotify 实例
  2. 添加要监控的文件或目录
  3. 内核在事件发生时通知应用程序
  4. 应用程序读取事件并处理

核心系统调用:

  • inotify_init():创建 inotify 实例
  • inotify_add_watch():添加监控
  • read():读取事件
  • inotify_rm_watch():移除监控

三、命令行工具(最常用)

Linux 提供了用户态工具:

1️⃣ inotifywait(来自 inotify-tools)

inotifywait -m /tmp

示例:监听文件修改

inotifywait -m -e modify /var/log/app.log

安装:

# Debian / Ubuntu
apt install inotify-tools

# CentOS / Rocky
yum install inotify-tools

四、简单示例(C 语言)

int fd = inotify_init();
int wd = inotify_add_watch(fd, "/tmp", IN_CREATE | IN_DELETE);

char buf[4096];
read(fd, buf, sizeof(buf));

五、inotify 的限制

  • ❌ 不能跨文件系统(如 NFS)
  • ❌ 监控数量有限(受 max_user_watches 限制)
  • ❌ 不适合超大规模目录(上百万文件)

查看限制:

cat /proc/sys/fs/inotify/max_user_watches

修改:

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

六、inotify vs 其他机制

机制 特点
inotify Linux 原生,轻量
fanotify 更底层,可拦截
polling 简单但效率低

如果你愿意,我可以:

  • 给你一个 Shell / Python inotify 示例
  • 讲 inotify 在 Docker / Kubernetes 中的问题
  • 对比 inotify 和 fsnotify(Go)

你想看哪一个?

0 踩