使用 inotify 监控文件系统的活动
来源:互联网 发布:免费的海关数据 编辑:程序博客网 时间:2024/05/21 22:34
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 文件。如果它存.....
本文转自IBM Developerworks中国
请点击此处查看全文
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控文件系统的活动
- 使用 inotify 监控 Linux 文件系统事件
- 使用Inotify 监控Linux 文件系统事件
- 使用 inotify 监控 Linux 文件系统事件
- inotify之文件系统事件监控使用入门
- inotify监控Linux文件系统的必备利器
- inotify监控Linux文件系统的必备利器
- inotify 文件系统监控
- inotify - 监控文件系统
- linux inotify 监控文件系统事件
- 文本框样式大全
- 页面动态显示时间
- bool,float,指针变量 与 “零值” 比较的if语句
- Rational 多媒体课堂:Jazz 及 Rational 产品路线图
- Java 理论与实践:有状态 Web 应用程序都有漏洞吗?
- 使用 inotify 监控文件系统的活动
- 使用 jQuery,第 2 部分:构建未来的 Web 应用程序
- 在面向服务的企业(SOE)中采用 SOA
- 学习使用 doxygen 生成源码文档
- 用 Apache Derby 构建脱机 Ajax
- 不在系统变量中设定path/classpath,运行任意路径下的class文件(通过.bat文件)
- 走出企业网站优化的误区
- 微软,开创数字化生活的软件帝国
- 另类的结构体赋值语法