Debian中inotify的使用教程
导读:Debian 中 inotify 使用教程 一 简介与安装 inotify 是 Linux 内核提供的文件系统事件监控机制,可监听如 创建(create 、删除(delete 、修改(modify 、移动(move 等事件。日常在 De...
Debian 中 inotify 使用教程
一 简介与安装
- inotify 是 Linux 内核提供的文件系统事件监控机制,可监听如 创建(create)、删除(delete)、修改(modify)、移动(move) 等事件。日常在 Debian 上使用 inotify,通常通过 inotify-tools 提供的命令行工具 inotifywait 与 inotifywatch 快速上手。安装命令:sudo apt update & & sudo apt install inotify-tools。安装后即可使用命令行工具进行监控与统计。
二 命令行快速上手
- 持续监控目录并输出事件
- 命令:inotifywait -m -r -e create,delete,modify /path/to/dir
- 说明:
- -m/–monitor:持续监控,而非触发一次后退出
- -r/–recursive:递归监控子目录
- -e/–event:指定事件类型(如 create、delete、modify、move 等)
- 统计一段时间内事件数量
- 命令:inotifywatch -t 60 -e create,delete,modify /path/to/dir
- 说明:-t 60 表示统计 60 秒内的事件次数与分布
- 自定义输出格式便于脚本处理
- 命令:inotifywait -m -r -e create,delete,modify --format ‘%w%f %e’ /path
- 说明:%w%f 输出文件完整路径,%e 输出事件列表(逗号分隔)
三 实用脚本示例
- 示例一 记录事件到日志
- 脚本 monitor.sh
#!/bin/bash
DIR=“/path/to/dir”
LOG=“/var/log/inotify.log”
inotifywait -m -r -e create,delete,modify --format ‘%T %w%f %e’ “$DIR” |
while IFS= read -r line; do echo “$line” > > “$LOG” done - 运行与权限
- chmod +x monitor.sh
- ./monitor.sh
- 脚本 monitor.sh
#!/bin/bash
DIR=“/path/to/dir”
LOG=“/var/log/inotify.log”
inotifywait -m -r -e create,delete,modify --format ‘%T %w%f %e’ “$DIR” |
- 示例二 按事件类型触发动作
- 脚本 sync_on_change.sh
#!/bin/bash
SRC=“/path/to/src”
DST=“/path/to/dst”
inotifywait -m -r -e create,modify --format ‘%w%f %e’ “$SRC” |
while read FILE EVENT; do REL=“${ FILE#$SRC/} ” DEST=“$DST/$REL” if [[ $EVENT == “ISDIR” ]]; then mkdir -p “$DEST” else mkdir -p “$(dirname “$DEST”)” cp -a “$FILE” “$DEST” fi done
- 脚本 sync_on_change.sh
#!/bin/bash
SRC=“/path/to/src”
DST=“/path/to/dst”
inotifywait -m -r -e create,modify --format ‘%w%f %e’ “$SRC” |
- 说明
- 以上示例展示了“日志审计”和“事件驱动同步”两类常见用法,可按需扩展为 备份、自动部署、清理 等自动化流程。
四 作为系统服务运行
-
创建服务文件:/etc/systemd/system/inotify-monitor.service [Unit] Description=Inotify File System Monitor After=network.target
[Service] ExecStart=/usr/bin/inotifywait -m /path/to/dir -e create,delete,modify Restart=always User=nobody Group=nogroup StandardOutput=syslog StandardError=syslog SyslogIdentifier=inotify-monitor
[Install] WantedBy=multi-user.target
-
启用与启动
- sudo systemctl daemon-reload
- sudo systemctl enable --now inotify-monitor.service
-
提示
- 若监控逻辑较复杂,建议将脚本路径写入 ExecStart,保持服务单元简洁稳定。
五 调优与排错
- 常见内核限制与建议值
- 关注以下参数并视监控规模调大:
- fs.inotify.max_user_watches:单用户可创建的监视数量(常见提升到 524288)
- fs.inotify.max_user_instances:单用户可运行的 inotify 实例数(如 1024)
- fs.inotify.max_queued_events:事件队列长度(如 1048576)
- 持久化与生效
- 写入 /etc/sysctl.conf: fs.inotify.max_user_watches=524288 fs.inotify.max_user_instances=1024 fs.inotify.max_queued_events=1048576
- 执行:sudo sysctl -p
- 关注以下参数并视监控规模调大:
- 排查技巧
- 事件丢失或监控不全时,优先检查 watches 是否达到上限,再考虑增加 max_queued_events 以减少丢事件风险
- 使用 strace -e trace=inotify -p 跟踪进程与 inotify 系统调用交互,定位初始化、添加监视、读取事件等环节的问题
- 其他工具
- 需要跨平台或更复杂场景时,可考虑 fswatch 等替代工具(sudo apt install fswatch)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian中inotify的使用教程
本文地址: https://pptw.com/jishu/753801.html
