使用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目录下完成以下操作:
- 新建一个文件夹(
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。
热门推荐
跌破4元!山东莘县甜瓜上市,价格跌30%,后续行情如何?
浅谈图画书中的“图画”的六大作用
如何管理在远程工作中的孤独感
吉利星愿冬季车窗起雾怎么办?四种实用解决方案
疟疾中医机理治疗方案
中医疟疾是什么意思
枸杞的营养价值:从传统典籍到现代科学的全面解读
戏歌:戏曲艺术的另一种表达
长文:回顾《塞尔达传说》系列,38周年的历史(上)
清明为什么插柳?山东人清明戴柳,居然还与一女子冤案有关?
清明节为什么要插柳条
青春期心理解析:初三学生的心理特征与教育策略
抵税的商业健康险包括哪些
牛顿第三定律:作用力与反作用力,宇宙运行的基石
江苏:关于《绿色工厂》认定的相关知识点整理
血压差超过60以上就很危险吗
如何制作个人可视化看板?
打破砂锅问到底!砂锅的选择:实用与美观的完美结合
什么肉嘌呤含量低
十大肉类嘌呤含量排名 10种高嘌呤肉类一览表
前交叉韧带二次断裂!运动医学专家:精准修复,康复锻炼一个不能少
合同续约条款:保障双方权益的关键约定
狗狗中毒后的五大表现及应对方法
营业执照个体户怎么办:从申请到运营的全流程法律指南
水肥一体化施肥模式选择,比例施肥和EC值施肥
BIOS无法识别硬盘的解决方法
9岁女孩出现血尿 妇儿医院超声引导下肾穿刺活检术找出病因
高血压患者不能吃鸡蛋?不想血压升高,3种食物真要少吃
北京产假多少天
益生菌可以長期吃嗎?會不會有依賴性?專家這樣告訴你!