使用inotify-tools监控文件夹或文件的变动

文章目录

  • 一、前言
    • 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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGm3QQfA-1590028366909)(D17E6909197E48179AFEE5FA7F957922)]

二、安装使用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的完整路径,如果要监控多个,一个文件一行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7jH8Z1M-1590028366912)(FEB1BEBC57DE40958048DDFB7AF621FC)]

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日志,可以看到记录到的上传的完整信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t94pjjuX-1590028366916)(58244B96F2BD4EF9B89CA464F27D6CF8)]