ubuntu下inotifywait实现目录、文件监控【包含子目录】

inotifywait命令

【命令格式】: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ … ]
【命令原意】: inote file system wait
【命令路径】:
【命令功能】: 等待所监听的文件系统触发操作事件
【执行权限】: root
【命令描述】:
众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用通报关于热插拔设备一些事件发生的机制,桌面系统能够利用它对设备进行有效的管理,udev 动态地维护 /dev 下的设备文件,inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知,该机制是著名的桌面搜索引擎项目 beagle 引入的,并在 Gamin 等项目中被应用。

Inotify 是一个内核用于通知用户空间程序文件系统变化的机制,是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能,内核要求2.6.13以上,inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件,Inotify 可以监视的文件系统事件包括:

【常用选项】:
-h 或 --help 显示帮助

@<file> Exclude the specified file from being watched.--exclude <pattern> 指定排除(忽略)部分文件或目录,这些文件或目录上不监听任何事件,正则表达式书写(相对路径)FMT: # --exclude 'Runtime' //忽略对Runtime目录的事件监听--excludei <pattern> 与--exclude相同,区别是此选项正则表达式忽略大小写-m 或 --monitor 持续保持监听(如果不加此选项,则监听到一次后便退出)-d 或 --daemon 以守护进程方式后台运行(除了在后台运行外,与-m选项一样)-r 或 --recursive 递归监听其下所有子目录及文件--fromfile <file> Read files to watch from <file> or `-' for stdin.-o 或 --outfile <file> 将事件输出到指定文件,而不输出到屏幕FMT: -o /var/log/inotifywait.log-s 或 --syslog 将错误发送到系统日志,而不是输出到屏幕-q 或 --quiet 打印较少信息(仅打印事件)-qq 不打印任何信息(静默方式)--format <fmt> 设置打印屏幕的格式,常见选项:%T时间;%w触发事件文件所在绝对路径;%f触发事件文件名称;%e触发的事件名称;FMT: # --format '%T %f %e'--timefmt <fmt> 指定输出时间内容,相当于将时间赋值给%TFMT: # --timefmt '%y-%m-%d %H:%M'-c 或 --csv 用CSV格式打印事件-t 或 --timeout <seconds> 指定一次性监听时间,超时退出监听(值为0表示永不超时,单位:秒),不可与 -m -d 连用FMT: # -t 60 //设定监听60秒,60秒内监听到事件立即退出,如果监听不到事件60秒后也退出-e 或 --event <event1> [ -e|--event <event2> ... ] 指定要监听的事件(多个事件用逗号分割)FMT: # -e 'create,delete,close_write,attrib,moved_to'

【总结提示】:

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.
意外收到一个未监听的事件(如:文件自删除,umount及其它情况)

2 - The --timeout option was given and no events occurred in the specified interval of time.
当给定了超时选项,设定时间内没有事件产生

Events: 事件
access file or directory contents were read 文件或目录被(访问)读取r
modify file or directory contents were written 文件或目录被写入w
attrib file or directory attributes changed 文件或目录属性变更【理由:chmod更改属性】
close_write file or directory closed, after being opened in writeable mode 文件或目录被写关闭【理由:文件内容被更改】
close_nowrite file or directory closed, after being opened in read-only mode 文件或目录以只读方式打开后关闭
close file or directory closed, regardless of read/write mode 文件或目录被用编辑器(不管是读或写)关闭
open file or directory opened 文件或目录被用编辑器打开
moved_to file or directory moved to watched directory 文件或目录被移动进来【理由:mv目录内重命名】
moved_from file or directory moved from watched directory 文件或目录被移动出去
move file or directory moved to or from watched directory 文件或目录不管是移出或移进
create file or directory created within watched directory 文件或目录被创建【理由:mkdir创建目录】
delete file or directory deleted within watched directory 文件或目录被删除【理由:rm删除】
delete_self file or directory was deleted 文件或目录自删除
unmount file system containing file or directory unmounted 文件系统取消挂载

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

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

相关文章

JS向对象中添加和删除属性

向对象中添加属性 语法&#xff1a; 对象.属性名 属性值; 对象[“属性名”] 属性值; //这种方式能够使用特殊的属性名 对象的属性名没有任何要求&#xff0c;不需要遵守标识符的规范&#xff0c;但是在开发中&#xff0c;尽量按照标识符的要求去写。 属性值也可以任意的数据…

规模化微服务——《微服务设计》读书笔记

改变思维的角度&#xff1a;故障无处不在 当微服务规模化后&#xff0c;故障是无可避免的&#xff0c;以往我们总是想尽力避免故障的发生&#xff0c;而当故障实际发生时&#xff0c;我们往往束手无策。我们花了很多时间在流程设计和应用设计的层面上来阻止故障的发生&#xff…

oracle基础

一、Oracle简介&#xff1a; 1.版本&#xff1a;8i/9i-10g/11g(目前我们使用的是11g) 二、数据库&#xff1a; 1.在物理上表现为数据文件、日志文件和控制文件等。 2.在逻辑上以表空间的形式存在 3.首先需要创建数据库才能使用oracle 三、数据库实例&#xff1a; 每个启动的数据…

一个致命的 Redis 命令,导致公司损失 400 万

转载自 一个致命的 Redis 命令&#xff0c;导致公司损失 400 万 最近安全事故濒发啊&#xff0c;前几天发生了《顺丰高级运维工程师的删库事件》&#xff0c;今天又看到了 PHP 工程师在线执行了 Redis 危险命令导致某公司损失 400 万。。 什么样的 Redis 命令会有如此威力&a…

JS中的基本和引用类型传递的比较

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">/** 基本数据类型* String Number Boolean Null Undefined* * 引用数据类型* Object* * JS中的变量都是保…

oracle应用

一、使用jdbc连接oracle数据库&#xff1a; 1.将ojdbc6.jar放在lib中 2.将ojdbc6.jar右击–》build path–>add build path 3.加载驱动&#xff1a; Class.forName(“oracle.jdbc.driver.OracleDriver”); 4.建立连接: Connection conn DriverManage.getconnection(“jdbc:…

./NISwGSP: error while loading shared libraries: libopencv_stitching.so.3.0: cannot open shared obje

error while loading shared libraries: libopencv_highgui.so.3.0: cannot open shared object file: No such file or directory 找不到需要的库。 locate libopencv_imgcodecs.so.3.0 查找这个库的所在目录&#xff0c;发现在/usr/local/opencv-3.0.0/目录下 在/etc/ld.s…

如何在 ASP.NET Core 中发送邮件

前言 我们知道目前 .NET Core 还不支持 SMTP 协议&#xff0c;当我么在使用到发送邮件功能的时候&#xff0c;需要借助于一些第三方组件来达到目的&#xff0c;今天给大家介绍两款开源的邮件发送组件&#xff0c;它们分别是 MailKit 和 FluentEmail &#xff0c; 下面我对它们…

一文搞懂 Java 线程中断

转载自 一文搞懂 Java 线程中断 在之前的一文《如何"优雅"地终止一个线程》中详细说明了 stop 终止线程的坏处及如何优雅地终止线程&#xff0c;那么还有别的可以终止线程的方法吗&#xff1f;答案是肯定的&#xff0c;它就是我们今天要分享的——线程中断。 下面…

JS对象的属性名规则

/* * 使用对象字面量&#xff0c;可以在创建对象时&#xff0c;直接指定对象中的属性 * 语法&#xff1a;{属性名:属性值,属性名:属性值…} * 对象字面量的属性名可以加引号也可以不加&#xff0c;建议不加, * 如果要使用一些特殊的名字&#xff0c;则必须加引号 * * 属性名和属…

shell文本处理工具grep

shell脚本之grep工具 grep是 行 过滤工具&#xff1b;用于根据关键字进行行过滤。语法和选项 语法&#xff1a; #grep [选项] ‘关键字’ 文件名 常见选项 OPTIONS -i &#xff1a;不区分大小写 -v &#xff1a;查找不包含指定内容的行&#xff0c;反向选择 -w&#xff1a…

数据访问层

一、持久化&#xff1a; 1.概念&#xff1a;将程序中的数据在瞬时状态和持久状态之间的转换机制。 二、持久化实现的方式&#xff1a; 1.数据库 2.普通文件 3.XML文件 三、持久化的操作&#xff1a; 添加 修改 删除 查找 读取 四、Dao&#xff1a; 实现对持久化数据的访问。 五…

.NET的一点历史故事:招兵买马和聚义山林

曾几何时&#xff0c;Java 的兴起得益于众多大公司的涌入&#xff0c;Sun、IBM、SGI、网景、甲骨文、Borland 都在第一时间关注并投入大量资源来推动它的发展。比较典型的例子就是 IBM 做了自己的 Java SDK&#xff0c;并且做出了 SWT 界面框架&#xff0c;后面又开源了自己的 …

教你用 3 台机器搞定一个 Redis 高可用架构

转载自 教你用 3 台机器搞定一个 Redis 高可用架构 基于内存的 Redis 应该是目前各种 Web 开发业务中最为常用的 key-value 数据库了。 我们经常在业务中用其存储用户登陆态&#xff08;Session 存储&#xff09;&#xff0c;加速一些热数据的查询&#xff08;相比较 MySQL…

调用函数的返回值和函数对象本身

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>function fun3() {function fun4() {alert("我是fun4");}//将fun4函数对象…

Mybatis主要内容

mybatis 框架 共四天 第一天 mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 自定义mybatis框架&#xff08;目的为了了解mybatis中执行细节&#xff09;。 第二天 mybatis基本使用 mybatis的单表crud操作 mybatis的参数和返回值 mybatis的dao编写 mybatis配置细…

使用java解析XML文件的步骤

以前的时候&#xff0c;也解析过&#xff0c;今天又拿出来解析就让忘记怎么解析了&#xff0c;后来在网上查还有自己想&#xff0c;终于解析出来了&#xff0c;下面就是原XML文件&#xff1a; accp.xml <?xml version"1.0" encoding"UTF-8"?> <…

世界上最大的搜索引擎公司 Google 宣布与 Elastic 达成战略合作协议

和大家的直觉反应比较不同&#xff0c;但谷歌&#xff0c;这家业界首屈一指的互联网搜索公司&#xff0c;要向她的云平台里加入新的搜索服务了。谷歌云平台一直向企业客户出租计算、存储和网络等服务&#xff0c;现在谷歌则要与Elastic公司合作&#xff0c;为谷歌云提供新的搜索…

sleep( ) 和 wait( ) 的这 5 个区别,你知道几个

转载自 sleep( ) 和 wait( ) 的这 5 个区别&#xff0c;你知道几个 sleep(休眠) 和 wait(等待) 方法是 Java 多线程中常用的两个方法&#xff0c;它们有什么区别及一些该注意的地方有哪些呢&#xff1f;下面给大家一一分解。 区别1&#xff1a;使用限制 使用 sleep 方法可以…

MyBatis_1 简介

1、什么是框架&#xff1f;它是我们软件开发中的一套解决方案&#xff0c;不同的框架解决的是不同的问题使用框架的好处&#xff1a;框架封装了很多的细节&#xff0c;使开发者可以使用极简的方式实现功能。大大提高开发效率。 2、三层架构 表现层&#xff1a;是用于展示数据的…