LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2084|回复: 16

来点好玩的---文件目录有变动的时候触发相应的指令。

[复制链接]
发表于 2007-5-16 12:57:34 | 显示全部楼层 |阅读模式
文件有新增/修改保存/删除

当文件系统发现指定目录下有如上的条件的时候就触发相就能的指令

是一种主动告之的而非我用循环比较目录下的文件的异动

目的是不管是什么服务给此文件目录中新增/修改保存/删除时

我都要抓得住,然后进行处理

有点类似vscan+samba一样,当一个文件在文件有新增/修改保存/删除时会进行配套的扫毒,
不过浏览的时候我不需要处理,而且新增/修改保存/删除我要触发不一样的脚本。

各位可否现策,告之一二呢//
发表于 2007-5-16 16:21:54 | 显示全部楼层
你可以关注一下Linux在内核里的文件变动机制--inotify。
基于inotiry,有类似系统crond的incrond,利用文件变动触发事件。
另外inotify tools是辅助工具。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-18 11:27:39 | 显示全部楼层
谢谢你。

谁有在实际使用过inotify,请告诉我您的OS 版本

我计划先将inotify安装OK,然后再做第二步计划
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-20 21:36:55 | 显示全部楼层
谁能告诉我哪一个目录有异动的可简单发现不需要动到内核的套件啊。。。
回复 支持 反对

使用道具 举报

发表于 2007-5-20 22:32:04 | 显示全部楼层
最近在做upstart的移植,(http://upstart.ubuntu.com). upstart用到了inotify,如果你感兴趣,可以去看看upstart的代码。

如果 /etc/event.d/ 目录下的内容发生变化,upstart 会得到通知,然后重新读取这个目录下的所有文件。

inotify 需要内核支持,用户程序注册监控目录入口。然后等通知就行了。
回复 支持 反对

使用道具 举报

发表于 2007-5-21 16:59:58 | 显示全部楼层
个人认为这是接口问题,linux集市化开发,最缺别人能为自己提供好服务的好接口,
我认为开发这样的程序应该是这样,一个守护进程运行后,mount出一个虚拟目录/aaa
/aaa里面有变化时(就是你说的变化)就执行某段代码,
当然 /aaa 实际上是内存中这个程序空间中的某段内存,这个程序只要监视自己的数据段是否有变化,有什么变化即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 18:05:18 | 显示全部楼层
[root@petercorporation ~]# cat /proc/version
Linux version 2.6.18-8.el5xen (brewbuilder@ls20-bc2-14.build.redhat.com) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Fri Jan 26 14:42:21 EST 2007


[root@petercorporation 2.6.18-8.el5xen-i686]# pwd
/usr/src/kernels/2.6.18-8.el5xen-i686

make menuconfig
我有看到如下两行
  • Inotify file change notification support                         │ │  
      │ │
  •    Inotify support for userspace  

    如果我安装了kernel-source然后直接用make menuconfig其中如上带*是不是说明我的系统在默认安装后就是对inotify已有支持呢。。

    如果有我如何用其它的方式证明

    如果无
    title Red Hat Enterprise Linux Server (2.6.18-8.el5xen)
            root (hd0,0)
            kernel /xen.gz-2.6.18-8.el5 nmi_watchdog=0
            module /vmlinuz-2.6.18-8.el5xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            module /initrd-2.6.18-8.el5xen.img
    看这模式与我原来了解的又有点不一样,
    我编译内核要留意什么???
  • 回复 支持 反对

    使用道具 举报

    发表于 2007-5-22 22:41:44 | 显示全部楼层
    > 如果有我如何用其它的方式证明
    看看是否有 /proc/sys/fs/inotify/
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2007-5-23 09:53:46 | 显示全部楼层
    [peter@petercorporation ~]$ cat /etc/issue
    Red Hat Enterprise Linux Server release 5 (Tikanga)

    [peter@petercorporation ~]$ ls -ld /proc/sys/fs/inotify/*
    -rw-r--r-- 1 root root 0 May 23 10:01 /proc/sys/fs/inotify/max_queued_events
    -rw-r--r-- 1 root root 0 May 23 10:01 /proc/sys/fs/inotify/max_user_instances
    -rw-r--r-- 1 root root 0 May 23 10:01 /proc/sys/fs/inotify/max_user_watches

    真的有也





    shlinux1~ # cat /proc/version
    Linux version 2.6.16.21-0.13-smp (geeko@buildhost) (gcc version 4.1.0 (SUSE Linux)) #1 SMP Mon Jul 17 17:22:44 UTC 2006
    shlinux1:~ # ls -ld /proc/sys/fs/inotify/
    dr-xr-xr-x 2 root root 0 2007-05-23 09:58 /proc/sys/fs/inotify/
    shlinux:~ # cat /etc/issue

    Welcome to SUSE LINUX 10.1 (X86-64) - Kernel \r (\l).
    也有啊
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2007-5-23 10:37:48 | 显示全部楼层
    如果确定有,

    我下一步就是要获得指定一个目录下 新增 /修改 / 删除
    如何进行呢,用linux C去写?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表