文章目录
- 一、前言
- 1、什么是inotify和inotify-tools
- 2、检查系统是否支持inotify
- 二、安装使用inotify-tools
- 1、获取安装包
- 2、编译安装
- 3、脚本编写
- 4、使用
一、前言
1、什么是inotify和inotify-tools
Inotify是一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
inotify-tools包括一个C库和一组命令行工具,可在命令行下提供对文件系统事件的监控。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:
1 2 3 | 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,如果可以看到如下三个文件,则代表支持
1 | ls -lsart /proc/sys/fs/inotify |
二、安装使用inotify-tools
1、获取安装包
https://github.com/inotify-tools/inotify-tools
2、编译安装
1 2 3 4 5 | 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、脚本编写
创建监控脚本目录、脚本、被监控文件或目录清单文件
1 | mkdir -p /usr/local/inotify/shell && touch /usr/local/inotify/shell/{watch.sh,file} |
编写监控脚本,比如要监控root目录,并将监控到的这个目录下的所有变化都记录到一个名为inotify.log的文件中,清单文件file中填写/root的完整路径,如果要监控多个,一个文件一行
1 | vim /usr/local/inotify/shell/watch.sh |
1 2 | #!/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' |
- 参数解释:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | –timefmt 时间格式 –format 输出格式 -e 定义监控的事件,可用参数: open 打开文件 modify 修改文件 delete 删除文件 create 新建文件 attrib 属性变更 move 移动文件 –outfile 输出到一个文件 –fromfile 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头 |
4、使用
启动监控脚本
1 2 3 4 5 | cd /usr/local/inotify/shell/ chmod +x watch.sh ./watch.sh & |
对被监控的root目录进行一个操作,比如我上传一个文件speedtest-cli,然后去查看inotify.log日志,可以看到记录到的上传的完整信息