文章目录
前言
inotify 出现的原因
什么是inotify?
实验环境
- 内核:
- 查看当前系统是否支持安装inotify软件
安装inotify - 安装epel源:
- 使用yum安装inotify
参数讲解
实战举例 - -m 监听某一个目录
- 生产环境中监听创建,删除,修改事件。
总结
前言
上几篇文章,我们探讨了rsync的使用,今天开始我们来聊聊那些可以与rsync结合使用的工具,今天我们主要来探讨inotify。 如果你还不了解rsync相关的内容,可以点击下方连接进行了解学习:
rsync系列文章:
inotify 出现的原因
Rsync(remote sync)远程同步工具,通过rsync可以实现对远程服务器数据的增量备份同步,但rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目标文件进行比对,只进行差异同步。
如果服务器的文件数量达到了百万甚至千万量级,那么文件对比将是非常耗时的。而且发生变化的往往是其中很少的一部分,这是非常低效的方式。inotify的出现,可以缓解rsync不足之处,取长补短。
什么是inotify?
Inotify是一种强大的,细粒度的,异步的文件系统事件监控机制(软件),linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件。
Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。
cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界的事件机制相符合。
由于inotify软件是Linux系统2.6内核开始支持,以前版本不支持,所以,安装前需要检查当前系统是否支持安装inotify软件。
实验环境
1. 内核:
[root@gaosh-1 ~]# uname -r
2.6.32-696.el6.x86_64
2. 查看当前系统是否支持安装inotify软件
如果出现下列三个内容,表示当前系统可以安装inotify软件
[root@gaosh-1 ~]# ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 6月 29 12:14 max_queued_events
-rw-r--r-- 1 root root 0 6月 29 12:14 max_user_instances
-rw-r--r-- 1 root root 0 6月 29 12:14 max_user_watches
对这三个参数的解释:
- max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程);
- max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数;
- max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。
安装inotify
1. 安装epel源:
[root@gaosh-1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
2. 使用yum安装inotify
[root@gaosh-1 ~]# yum install inotify-tools -y
参数讲解
[root@gaosh-1 ~]# which inotifywait
/usr/bin/inotifywait
inotify的两个相关命令:
- inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用; 重点掌握
- inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计
查看帮助:
[root@gaosh-1 ~]# /usr/bin/inotifywait --help
参数 | 作用 |
---|---|
r | 递归查询目录 |
q | 只打印监控事件的信息 安静状态 |
m | 始终保持事件监听状态 |
excluder | 排除文件或者目录的时候不区分大小写 |
timefmt | 指定时间输出的格式 |
d | 后台运行 |
-e | 指定监控的时间,比如删除,增加和修改 |
-o | 输出到文件 |
-s | 把错误放到日志中而不是标准输出 |
–format | 指定输出格式 |
-t | 设置超时时间 |
-e 指定参数事件汇总:
实战举例
1. -m 监听某一个目录
第一个终端:
[root@gaosh-1 ~]# mkdir iwait
[root@gaosh-1 ~]# inotifywait -m iwait/
Setting up watches.
Watches established.
第二个终端:
进行增删改查,查看第一个终端的监控情况
[root@gaosh-1 iwait]# pwd
/root/iwait
创建一个文件aaa
[root@gaosh-1 iwait]# touch aaa
[root@gaosh-1 iwait]#
查看监控效果
[root@gaosh-1 ~]# inotifywait -m iwait/
Setting up watches.
Watches established.
iwait/ CREATE aaa
iwait/ OPEN aaa
iwait/ ATTRIB aaa
iwait/ CLOSE_WRITE,CLOSE aaa
2. 生产环境中监听创建,删除,修改事件。
A终端:
[root@gaosh-1 ~]# inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create,close_write,delete iwait/
B终端修改内容,删除文件操作
[root@gaosh-1 iwait]# echo test > aaa
[root@gaosh-1 iwait]#
[root@gaosh-1 iwait]# ls
aaa
[root@gaosh-1 iwait]# rm -rf aaa
[root@gaosh-1 iwait]#
[root@gaosh-1 iwait]# touch bbb
A终端查看监控结果:
[root@gaosh-1 ~]# inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create,close_write,delete iwait/
290620 13:51 iwait/aaa
290620 13:51 iwait/aaa
290620 13:52 iwait/bbb
290620 13:52 iwait/bbb
总结
本文主要探讨了inotify的部署及应用,下篇文章,我们将探讨inotify与rsync的结合使用。
我是高胜寒,一个在教培行业不忘初心的人,我们下篇文章再见
rsync系列文章: