观看命令通知在Linux上新创build的文件
如何修改下面的命令来通知linux用户john创build一个新文件到/ usr / local / mydir /?
watch -d 'ls -l /usr/local/mydir/ | fgrep john'
即,如果有任何新文件创build到/ usr / local / mydir /,我想要不断监视并调用另一个脚本。
由于在生产中,我不能去任何工具,而不是shell脚本。 那么可以帮我用shell脚本解决scheme吗?
而不是不断地拉这样一个目录,也许尝试使用inotify子系统,这是专门为此目的而devise的。 对于用户空间工具,请看inotify-tools 。
SvenWbuild议的inotify是一个很好的select。
只是为了不同:替代的,这种东西更完整的方式是使用内核审计子系统和审计。 只要安装auditd如果它尚未安装,然后使用auditctl ,你的情况
auditctl -w /usr/local/mydir/ -p wa -F uid=john -k johnschangedfiles
会做。
然后,您可以运行报告,查看发生什么事情的时间和时间的详细logging:
ausearch -f /usr/local/mydir/
这产生类似于这样的结果:
time->Fri Feb 3 12:45:19 2012 type=PATH msg=audit(1328265919.961:11): item=0 name="/tmp/test/foo" inode=1839907 dev=fd:00 mode=0100664 ouid=500 ogid=500 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0 type=CWD msg=audit(1328265919.961:11): cwd="/tmp" type=SYSCALL msg=audit(1328265919.961:11): arch=c000003e syscall=2 success=yes exit=3 a0=7fffa6f4262e a1=941 a2=1b6 a3=3136fb0d0c items=1 ppid=12414 pid=23531 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=686 comm="touch" exe="/bin/touch" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="jpikkschangedfiles"
如果你坚持使用标准工具,像下面这样的脚本可能会有帮助:
#!/bin/bash ls -l /usr/local/mydir | grep john > /tmp/watchfile while true; do sleep 10 ls -l /usr/local/mydir | grep john > /tmp/watchfile2 diff -q /tmp/watchfile /tmp/watchfile2 > /dev/null if [ $? -ne 0 ] ; then echo "File list changed" exit ; fi cp /tmp/watchfile2 /tmp/watchfile done
用所需的操作replaceecho行,如果要连续运行此脚本,请删除exit行。
注意:这将对目录列表的任何修改都起作用,即使文件刚刚更新,也没有添加。