Ubuntu inotify实用技巧汇总
inotify-tools是Ubuntu下使用inotify的核心命令行工具集,包含inotifywait(监控事件)和inotifywatch(统计事件)两个主要命令。通过以下命令快速安装:
sudo apt update && sudo apt install inotify-tools -y
安装完成后,即可通过inotifywait或inotifywatch命令调用功能。
使用inotifywait的-m(持续监控)选项,可实时查看指定目录下的文件变化。例如,监控/home/user/documents目录的所有事件:
inotifywait -m /home/user/documents
输出结果会显示事件类型(如CREATE、DELETE、MODIFY)及对应的文件路径。
通过-e选项筛选需要监控的事件,避免无关信息干扰。常见事件包括:
create:文件/目录创建;delete:文件/目录删除;modify:文件内容修改;moved_to/moved_from:文件移动到/移出监控目录;attrib:文件元数据(如权限、时间戳)修改。示例:仅监控/home/user/documents目录的创建、删除和修改事件:
inotifywait -m -e create,delete,modify /home/user/documents
默认情况下,inotifywait仅监控指定目录的第一层。若需要监控所有子目录,添加-r(递归)选项:
inotifywait -m -r /home/user/documents
该命令会递归监控documents目录下的所有子目录及文件的变化。
通过--format和--timefmt选项,自定义输出内容的格式,便于后续处理(如日志分析)。
--timefmt:定义时间格式(如%Y-%m-%d %H:%M:%S);--format:定义输出模板(可使用%w表示目录路径、%f表示文件名、%e表示事件类型)。示例:输出带时间戳的详细事件信息(格式为“时间 目录 文件 事件”):
inotifywait -m -r -e create,modify,delete --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f %e' /home/user/documents
输出结果类似:2025-10-31 14:30:00 /home/user/documents/test.txt CREATE。
通过-t选项设置监控的超时时间(单位:秒),超时后inotifywait自动退出。例如,监控10秒后停止:
inotifywait -m -t 10 /home/user/documents
该技巧适用于临时监控场景(如测试时观察短时间内文件变化)。
将inotifywait与Shell脚本结合,实现事件触发后的自动化操作(如备份、重启服务、推送通知)。示例:监控目录变化并自动提交Git仓库:
#!/bin/bash
DIRECTORY="/home/user/documents"
inotifywait -m -r -e create,modify,delete "$DIRECTORY" --format '%w%f %e' | while read FILE EVENT; do
echo "Detected change: $FILE ($EVENT)"
git -C "$DIRECTORY" add "$FILE"
git -C "$DIRECTORY" commit -m "Auto-update: $EVENT $FILE"
git -C "$DIRECTORY" push origin main
done
保存为auto_git.sh,赋予执行权限后运行:chmod +x auto_git.sh && ./auto_git.sh。
使用inotifywatch命令统计指定目录在指定时间内的事件发生次数。例如,监控/home/user/documents目录1分钟内的事件统计:
inotifywatch -m -t 60 /home/user/documents
输出结果会显示各类事件的总次数(如CREATE、MODIFY的数量),帮助分析文件系统的活跃程度。
通过IN_MOVED_FROM(文件移出)和IN_MOVED_TO(文件移入)事件组合,可实现文件移动的完整跟踪(需结合cookie值关联两个事件)。示例:
inotifywait -m -e moved_from,moved_to /home/user/documents
输出结果中,MOVED_FROM事件会携带cookie值(如12345),MOVED_TO事件的cookie值与之匹配,可用于判断文件是移动还是重命名。
此外,IN_MOVE_SELF事件可监控监控目录本身的移动(如mv /home/user/documents /tmp),触发后会收到IN_IGNORED事件(监控终止)。
-e选项仅监控必要的事件(如modify而非所有事件),减少事件数量;&将监控命令放入后台,避免占用终端(如inotifywait -m /path &)。这些技巧可提升inotify的运行效率,适用于长期监控场景。