使用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。
热门推荐
五一打卡八公山:寿县古城、珍珠泉一日游全攻略
藏红花的使用剂量应该如何控制?
碳纤维:未来战争的秘密武器?
三化融合:信息火力战的新纪元
重庆出发,邂逅冬日暖阳下的西昌与攀枝花
冬日南京:三大历史名胜的冰雪之美
夫子庙:南京古今交融的新地标
南京五天四夜深度游:中山陵、夫子庙秦淮河和总统府深度探访
南京栖霞山、植物园本周迎最佳观赏期
嘴巴老发干、起皮,别以为是缺水!可能是这种疾病的信号
彼拉多审判耶稣:权力与真理的永恒博弈
彼拉多审判耶稣:权力与道德的永恒冲突
主动刹车系统在什么条件下会自动启动?
一文了解AEB自动紧急制动
碳纤维:改变未来战争的关键材料
2024年信息化武器装备发展趋势揭秘
美国AI武器新突破:智能化作战未来已来
王琦:5种体质的中医调理方
上林湖:慈溪人的悠闲时光打卡地
杭州湾湿地公园:303种候鸟栖息的生态天堂
如何正确使用耳部护理产品?
耳朵总是疼,不是中耳炎,原因竟然是这个
慈溪栲栳山:424米高山上的绝美飞瀑与湖景
《无限大》新情报来袭:探索网易开放世界的独特魅力
《无限大》杭州内测来袭!二次元都市开放世界等你探索
临海:浙江东部的千年古城,古今交融的海滨明珠
临海古城:千年文化的网红打卡地
临海市未来商贸城:新经济引擎启动!
鲁迅故里探秘:重温大师足迹
冬日江南雪景:鲁迅故里与沈园诗意之旅