Linux学习-inotify和rsync同步

Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。
Inotify实际基于事件驱动机制,为应用程序监控文件系统事件提供了实时响应事件的机制,无须通过cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界事件机制相符合。
inotify—对同步数据目录信息的监控

rsync —完成对数据信息的实时同步

[root@localhost ~]# ll /proc/sys/fs/inotify
total 0
#max_queued_events设置inotify实例事件(event)队列可容纳的事件数量
-rw-r--r-- 1 root root 0 Jul 18 16:47 max_queued_events
#max_user_instances设置每个用户可运行的inotifywait或inotifywatch命令的进程数。
-rw-r--r-- 1 root root 0 Jul 18 16:47 max_user_instances
#max_user_watches设置inotifywait或inotifywatch命令可以监视的文件数量(单进程).
-rw-r--r-- 1 root root 0 Jul 18 16:47 max_user_watches

编译安装inotify-tools

#编译安装时版本不能过高,过高会报错
[root@localhost inotify-tools-3.14]# ./autogen.sh 
... ...
[root@localhost inotify-tools-3.14]# ./configure
... ...
[root@localhost inotify-tools-3.14]# make && make install
... ...

inotify-tools安装完成后会生成两个工具(命令),inotifywait和inotifywatch
inotifywait在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用

inotifywatch收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

inotifywait使用
inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]
-t , --timeout :如果在设置的秒内没有发生事件,则退出。默认为0,无限期等待。

-r (–recursive): 递归查询目录。

-d(–daemon):自后台运行。

-q(–quiet):如果指定一次,程序不会说明什么时候完成了所有inotify watches的监听。

如果指定两次,程序将不输出任何内容,但致命错误除外。

-m(monitor):不是在接收单个事件之后退出,而是无限期地执行。默认行为是在第一个事件发生后退出。始终保持事件监听状态。

–exclude :对指定的文件不做任何处理,POSIX扩展正则表达式,区分大小写。

–excludei :对指定的文件不做任何处理,POSIX扩展正则表达式,不区分大小写。

–timefmt : 设置由StrfTimes(3)接受的时间格式字符串,转换格式"%T"。

–format : 以用户指定的格式输出,使用类似printf的语法。事件字符串的输出限制在4000个字符左右,超出的部分将会被截断。格式化有:%w,%f,%e,%T。(%w:将会替换为事件发生时被监听的文件,%f: 当一个事件发生在一个目录中时,它将被替换为导致该事件发生的文件名。否则,将替换为空字符串。 %e:替换为发生的事件,以逗号分隔。%T:以–timefmt选项指定的格式替换成当前时间,该格式应该是适合于传递到STFFET(3)的格式字符串。
事件
access从被监视的目录中读取被监视的文件。
modify从被监视的目录中读取被写的文件。
attrib监视目录中元数据被修改的文件,这包括时间戳、文件权限、扩展属性等。
close_write监视目录中的文件以可写模式打开后被关闭。文件不一定写入内容。
close_nowrite监视目录中的文件以只读模式打开后被关闭。
close监视目录中的文件已关闭,不管它是如何打开的。实际上是通过监视close_write和close_nowrite来实现的,因此接收到的所有close事件都将作为其中之一输出,而不是close。
open已打开监视目录中的文件。
moved_to文件或目录已移动到监视目录中。即使文件从同一目录移动,也会发生此事件。
moved_from文件或目录从监视目录中移动。即使文件从同一目录移动,也会发生此事件。
move一个文件或目录被从一个被监视的目录移动到另一个被监视的目录。实际上是通过监听moved和moved两个目录来实现的,因此所有接收到的关闭事件都将作为其中的一个或两个输出
move_self监视的文件或目录已被移动。在此事件之后,不再监视文件或目录。
create文件或目录在监听目录中被创建。
delete文件或目录在监听目录中被删除。
delete_self监视的文件或目录已被删除。在此事件之后,不再监视该文件或目录。即使没有显式地监听此事件,也可能发生此事件。
unmount 已卸载监视文件或目录所在的文件系统。在此事件之后,不再监视文件或目录。即使没有显式地监听此事件,也可能发生此事件。

#-h查看帮助信息
[root@localhost ~]# inotifywait -h
inotifywait 3.13
Wait for a particular event on a file or set of files.
Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
Options:-h|--help     	Show this help text.@<file>       	Exclude the specified file from being watched.--exclude <pattern>Exclude all events on files matching theextended regular expression <pattern>.--excludei <pattern>Like --exclude but case insensitive.-m|--monitor  	Keep listening for events forever.  Withoutthis option, inotifywait will exit after oneevent is received.-d|--daemon   	Same as --monitor, except run in the backgroundlogging events to a file specified by --outfile.Implies --syslog.-r|--recursive	Watch directories recursively.--fromfile <file>Read files to watch from <file> or `-' for stdin.-o|--outfile <file>Print events to <file> rather than stdout.-s|--syslog   	Send errors to syslog rather than stderr.-q|--quiet    	Print less (only print events).-qq           	Print nothing (not even events).--format <fmt>	Print using a specified printf-like formatstring; read the man page for more details.--timefmt <fmt>	strftime-compatible format string for use with%T in --format string.-c|--csv      	Print events in CSV format.-t|--timeout <seconds>When listening for a single event, time out afterwaiting for an event for <seconds> seconds.If <seconds> is 0, inotifywait will never time out.-e|--event <event1> [ -e|--event <event2> ... ]Listen for specific event(s).  If omitted, all events are listened for.Exit status:0  -  An event you asked to watch for was received.1  -  An event you did not ask to watch for was received(usually delete_self or unmount), or some error occurred.2  -  The --timeout option was given and no events occurredin the specified interval of time.Events:access		file or directory contents were readmodify		file or directory contents were writtenattrib		file or directory attributes changedclose_write	file or directory closed, after being opened inwriteable modeclose_nowrite	file or directory closed, after being opened inread-only modeclose		file or directory closed, regardless of read/write modeopen		file or directory openedmoved_to	file or directory moved to watched directorymoved_from	file or directory moved from watched directorymove		file or directory moved to or from watched directorycreate		file or directory created within watched directorydelete		file or directory deleted within watched directorydelete_self	file or directory was deletedunmount		file system containing file or directory unmounted

rsync 是一个常用的 Linux 应用程序,用于文件同步,它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。
使用方法

#拷贝当前机器上的test.txt至192.168.0.109服务器的root目录下
[root@localhost ~]# touch test.txt
[root@localhost ~]# ls
anaconda-ks.cfg     inotify-tools-3.14.tar.gz  install.log.syslog
inotify-tools-3.14  install.log                test.txt
[root@localhost ~]# rsync -r test.txt 192.168.0.109:/root
The authenticity of host '192.168.0.109 (192.168.0.109)' can't be established.
RSA key fingerprint is 3c:42:8a:c5:84:28:0f:22:ef:1a:39:7f:c4:33:48:2c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.109' (RSA) to the list of known hosts.
root@192.168.0.109's password: 
#同时拷贝两个文件至远程服务器的目录,拷贝的时候文件的修改时间会发生变化
[root@localhost ~]# rsync test1.txt test2.txt 192.168.0.109:/root
#使用-a(--archive)参数拷贝数据时,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以-a比-r更有用
[root@localhost ~]# rsync -a test3.txt 192.168.0.109:/root
#使用-n参数模拟命令执行的结果,并不真的执行命令。-v参数则是将结果输出到终端,这样就可以看到哪些内容会被同步。
[root@localhost ~]# rsync -anv *.txt 192.168.0.109:/root
root@192.168.0.109's password: 
sending incremental file list
test.txt
test1.txt
test2.txt
test3.txtsent 90 bytes  received 24 bytes  32.57 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)#--delete用于同步两个目录,保持两个目录下内容同步
[root@localhost ~]# rsync -av --delete txtdirectory/ 192.168.0.109:/root/txtDirectory
root@192.168.0.109's password: 
sending incremental file list
./
deleting a.txt
test.txt
test2.txt
test3.txtsent 201 bytes  received 72 bytes  78.00 bytes/sec
total size is 0  speedup is 0.00
#--version查看版本号
[root@localhost ~]# rsync --version
rsync  version 3.0.6  protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,append, ACLs, xattrs, iconv, symtimesrsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM系列(五) -内存相关的调优参数

一、摘要 在上篇文章中,我们详细介绍了 JVM 的内存布局。 今天这篇文章,并结合之前的介绍知识,一起了解一下 JVM 内存相关的调优参数。 二、内存设置相关的命令 所有内存溢出的问题,除了代码可能存在问题以外,更直观的问题是内存空间不足,如何通过参数来控制各区域的…

Puppeteer-Cluster:并行处理网页操作的新利器

在现代Web开发和自动化测试领域&#xff0c;高效地处理多个网页操作任务成为了许多开发者和测试工程师的迫切需求。传统的Puppeteer工具虽然功能强大&#xff0c;但在处理大量并发任务时可能会显得力不从心。为此&#xff0c;Puppeteer-Cluster应运而生&#xff0c;作为一个基于…

不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信

不小心删除了一条短信&#xff0c;或者丢失了所有短信&#xff1f;希望还未破灭&#xff0c;下面介绍如何在 iPhone 上查找和恢复已删除的短信。 短信通常都是非正式和无关紧要的&#xff0c;但短信中可能包含非常重要的信息。因此&#xff0c;如果您删除了一些短信以清理 iPh…

030集——自动弹出对话框、选择文件并播放wav音频文件(winform窗体)——C#学习笔记

如图所示&#xff0c;效果如下&#xff1a; 步骤如下&#xff1a; 新建一个winform窗体&#xff0c;双击界面&#xff0c;进入代码区&#xff1a; 复制&#xff08;下面代码中命名空间内的代码&#xff09;到&#xff08;你的命名空间下&#xff09;&#xff0c;运行。 using …

ZBrush入门使用介绍——12、折边

大家好&#xff0c;我是阿赵。   继续介绍ZBrush的功能。   如果拿一个立方体&#xff0c;进行CtrlD增加细分 会出现在边缘的线会被平滑的情况&#xff0c;这时候原来立方体的形状会发生一定的变化&#xff0c;不能保持原来的形状。 如果立方体真的只有8个顶点&#xff0…

266-基于Xilinx Kintex-7 XC7K325T 的12路光纤Switch交换平台

一、板卡概述 该系统是由两块模块组成&#xff0c;分别是基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900 的模块和一个FPGA夹层卡&#xff08;FMC&#xff09;模块。前者支持64bit DDR3容量2GByte&#xff0c;USB3.0接口;HPC的FMC连…

C++: set与map容器的介绍与使用

本文索引 前言1. 二叉搜索树1.1 概念1.2 二叉搜索树操作1.2.1 查找与插入1.2.2 删除1.2.3 二叉搜索树实现代码 2. 树形结构的关联式容器2.1 set的介绍与使用2.1.1 set的构造函数2.1.2 set的迭代器2.1.3 set的容量2.1.4 set的修改操作 2.2 map的介绍与使用2.2.1 map的构造函数2.…

【尚跑】2024陕西淳化天然氧吧半程马拉松赛149顺利完赛

1、赛事背景 奔跑美丽淳化&#xff0c;畅游天然氧吧。9月8日上午&#xff0c;2024淳化天然氧吧半程马拉松赛在淳化县润镇东街鸣枪开跑&#xff0c;4000名马拉松爱好者相聚美丽淳化&#xff0c;赏荞麦花海、闻硕果飘香&#xff0c;共同开启这场挑战自我、超越极限的奔跑之旅 本次…

游戏的3C,Al

在游戏开发中&#xff0c;“3C”通常指的是三个重要的组成部分&#xff1a;Character&#xff08;角色&#xff09;、Camera&#xff08;摄像机&#xff09;和Control&#xff08;控制&#xff09;。这三者对于创建沉浸式和流畅的游戏体验至关重要。而AI&#xff08;人工智能&a…

flask下https教程

一、定义 linux 下flask https 协议 二、实现 linux 下flask https 协议 生成SSL证书和密钥文件。您可以使用工具如openssl来生成自签名SSL证书和密钥文件。运行以下命令生成证书和密钥文件&#xff1a; openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout…

django实操:换用自建mysql用户表(一次失败的经历)

前言 别想了&#xff0c;基础不扎实的话&#xff0c;还是老老实实用django自带的用户模块吧&#xff01;这是一次耗时而且失败了的经历。 因为是一次失败的经历&#xff0c;这里我给出一些残酷的经验。 实操 重写用户模型 这是我唯一成功的案例&#xff0c;你需要建一个类似如下…

springboot 的共享session方案?

问&#xff1a;springboot 的共享session方案&#xff1f; 参考&#xff1a; https://juejin.cn/post/7195227930077691963分布式之session共享问题 4种解决方案及spring session的使用_分布式session共享方案-CSDN博客 什么是 Session &#xff1f; 答&#xff1a;因为Http协…

JavaScript web API part1

web API 前言 变量声明 const优先&#xff0c;可变再改为let 原因&#xff1a; 语义化更好若以后变量不改变&#xff0c;就应用const声明实际开发中&#xff0c;react框架中基本都是从const [!IMPORTANT] 基本变量中数据若改变&#xff0c;则不可用const 数组&#xff0c;对…

计算机毕业设计Python+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

《Tensorflow股票预测系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和金融市场的日益复杂化&#xff0c;股票作为金融市场的重要组成部分&#xff0c;其价格波动受到广泛关注。传统的股票预测方法如技术分析和基本面分析&#xff0c;虽然在一定程度上能够辅助投…

应用基本期末

选 以下哪些属于Java的三大特性&#xff1a; a. 抽象 b. 封装 c. 面向对象 d. 分布式 e. 安全性 f. 平台独立 以下哪些是Object的公用方法&#xff1f; a. equals() b. getContext() c. notify() d. toString() e. clone() int和integer两个谁更占用内存&#xff1f; a. Int …

如何查询、统计品牌在社媒平台的品牌声量?

现在各平台的竞争越来越激烈&#xff0c;企业想做好在社媒平台上的品牌营销&#xff0c;就需要时刻监测品牌声量的大小&#xff0c;比如企业品牌声量趋势、品牌sov值、搜索指数等相关指标&#xff0c;辅助衡量品牌宣传效果如何。那怎么去查询统计品牌声量情况呢&#xff1f;可以…

myql笔记三(表设计)

如何设计好一张表呢&#xff1f; 1 设计的表达到什么要求&#xff1f; 1.1 首先能满足业务需求&#xff1b; 1.2 增删改查性能尽可能高&#xff1b; 1.3 扩展方便&#xff1b; 1.4 命名规范&#xff1b; 2 明确该表的使用场景&#xff1f; 对每日数据增量和数据全量进行评估&a…

获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组

核心代码 // 获取多行文本内容&#xff0c;去掉首尾空格、去掉空字符串&#xff0c;解析为文本数组 getMultiLineTexts(textareaValue) {return textareaValue.split("\n").map((v) > v.split("\t").join("").trim()).filter((v, i, ar) &g…

@RabbitListener 注解详解

前言&#xff1a; RabbitListener 注解是 Spring AMQP 提供的注解&#xff0c;用于简化 RabbitMQ 消息监听器的创建&#xff0c;我们在方法上添加 RabbitListener 注解&#xff0c;就可以将方法注册为消息监听器&#xff0c;监听 RabbitMQ 的消息&#xff0c;本篇我们来分析一…

数据库的操作:SQL语言的介绍

一.前言 SQL是一种结构化查询语言。关系型数据库中进行操作的标准语言。 二.特点 ①对大小写不敏感 例如&#xff1a;select与Select是一样的 ②结尾要使用分号 没有分号认为还没结束; 三.分类 ①DDL&#xff1a;数据定义语言&#xff08;数据库对象的操作&#xff08;结…