使用inotifytools监控文件
前言
监控文件变化是一个很常用的功能, 比如监控密码文件, html
文件, 如果被恶意修改, 那就发送一个请求给服务器, 发送短信给管理员。
这里使用inotify-tools
来监控文件变化, 安装命令如下:
1 | apt install -y inotify-tools |
inotify-tools
提供了两个命令:
inotifywait
, 它是用来监控文件或目录的变化inotifywatch
, 它是用来统计文件系统访问的次数
默认内核参数
参数以文件形式存储
文件路径 | 默认值 | 说明 |
---|---|---|
/proc/sys/fs/inotify/max_queued_events |
16384 | 表示调用inotify_init 时分配给inotify instance 中可排队的event 的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW 事件。 |
/proc/sys/fs/inotify/max_user_instances |
128 | 表示每一个real user id可创建的inotify instatnces 的数量上限 |
/proc/sys/fs/inotify/max_user_watches |
8192 | 表示每个inotify instatnces 可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。 |
如修改每个inotify instatnces
可监控的最大目录数量为104857600
1 | echo 104857600 > /proc/sys/fs/inotify/max_user_watches |
inotifywait监控文件变化
部分常用参数说明
参数 | 说明 |
---|---|
-m, --monitor |
一直监听, 不指定则默认在第一个事件发生后结束 |
-r, --recursive |
使用递归形式监视目录, 注意监视文件的数量最多为8192 , 要修改数量需要修改max_user_watches 文件 |
-q, --quiet |
指定一次减少输出信息(仅打印事件), 指定两次不输出非错误信息 |
--timefmt |
指定时间的输出格式, 显示在--format 的%T 中, 格式参考strftime函数 |
--format |
指定日志输出格式, %w 表示发生事件的目录, %f 表示发生事件的文件, %e 表示发生的事件, %Xe 事件名以X 分隔, %T 使用由--timefmt 定义的时间格式 |
--event |
只监听某些事件, 事件参考可监听的事件 |
先来个简单的例子, 监控test
文件夹下的变化。
1 | # 1. 在终端1开启inotifywait, -r表示递归监视, -m表示持续监视, -q表示只输出事件 |
下面来一个复杂点的例子, 后台监控test
文件夹变化, 并将变化内容发送到邮箱。(注意! 这种注释方式会损耗性能! 这里只是为了直观才加的注释)
1 | # 安装依赖 |
inotifywatch统计访问次数
一个简单的例子, 监控test
文件夹下60s
内的变化次数
1 | inotifywatch -v -e modify,delete,create,attrib,move,open,close,access -e modify -t 60 -r test/ |