一、前言
1、什么是inotify和inotify-tools
Inotify是一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
inotify-tools包括一个C库和一组命令行工具,可在命令行下提供对文件系统事件的监控。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:
inotifywait命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
inotifywatch命令用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
2、检查系统是否支持inotify
Linux内核从2.6.13开始引入了inotify机制,所以我们要检查系统内核是否在2.6.13之上,如果低于这个版本,就需要重新编译内核加入inotify的支持
如果内核高于2.6.13版本,则查看系统是否支持inotify,如果可以看到如下三个文件,则代表支持
ls -lsart /proc/sys/fs/inotify
二、安装使用inotify-tools
1、获取安装包
https://github.com/inotify-tools/inotify-tools
2、编译安装
tar -xvf inotify-tools-3.20.2.2.tar.gz
cd inotify-tools-3.20.2.2
./configure --prefix=/usr/local/inotify
make && make install
3、脚本编写
创建监控脚本目录、脚本、被监控文件或目录清单文件
mkdir -p /usr/local/inotify/shell && touch /usr/local/inotify/shell/{watch.sh,file}
编写监控脚本,比如要监控root目录,并将监控到的这个目录下的所有变化都记录到一个名为inotify.log的文件中,清单文件file中填写/root的完整路径,如果要监控多个,一个文件一行
vim /usr/local/inotify/shell/watch.sh
#!/bin/bash
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' -e modify,delete,create,attrib,move,open --outfile '/usr/local/inotify/shell/inotify.log' --fromfile '/usr/local/inotify/shell/file'
- 参数解释:
–timefmt 时间格式
–format 输出格式
-e 定义监控的事件,可用参数:
open 打开文件
modify 修改文件
delete 删除文件
create 新建文件
attrib 属性变更
move 移动文件
–outfile 输出到一个文件
–fromfile 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头
4、使用
启动监控脚本
cd /usr/local/inotify/shell/
chmod +x watch.sh
./watch.sh &
对被监控的root目录进行一个操作,比如我上传一个文件speedtest-cli,然后去查看inotify.log日志,可以看到记录到的上传的完整信息