0

0

Linux如何监控系统文件变化_Linuxinotify文件事件监听

冷漠man

冷漠man

发布时间:2025-11-26 20:08:02

|

208人浏览过

|

来源于php中文网

原创

inotify是Linux内核自2.6.13起提供的文件系统事件监控机制,通过事件驱动方式高效监听文件或目录的变化,支持IN_ACCESS、IN_MODIFY、IN_CREATE等事件类型,相比轮询更节省资源;用户空间可通过inotify-tools工具(如inotifywait)实现对文件变化的实时响应,常用于日志监控、配置文件检测和自动化脚本;使用时需注意默认监控句柄数限制(可通过修改/proc/sys/fs/inotify/max_user_watches调整),仅适用于本地文件系统且不记录事件触发者。

linux如何监控系统文件变化_linuxinotify文件事件监听

Linux系统中,监控文件变化是一个常见需求,比如日志文件变动、配置文件被修改或代码部署同步等。实现这一功能的核心工具之一是 inotify —— 一个内核子系统,用于监听文件系统的事件,如创建、删除、修改等。

inotify 是什么?

inotify 是 Linux 内核从 2.6.13 版本开始引入的一个机制,它允许应用程序监视文件或目录的事件。相比传统的轮询方式(定期检查文件是否变化),inotify 是事件驱动的,效率更高,资源消耗更少。

常见的 inotify 事件包括:

  • IN_ACCESS:文件被访问
  • IN_MODIFY:文件内容被修改
  • IN_ATTRIB:文件属性改变(如权限、时间戳)
  • IN_CREATE:在目录中创建新文件或子目录
  • IN_DELETE:文件或目录被删除
  • IN_CLOSE_WRITE:以可写模式打开的文件被关闭
  • IN_MOVE:文件或目录被移动

使用 inotify-tools 命令行工具

虽然 inotify 是内核提供的功能,但用户空间需要工具来使用它。最常用的工具是 inotify-tools,它提供两个命令:inotifywaitinotifywatch

安装 inotify-tools:

  • Ubuntu/Debian: apt install inotify-tools
  • CentOS/RHEL: yum install inotify-toolsdnf install inotify-tools

使用 inotifywait 监控单个文件:

inotifywait -m /path/to/file.txt

参数说明:

  • -m:持续监控模式(monitor)
  • -e modify,create,delete:只监听指定事件

示例:监控某个目录下的所有变化

inotifywait -m -r -e modify,create,delete /var/log/
  • -r:递归监控子目录
  • -e:指定关注的事件类型

输出示例:

/var/log/ MODIFY access.log

表示 access.log 文件被修改。

百度文心一格
百度文心一格

百度推出的AI绘画作图工具

下载

在脚本中使用 inotify 实现自动响应

你可以结合 shell 脚本,利用 inotifywait 做到文件一变就触发操作,比如自动重启服务、同步文件或发送通知。

示例:当配置文件变化时打印提示

#!/bin/bash
inotifywait -m -e modify /etc/myapp/config.conf |
while read path action file; do
    echo "检测到 $path$file 被 $action"
    # 可在此处添加 reload 命令
done

这个脚本会一直运行,每当 config.conf 被修改,就会执行 echo 操作。

注意事项与限制

inotify 功能强大,但也有一些使用上的限制:

  • 默认监控的句柄数有限(通常 8192),可通过修改 /proc/sys/fs/inotify/max_user_watches 提高上限
  • 只能监控本地文件系统,NFS 等网络文件系统支持有限
  • 不记录谁触发了事件,仅报告发生了什么
  • 软链接本身的变化不会被监听,除非直接监控该链接文件

查看当前系统 inotify 限制:

cat /proc/sys/fs/inotify/max_user_watches

临时增加监听数量:

echo 16384 > /proc/sys/fs/inotify/max_user_watches

永久生效需写入 /etc/sysctl.conf:

fs.inotify.max_user_watches=16384

基本上就这些。通过 inotify,你可以高效地实现对关键文件和目录的实时监控,避免轮询带来的性能浪费。无论是开发调试、运维自动化还是安全审计,都是很实用的技术手段。

相关专题

更多
数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

269

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

208

2023.12.29

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1347

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

701

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

571

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

545

2023.07.20

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

10

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号