最常用方法是使用inotify机制,通过inotifywait命令可实时监控文件变化,结合shell脚本能自动响应事件,Python的pyinotify库支持更复杂逻辑,其他工具如tail -f、auditd和rsync+cron适用于特定场景。

在Linux中监控文件变化,最常用的方法是使用inotify机制。它由内核提供支持,能实时捕捉文件或目录的创建、修改、删除等操作。结合命令行工具或编程接口,可以轻松实现监控功能。
使用 inotifywait 命令监控文件
inotifywait 是 inotify-tools 包中的一个实用工具,适合快速查看文件变化。
安装 inotify-tools:
在 Debian/Ubuntu 系统上:
sudo apt-get install inotify-tools
在 CentOS/RHEL 系统上:
sudo yum install inotify-tools 或 sudo dnf install inotify-tools
使用示例:
- 监控某个目录下的所有变化:
inotifywait -m /path/to/directory - 只监控特定事件,比如写入和创建:
inotifywait -m -e modify,create /path/to/directory - 递归监控子目录:
inotifywait -m -r -e modify /path/to/directory - 持续输出简洁格式:
inotifywait -m –format ‘%T %f %e’ –timefmt ‘%Y-%m-%d %H:%M:%S’ /path/to/file
用 shell 脚本响应文件变化
你可以结合 inotifywait 和脚本,在检测到变化时执行特定操作。
例如,当某个配置文件被修改时自动重启服务:
inotifywait -m -e modify /etc/myapp/config.conf | while read; do
systemctl restart myapp
done
这个循环会一直运行,每次文件被修改都会触发重启命令。
编程方式使用 inotify(Python 示例)
如果你需要更复杂的逻辑,可以用 Python 的 pyinotify 库。
安装 pyinotify:
pip install pyinotify
简单监控脚本:
import pyinotify
class EventHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
print(f”文件 {event.pathname} 已修改”)
wm = pyinotify.WatchManager()
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch(‘/path/to/file_or_dir’, pyinotify.IN_MODIFY)
notifier.loop()
该脚本会持续监听指定路径的修改事件,并打印提示信息。
其他替代工具
- tail -f 日志文件:适用于监控日志追加内容,简单但功能有限。
- auditd:系统级审计工具,可监控文件访问、权限变更等,适合安全审计场景。
- rsync + cron:定期比对文件快照,适合无 inotify 支持的环境,但不实时。
基本上就这些。inotifywait 最适合日常使用,脚本和编程适合自动化任务,而 auditd 更偏向系统审计。选择哪种方式取决于你的具体需求和环境。
linux python centos app ubuntu 工具 ai dnf 配置文件 shell脚本 Python pip print while format Directory 递归 循环 接口 class Event 事件 linux ubuntu centos debian 自动化


