“监视”命令来通知 linux 上新创建的文件

Aha*_*Aha 7 shell-scripting

watch 命令通知 linux 上新创建的文件

如何修改以下命令以通知 linux 用户 john 创建新文件到 /usr/local/mydir/ ?

watch -d 'ls -l /usr/local/mydir/ | fgrep john'
Run Code Online (Sandbox Code Playgroud)

即,如果在 /usr/local/mydir/ 中创建了任何新文件,我想持续监视并调用另一个脚本。

在生产中,我不能使用任何工具而不是 shell 脚本。那么可以帮助我使用 shell 脚本解决方案吗?

Sve*_*ven 8

与其不断地以这种方式拉目录,不如尝试使用inotify为此目的而设计的子系统。对于用户空间工具,请查看inotify-tools.


Jan*_*nen 6

inotify SvenW 建议是一个很好的选择。

只是有所不同:这种东西的替代,更完整的方法是使用内核审计子系统和auditd. 只要安装auditd,如果它尚未安装,然后用auditctl,你的情况

auditctl -w /usr/local/mydir/ -p wa -F uid=john -k johnschangedfiles
Run Code Online (Sandbox Code Playgroud)

会做。

然后,您可以运行报告并查看发生的事件和时间的非常详细的日志:

ausearch -f /usr/local/mydir/
Run Code Online (Sandbox Code Playgroud)

这会产生与此类似的结果:

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"
Run Code Online (Sandbox Code Playgroud)