快速业务通道

使用 inotify 监控文件系统的活动

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-10

Inotify 是一个 Linux? 特性,它监控文件系统操作,比如读取、写入和创建.Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多.学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统管理的命令行工具.

系统管理就像日常生活一样.就像刷牙和吃蔬菜一样,日常的维护能保持机器的良好状态.您定期清空废物,比如临时文件或无用的日志文件,以及花时间填写表单、回复电话、下载更新和监控进程等.幸好自动化 shell 脚本、使用 Nagios 等工具进行监控、通过常见的 cron 进行任务调度可以减轻这个负担.

但奇怪的是,这些工具没有一个具有响应性.当然,您可以安排一个频繁运行的 cron 任务来监控条件,但这样繁忙的轮询 — 消耗大量资源并且具有不确定性 — 并不是很理想.例如,如果您监控输入数据的几个 Transfer Protocol(FTP)收存箱,您可能要通过 find 命令扫描每个目标目录,列举新的内容.然而,尽管这个操作看起来并没有什么害处,但每个调用都产生一个新的 shell 和 find 命令,这需要许多系统调用来打开目录,然后扫描目录,等等.这会造成过于频繁的或大量的轮询任务(更糟糕的是,繁忙的轮询并不总是很好.想象一下一个文件系统浏览器,比如 Mac OS X 的 Finder,轮询更新时需要的大量资源及其复杂性).

那么,管理员应该怎么办呢?令人高兴的是,您可以再次求助于可以信赖的计算机.

了解 inotify

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

使用 inotify 很简单:创建一个文件描述符,附加一个或多个监视器(一个监视器 是一个路径和一组事件),然后使用 read() 方法从描述符获取事件信息.read() 并不会用光整个周期,它在事件发生之前是被阻塞的.

更好的是, inotify 通过传统的文件描述符工作,您可以利用传统的 select() 系统调用来被动地监控监视器和许多其他输入源.两种方法 — 阻塞文件描述符和使用 select()— 都避免了繁忙轮询.

现在,让我们深入了解 inotify,写一些 C 代码,然后看看一组命令行工具,您可以构建并使用它们将命令和脚本附加到文件系统事件.Inotify 不会在中途失去控制,但它可以运行 cat 和 wget,并且在必要时严格执行.

要使用 inotify,您具备一台带有 2.6.13 或更新内核的 Linux 机器(以前的 Linux 内核版本使用更低级的文件监控器 dnotify).如果您不知道内核的版本,请转到 shell,输入 uname -a:

% uname -a

Linux ubuntu-desktop 2.6.24-19-generic #1 SMP ... i686 GNU/Linux

如果列出的内核版本不低于 2.6.13,您的系统就支持 inotify.您还可以检查机器的 /usr/include/sys/inotify.h 文件.如果它存在,表明您的内核支持 inotify.

注意:FreeBSD 和 Mac OS X 提供一个类似于 inotify 的 kqueue.在 FreeBSD 机器上输入 man 2 kqueue 获取更多信息.

本文基于 Ubuntu Desktop version 8.04.1(即 Hardy),它运行在 Mac OS X version 10.5 Leopard 的 Parallels Desktop version 3.0.

inotify C API

Inotify 提供 3 个系统调用,它们可以构建各种各样的文件系统监控器:

●inotify_init() 在内核中创建 inotify 子系统的一个实例,成功的话将返回一个文件描述符,失败则返回 -1.就像其他系统调用一样,如果 inotify_init() 失败,请检查 errno 以获得诊断信息.
● 顾名思义,inotify_add_watch() 用于添加监视器.每个监视器提供一个路径名和相关事件的列表(每个事件由一个常量指定,比如 IN_MODIFY).要监控多个事件,只需在事件之间使用逻辑操作符或 — C 语言中的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号