问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用Inotify监控文件及文件夹

创作时间:
作者:
@小白创作中心

使用Inotify监控文件及文件夹

引用
CSDN
1.
https://blog.csdn.net/m1729339749/article/details/137602725

Inotify是Linux内核从2.6.13版本开始引入的一种文件变化通知机制,可以高效地跟踪文件系统的变化。本文将详细介绍如何在Linux系统中使用Inotify监控文件和目录的变化,包括工具的安装、基本命令的使用以及内核配置参数的调整。

一、判断内核支持Inotify

在使用Inotify之前,需要确认当前系统是否支持该功能。可以通过以下命令检查:

grep "CONFIG_INOTIFY_USER" /boot/config-$(uname -r)

如果输出内容中包含CONFIG_INOTIFY_USER=y,说明操作系统支持Inotify。

二、安装inotify-tools

下载与解压缩

wget https://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
tar zxvf inotify-tools-3.13.tar.gz

配置

cd inotify-tools-3.13
./configure --prefix=/usr/local/inotify-tools-3.13

编译安装

make && make install

配置环境变量

# 删除INOTIFY_TOOLS_HOME配置
sed -i '/INOTIFY_TOOLS_HOME/d' /etc/profile
# 添加INOTIFY_TOOLS_HOME环境变量
echo 'export INOTIFY_TOOLS_HOME=/usr/local/inotify-tools-3.13/' >> /etc/profile
# 添加inotify tools的可执行文件到PATH环境变量
echo 'export PATH=$PATH:$INOTIFY_TOOLS_HOME/bin' >> /etc/profile
# 使环境变量生效
source /etc/profile

三、inotifywait

inotifywait命令用于监控文件及文件夹,可以使用man inotifywait查看命令的帮助文档。

1. 监听

使用inotifywait监控/home文件夹下文件的变化:

# m代表的是循环监听,否则监听到后退出
# r代表的是递归监听,否则只监听指定文件夹下的变化
inotifywait -rm /home

执行命令后,会一直处于阻塞状态。在另一个终端中,依次在/home/dev目录下完成以下操作:

  1. 新建一个文件夹(mkdir test
  2. 进入test文件夹,创建text.txt文件(cd test && touch text.txt
  3. 修改text.txt文件的内容(echo 'hello world'>> text.txt
  4. 查看text.txt文件的内容(more text.txt
  5. 删除text.txt文件(rm text.txt
  6. 进入/home/dev目录,删除test目录(rm -r test

可以看到监听到的日志如下:

2. 排除监听

在某些情况下,可能不想监听某个文件或文件夹的变化,可以使用--exclude排除对指定文件或文件夹的监听。

监控/home文件夹下文件的变化,但不监听/home/dev下的变化:

# m代表的是循环监听,否则监听到后退出
# r代表的是递归监听,否则只监听指定文件夹下的变化
inotifywait --exclude /home/dev -rm /home

再在/home/dev目录下执行创建文件及文件夹等操作,发现已经监听不到。另外,--exclude后面可以使用正则表达式。

四、Inotify配置

内核中有两项关于Inotify的配置:

  • /proc/sys/fs/inotify/max_user_instances规定了每个用户所能创建的 Inotify 实例的上限(默认是128)
  • /proc/sys/fs/inotify/max_user_watches规定了每个Inotify实例最多能关联几个监控 (watch)(默认是8192)

1. 修改用户Inotify实例上限

max_user_instances修改为0:

echo 0 > /proc/sys/fs/inotify/max_user_instances

再使用inotifywait命令进行监听时会失败:

测试结束后将max_user_instances再修改回128。

2. 修改Inotify关联watch上限

max_user_watches修改为0:

echo 0 > /proc/sys/fs/inotify/max_user_watches

再使用inotifywait命令进行监听时会失败:

测试结束后将max_user_watches再修改回8192。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号