linux内核的特性,Linux内核特性inotify

Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。作用

性能调优和错误定位的手段;

通知配置文件的改变,这个是服务器编程经常需要使用的;

跟踪某些关键的系统文件的变化;

监控某个分区磁盘的整体使用情况;

系统崩溃时进行自动清理;

自动触发备份进程;

向服务器上传文件结束时发出通知注意:

(1) inotify API是linux系统调用接口,不遵循POSIX标准

(2)Linux系统内核是否达到了2.6.13以上

检查是否支持inotify的两种方法:(1)/proc/sys/fs/inotify目录下存在max_queued_events、max_user_instances、max_user_watches文件说明系统支持inotify

(2)如果输出('CONFIG_INOTIFY_USER=y'),那么你可以马上享受Inotify之旅了。

% grep INOTIFY_USER /boot/config-$(uname -r)

CONFIG_INOTIFY_USER=y接口#includeint inotify_init(void);

int inotify_init1(int flags);int inotify_add_watch(int fd, const char *pathname, uint32_t mask);int inotify_rm_watch(int fd, int wd);

接口不需要做什么说明,具体的细节看manpage手册,上面已经说的足够详细了。使用 inotify 很简单:创建一个文件描述符,附加一个或多个监视器(一个监视器 是一个路径和一组事件),然后使用 read 方法从描述符获取事件。read 并不会用光整个周期,它在事件发生之前是被阻塞的。更好的是,因为 inotify 通过传统的文件描述符工作,您可以利用传统的 select 系统调用来被动地监控监视器和许多其他输入源。两种方法 — 阻塞和使用 select— 都避免了繁忙轮询。

相关参数inotify定义了下列的参数,可以用来限制inotify使用内核内存的大小。

/proc/sys/fs/inotify/max_queued_evnets

表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。

/proc/sys/fs/inotify/max_user_instances

表示每一个real user ID可创建的inotify instatnces的数量上限。

/proc/sys/fs/inotify/max_user_watches

表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:

echo 30000000 > /proc/sys/fs/inotify/max_user_watches监视的文件系统事件IN_ACCESS,即文件被访问

IN_MODIFY,文件被 write

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)内核实现2.6.31版本的内核中对notify进行了一番大的改动,将原来的inotify和dnotify这两个不想关的特性进行了抽象,将它们的共同的点抽象成了一个基础设施,这个基础设施就是fsnotify.其实,fsnotify并没有什么难于理解的,它甚至比原来的inotify和dnotify更加简单了,这次的这个更新仅仅更新了机制而没有更新策略,也就是用户接口并没有任何的变化。如果说有人理解kernel中的device和device_driver体系以及input子系统的话,那么这个fsnotify就不难理解了。    notify实现机制的代码在fs/notify/下,其中fsnotify就由此目录下的fs/notify/fsnotify.h 、fs/notify/group.c、fs/notify/inode_mark.c、fs/notify/mark.c、fs/notify/notification.c、fs/notify/vfsmount_mark.c、和头文件include/linux/fsnotify.h、include/linux/fsnotify_backend.h实现。而fs/notify/dnotify/, fs/notify/fanotify/和fs/notify/inotify/则分别实现了dnotify, fanotify, inotify。

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值