监视文件系统的一举一动 ── 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来页骗点击量的)。
TualatriX 在 2009年12月11日 10:29 说:【 】
先抢沙发,再慢慢读,骨头厉害的!
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 说:【 】
这两个东西都很强。以前绿化软件都是用的这两个
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 […]
yegle 在 2009年12月11日 19:10 说:【 】
好歹也要把开头提出的问题给解决了啊…
没记错的话是在~/.config/awn里…
bones7456 在 2009年12月11日 21:05 说:【 】
呵呵,这个只是引子嘛,不是本文的重点。
而且答案好像也不是这么简单的,不然就不会找不到了,好像是 ~/.gconf/apps/instances/awn
frankyue 在 2009年12月11日 19:22 说:【 】
好工具,可以帮忙省好多时间呢
vcvg 在 2009年12月11日 23:55 说:【 】
不错不错。
以前都只会看文件最后修改时间。