使用Inotify监控文件及文件夹
创作时间:
作者:
@小白创作中心
使用Inotify监控文件及文件夹
引用
CSDN
1.
https://blog.csdn.net/m1729339749/article/details/137602725
Inotify是Linux内核提供的一种文件变化通知机制,可以高效地监控文件系统的变化。本文将详细介绍如何在Linux系统中使用Inotify进行文件和目录的监控,包括环境配置、命令使用以及相关参数的设置。
一、判断内核支持Inotify
在使用Inotify之前,需要确认当前系统是否支持该功能。可以通过以下命令检查:
grep "CONFIG_INOTIFY_USER" /boot/config-$(uname -r)
如果输出内容中包含CONFIG_INOTIFY_USER=y
,说明操作系统支持Inotify。
二、安装inotify-tools
inotify-tools是一个用于监控文件系统变化的工具集,包含inotifywait
和inotifywatch
两个主要命令。以下是安装步骤:
下载与解压缩
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
目录进行以下操作:
- 新建一个文件夹(
mkdir test
) - 进入test文件夹,创建
text.txt
文件(cd test && touch text.txt
) - 修改
text.txt
文件的内容(echo 'hello world'>> text.txt
) - 查看
text.txt
文件的内容(more text.txt
) - 删除
text.txt
文件(rm text.txt
) - 进入
/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。
热门推荐
亮氨酸的作用是什么
优化粮食供应链,提升农业可持续发展新模式
比较记忆法帮你突破考研英语易混词
生蚝内部绿色部分可以食用吗
健身小白必看!正确锻炼的5大秘诀
中医养生对健康的重要性
机油寿命剩余多少时进行保养?
基于IPv6的安全策略有效性验证平台建设
破解版ps是否合法使用及安全性风险解析
比逻辑思维更高级的思维方式——复盘思维
平行进口车的关税计算方法是什么?
Nintendo Switch本地合作游戏推荐:35款适合多人同乐的游戏
妙音袅袅,江南丝竹与广东音乐上演“国潮”碰撞
记账式国债投资技巧、发行方式及适用对象全解析
人类为什么不冬眠?
人体体脂率标准及检测方法
人体体脂率标准及测量方法
深入探讨汉字“眷”的读音、含义及其文化内涵
瑜伽初学者、练习者、教练如何选择瑜伽垫?
瑜伽垫材质有哪些?瑜伽垫挑选指南大公开!
拼多多擅自更改退款金额,消费者权益谁来保障?
胶原蛋白食物中的天然之源
10万元预算内可购买的二手越野车推荐
如何辨别银子?这种银子的价值如何判断?
银的种类有哪些?这些种类的特点是什么?
学科教育美术归教育类还是艺术类?分类解析及特点
职场话题|小镇理发师走红网络,是朴素劳动精神回归的生动样本
中医古代六大流派,很多人都不知道~
恩施女儿城最楚非遗文化街:探秘楚文化遗迹与传说故事
航空适航取证:安全标准要求与评审要点