1. 安装inotify-tools
在Debian上使用inotify的第一步是安装inotify-tools包,它提供了inotifywait(实时监控)和inotifywatch(统计事件)两个核心命令行工具。打开终端,依次执行以下命令更新软件包列表并安装:
sudo apt update
sudo apt install inotify-tools
安装完成后,即可通过inotifywait和inotifywatch命令使用inotify功能。
2. 使用inotifywait监控文件/目录变化
inotifywait是实时监控工具,常用场景及示例:
/home/user/Documents)的所有变化,-m表示持续模式(直到手动终止):inotifywait -m /home/user/Documents
create、删除delete、修改modify),用逗号分隔:inotifywait -m -e create,delete,modify /home/user/Documents
-r选项,监控目录及其所有子目录的变化:inotifywait -m -r /home/user/Documents
--format指定输出模板(%w表示路径,%f表示文件名,%e表示事件类型),--timefmt定义时间格式,便于日志记录:inotifywait -m -r -e create,delete,modify --format '%w%f %e' --timefmt '%Y-%m-%d %H:%M:%S' /home/user/Documents
/var/log/inotify.log),>>表示追加,2>&1将错误输出合并到标准输出,&让命令在后台运行:inotifywait -m -r -e create,delete,modify --format '%w%f %e' /home/user/Documents >> /var/log/inotify.log 2>&1 &
3. 使用inotifywatch统计事件发生次数
inotifywatch用于统计指定时间内文件系统事件的发生频率,适用于分析事件分布。常用示例:
/home/user/Documents目录60秒,-t指定监控时间(秒):inotifywatch -t 60 /home/user/Documents
-e指定事件类型:inotifywatch -t 60 -e create,delete,modify /home/user/Documents
执行后,命令会输出事件总次数、每种事件的触发次数及占比。
4. 编写监控脚本自动化处理
通过Shell脚本结合inotifywait,可实现事件触发时的自动化操作(如发送通知、备份文件)。示例脚本(monitor.sh)监控/home/user/Documents目录,记录事件到日志并发送桌面通知:
#!/bin/bash
MONITOR_DIR="/home/user/Documents"
LOG_FILE="/var/log/inotify.log"
# 清空日志文件
> "$LOG_FILE"
# 持续监控并处理事件
inotifywait -m -r -e create,delete,modify --format '%w%f %e' "$MONITOR_DIR" | while read FILE EVENT; do
# 记录事件到日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - $FILE - $EVENT" >> "$LOG_FILE"
# 发送桌面通知(需安装notify-send)
notify-send "inotify事件提醒" "文件 $FILE 发生了 $EVENT 事件"
done
chmod +x monitor.sh./monitor.sh(前台运行),或添加到~/.bashrc或systemd服务中实现开机自启。5. 配置systemd服务实现开机自启
若需让监控脚本在系统启动时自动运行,可创建systemd服务文件:
sudo nano /etc/systemd/system/inotify-monitor.service,添加以下内容(替换/path/to/monitor.sh为脚本实际路径,your_username为运行脚本的用户):[Unit]
Description=Inotify Monitor Service
After=network.target
[Service]
ExecStart=/path/to/monitor.sh
Restart=always
User=your_username
Group=your_username
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl start inotify-monitor.service
sudo systemctl enable inotify-monitor.service
sudo systemctl status inotify-monitor.service(确认服务运行正常)。6. 注意事项
max_user_watches)可能不足以监控大量文件,需修改内核参数。执行以下命令临时生效(重启后失效):echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
永久生效则将以下内容添加到/etc/sysctl.conf文件末尾,然后执行sudo sysctl -p:fs.inotify.max_user_watches=524288