首页 > 系统相关 >Rocky Linux 系列6 --- inotify-tools

Rocky Linux 系列6 --- inotify-tools

时间:2023-03-18 12:11:29浏览次数:74  
标签:文件 inotifywait inotify Linux --- 事件 监视 目录

一、概念

1. 环境

(1) Rocky Linux 9.1

(2) inotify-tools 3.22.1.0

2. 概念

inotify用于监控文件或目录的改变,当文件或目录发生改变时inotify将触发通知。

3. 承上启下

(1) Rock Linux 系列4 --- SSH

(2) Rocky Linux 系列5 --- rsync

二、安装与命令

1. 安装

(1) 安装epel库

sudo dnf install -y epel-release
sudo dnf update -y

(2) 安装inotify

sudo dnf install inotify-tools -y

2. inotifywait

inotifywait使用inotify接口有效的等待文件的改变。

(1) 格式

inotifywait [-hcmrq] [-e <event> ] [-t <seconds> ] [--format <fmt> ] [--timefmt <fmt> ] <file>

-h: 输出帮助信息;

-c: 以CSV格式(逗号分割)的方式进行信息输出;

-m: 进行持续监控而不退出,默认情况下当inotifywait收到一个事件之后会退出;

-r: 递归的监控所有子目录。注意inotifywait会针对每一个子目录创建一个监视器,默认情况下它最大的限制是8192个监视器;

-q: 安静模式,如果该参数被指定一次,则输出信息会减少;如果该参数被指定两次,程序仅会输出严重错误信息;

-e: 指定需要监控的事件,inotifywait支持以下事件:

access: 被监视的文件或被监视的目录中的文件被读取;

modify: 被监视的文件或被监视的目录中的文件被修改;

attrib: 被监视的文件或被监视的目录中的文件的metadata被修改。包含:timestamp,file permission,扩展的属性等;

close_write: 被监视的文件或被监视的目录中的文件从打开写入模式变为关闭时的事件;

close_nowrite: 被监视的文件或被监视的目录中的文件从打开只读模式变为关闭的事件;

close: 被监视的文件或被监视的目录中的文件从打开模式(无论是可写入状态还是只读模式)变为关闭时的事件;

open: 被监视的文件或被监视的目录中的文件被打开时的事件;

moved_to: 把一个文件或者目录移动到被监视的目录中时的事件,当文件在被监视的目录中移动时也会触发该事件;

moved_from: 把一个存在于被监视的目录中的文件或者目录移动时的事件,当文件在被监视的目录中移动时也会触发该事件;

move: 该事件是moved_to和moved_from两个事件的上层调用;

move_self: 被监视的文件或被监视的目录中的文件被移动的事件,当该事件被触发后,该文件或目录将不会再被监视;

create: 在被监视的目录中有文件或目录被创建时触发的事件;

delete: 在被监视的目录中有文件或目录被删除时触发的事件;

delete_self: 在被监视的目录中有文件或目录被删除时触发的事件,当该事件被触发后,该文件或目录将不会再被监视;

unmount: 当被监视的文件或目录所在的文件系统被卸载时所触发的事件,当该事件被触发后,该文件或目录将不会再被监视。

(2) 应用

a. 监视目录/tmp

inotifywait -m /tmp

当/tmp有文件变动时:

touch /tmp/hello
cp /etc/passwd /tmp
rm /tmp/passwd
touch /tmp/goodbye
rm /tmp/hello /tmp/goodbye

inotifywait会打印提示:

b. 监视目录及其子目录的create, delete, modify事件:

inotifywait -r -e modify,create,delete /home/userDir/Documents

三、自动同步方案

利用上文讲到的SSHrsync和inotify,我们可以实现当某一目录(如网站或数据备份目录)发生变化时,由inotify触发rsync将已经改变的文件同步至目标服务器。

1. 思路

(1) 我们需要解决什么问题?

a. 网站发布之后多个节点的文件同步;

b. 数据库备份文件发生变更后传递到备份服务器;

(2) 如何解决?

a. 首先需要搭建通过公钥验证的SSH登录方式,参考Rock Linux 系列4 --- SSH

b. 安装rsync和inotify;

d. 创建配置文件,内容为需要同步(监控)的目录或文件,当文件或目录变更后需要同步的目标服务器以及目标目录也需要考虑;

e. 编写脚本读取d中的配置文件并对其内容使用inotifywait进行监控,当有监控时间产生时调用rsync进行后续处理;

f. 创建Linux Service将脚本以守护进程的方式进行维护;

2. 格式

(1) 脚本伪代码

while <list of conditions>
do
<list of commands>
done

a. "list of condifitions"将监控所有需要监控的目录或文件,我们将在这里调用inotifywait命令;

b. "list of commands"是当被监控的目录或文件有事件发生时所调用的命令,我们将在这里调用rsync命令;

(2) 代码示例

while inotifywait -r -e modify,create,delete origenFolder
do
rsync -avz origenFolder/ destinationFolder
done

四、参考

1. 命令

https://linux.die.net/man/7/inotify

https://linux.die.net/man/1/inotifywait

2. 其他

https://linuxhint.com/inotofy-rsync-bash-live-backups/

https://bartsimons.me/sync-folders-and-files-on-linux-with-rsync-and-inotify/

https://www.linuxjournal.com/content/linux-filesystem-events-inotify

标签:文件,inotifywait,inotify,Linux,---,事件,监视,目录
From: https://www.cnblogs.com/eagle6688/p/17198332.html

相关文章

  • 【Android开发】范例2-带图标的列表对话框
    根据之前学的Android对话框技术,来实现下面一个效果:界面有一个"打开设置对话框"按钮,将弹出选择项目的对话框,单击任意列表项,都将关闭该对话框,并通过消息......
  • 【Android开发】Bundle和Intent实例1-实现根据身高计算标准体重
    编写一个实例来实现Bundle在Activity之间传递信息和Intent跳转Activity页面的效果。此实例是让用户输入性别和身高,以此来判断用户的最佳合适的体重(......
  • 【Android 逆向】【攻防世界】boomshakalaka-3
    1.apk安装到手机,是一个cocos2dx写的打飞机的游戏题目描述跟得分有关(题目描述:playthegame,getthehighestscore)2.jadx打开apkpublicclassFirstTestextend......
  • 【转】android中的armeabi、armeabi-v7a、arm64-v8a及x86等
    1.Android设备的CPU类型armeabiv-v7a:第7代及以上的ARM处理器。2011年15月以后的生产的大部分Android设备都使用它.arm64-v8a:第8代、64位ARM处理器,很少设备,三星Ga......
  • Ubuntu vmware-tool复制问题
    解决无法往VMware虚拟机复制粘贴文件的问题 日常使用VMwareplayer安装了Ubuntu22.04系统,发现从主机复制文件到虚拟机,虚拟机的文件管理器会奔溃。经过多次测试,解......
  • flask-数据库
    mysql安装:centos服务器安装mariadbyum-ymariadb-serverwin开发机直接安装绿色免安装版mysql.搭配HeidiSQL,如果需要远程连接服务器上数据库用xshell驱动安装f......
  • 【Python从入门到进阶】10、流程控制语句-循环语句(for-while)
    接上篇《9、流程控制语句-条件语句(if-else)》上一篇我们学习了Python的控制流语句的概念,以及其中的条件语句(if/else),本篇我们来学习控制流语句中的循环语句(for/while)。......
  • 【网络工程】9、实操-万达酒店综合项目(三)
    接上篇《​​8、实操-万达酒店综合项目(三)​​》之前我们按照项目要求进行模拟拓扑的构建实操,完成了办公区部分的网络配置,本篇我们来继续完成其他区域的网络配置。一、总体......
  • 幂等性-防重 Token 令牌
    方案描述:针对客户端连续点击或者调用方的超时重试等情况,例如提交订单,此种操作就可以用Token的机制实现防止重复提交。简单的说就是调用方在调用接口的时候先向后端请求一......
  • jvm jstat -gcutil 参数详解
    jstat-gcutil854410008544进程ID,用jps命令查出1000单位毫秒,每秒读取一次S0survivor0使用百分比S1survivor1使用百分比EEden区使用百分比O老年代使用百分比M......