I am LAZY bones? AN ancient AND boring SITE

监视文件系统的一举一动 ── inotifywait

某天,TX大侠说他找不到awn的配置文件在什么地方,问我知道不?而我只是在N年前用过一下下awn而已,所以,理所当然地不知道了。后来,我们想了一个土办法:
在$HOME下先执行一次

tree -as > /tmp/before

然后在awn的界面里修改一下配置,再在$HOME下再执行一次

tree -as > /tmp/after

然后再

diff /tmp/before /tmp/after

哈哈,别说,这样还真把需要的配置文件找到了。但是,谁看着这个方法,都多少会觉得有点别扭。
现在,我发现了这个可以监视文件系统的任何动作的工具: inotifywait (项目主页) 。
inotifywait 包含在gentoo的 sys-fs/inotify-tools 包里,其他发行版应该也是叫这个名字。
这个工具是使用linux内核的inotify调用,来实现监视功能的。所以你需要有2.6.13以上版本的内核,才会有这个调用。
像上例中,如果要找某个未知文件的该动的话,你可以监视整个$HOME目录,这样:

inotifywait -mr $HOME

现在你再修改awn的配置,或者打开/修改/删除任何$HOME及其子目录下的文件的话,终端都会显示出来。比如:

/home/lily/test/ CREATE abcd.txt
/home/lily/test/ OPEN abcd.txt
/home/lily/test/ ATTRIB abcd.txt
/home/lily/test/ CLOSE_WRITE,CLOSE abcd.txt
/home/lily/test/ MODIFY abcd.txt
/home/lily/test/ OPEN abcd.txt
/home/lily/test/ MODIFY abcd.txt
/home/lily/test/ CLOSE_WRITE,CLOSE abcd.txt
/home/lily/test/ DELETE abcd.txt

这个就是我在~/test下执行

touch abcd.txt && echo 111 > abcd.txt && rm abcd.txt

的时候的结果,很详细吧?

另外值得注意的是,如果你 $HOME 下的文件数目比较多,大于 /proc/sys/fs/inotify/max_user_watches 里的值(默认才8k)的话,inotifywait 就会提示超出限制,报错了。这时候你可以估算下总的文件数,然后手工修改上限值。

echo 170000 | sudo tee /proc/sys/fs/inotify/max_user_watches

我这边把上限改成了170000,发现CPU和内存的占用都还不是很明显,还是完全可以接受的。

PS:除了使用这个inotifywait以外,你也可以在自己的程序里直接调用内核的inotify完成某些特定的功能,而且python和perl都有相应的模块可以直接调了,更详细的介绍可以看这里(翻遍了google,好不容易才找到这原文啊,BS那些转载不注明原地址的,还有转了以后,不管代码格式却分成10来页骗点击量的)。

最后修改时间: 2009年12月11日 21:06

本文章发表于: 2009年12月11日 10:26 | 所属分类:CLI软件. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

10 个评论 关于: “监视文件系统的一举一动 ── inotifywait”

  1. TualatriX 在 2009年12月11日 10:29 说:回复

    先抢沙发,再慢慢读,骨头厉害的!

  2. Iven 在 2009年12月11日 11:55 说:回复

    我记得 Windows 下面有个叫“完美卸载”的工具,跟这个功能很像……

    • bones7456 在 2009年12月11日 12:18 说:回复

      win下有个FileMon,还有个RegMon。。

      • Iven 在 2009年12月11日 12:52 说:回复

        哦,对,那两个也是类似功能……记得以前改试用软件的过期时间的时候常用,呵呵……

      • xifs 在 2009年12月11日 15:25 说:回复

        这两个东西都很强。以前绿化软件都是用的这两个

  3. Tweets that mention I am LAZY bones ? : 监视文件系统的一举一动 ── inotifywait -- Topsy.com 在 2009年12月11日 13:47 说:回复

    […] This post was mentioned on Twitter by 骨头, York Wong. York Wong said: [GReader] 监视文件系统的一举一动 ── inotifywait http://tinyurl.com/ydfywaq […]

  4. yegle 在 2009年12月11日 19:10 说:回复

    好歹也要把开头提出的问题给解决了啊…
    没记错的话是在~/.config/awn里…

    • bones7456 在 2009年12月11日 21:05 说:回复

      呵呵,这个只是引子嘛,不是本文的重点。
      而且答案好像也不是这么简单的,不然就不会找不到了,好像是 ~/.gconf/apps/instances/awn

  5. frankyue 在 2009年12月11日 19:22 说:回复

    好工具,可以帮忙省好多时间呢

  6. vcvg 在 2009年12月11日 23:55 说:回复

    不错不错。
    以前都只会看文件最后修改时间。

发表评论