Linux之了解inotify监听文件变化机制

一、Inotify 简介

       在日常的运维过程中,经常需要备份某些文件,或者对系统的某些文件进行监控,比如重要的配置文件等。如果需要作到实时同步或者监控,就需要使用内核的inotify机制
       Inotify 是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能

  • Inotify 不需要对被监视的目标打开文件描述符,而且如果被监视目标在可移动介质上,那么在 umount 该介质上的文件系统后,被监视目标对应的 watch 将被自动删除,并且会产生一个 umount 事件。
  • Inotify 既可以监视文件,也可以监视目录。
  • Inotify 使用系统调用而非 SIGIO 来通知文件系统事件。
  • Inotify 使用文件描述符作为接口,因而可以使用通常的文件 I/O 操作select 和 poll 来监视文件系统的变化。

inotify主要功能:是一个内核用于通知用户空间程序文件系统变化的机制。

二、 Inotify 可监视的文件系统事件

  • IN_ACCESS : 即文件被访问
  • IN_MODIFY : 文件被修改
  • IN_MODIFY_SELF : 移动受监控目录或文件本身
  • IN_ATTRIB : 文件属性被修改,如 chmod、chown、touch 等,即文件元数据改变
  • IN_CLOSE_WRITE : 可写文件被 close
  • IN_CLOSE_NOWRITE : 不可写文件被 close
  • IN_OPEN : 文件被open
  • IN_MOVED_FROM : 文件被移走,如 mv
  • IN_MOVED_TO : 文件被移来,如 mv、cp
  • IN_CREATE : 创建新文件
  • IN_DELETE : 文件被删除,如 rm
  • IN_DELETE_SELF : 自删除,即一个可执行文件在执行时删除自己
  • IN_MOVE_SELF : 自移动,即一个可执行文件在执行时移动自己
  • IN_UNMOUNT : 宿主文件系统被 umount
  • IN_CLOSE : 文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
  • IN_MOVE : 文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
  • IN_ONESHOT : 只监控pathname的一个事件
  • IN_ONLYDIR : pathname不为目录时会失败

       注:上面所说的文件也包括目录

对于上述一些事件的说明:

  1. 当文件的元数据(比如,权限,所有权,链接计数,扩展属性,用户ID,或组ID等)改变时,会发生IN_ATTRIB事件
  2. 删除受监控对象时会发生IN_DELETE_SELF
  3. 重命名对象时会发生IN_MORE_SELF事件
  4. IN_ONESHOT 允许只监控pathname的一个事件,事件发生后,监控项会自动从监控列表消失

三、版本是否支持Inotify内核

看看是否有 /proc/sys/fs/inotify/目录,以确定内核是否支持inotify

[root@mail ~]# ll /proc/sys/fs/inotify/
  total 0
-rw-r--r--1 root root 0 Apr 20 23:24 max_queued_events
-rw-r--r--1 root root 0 Apr 20 23:24 max_user_instances
-rw-r--r--1 root root 0 Apr 20 23:24 max_user_watches

文件说明:

  • max_user_watches:设置initifywait或inotifywatch命令可以监视的文件数量(单进程)
  • max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
  • max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量

注意: max_queued_events 是 Inotify 管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。

       如果你在日志中看到Event Queue Overflow,说明max_queued_events太小需要调整参数后再次使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值