2

我想编写一个 shell 脚本来检查放置的所有逻辑文件/var/www/html/,如果用户对这些文件进行了任何更改,则会向管理员发送警报,通知他们“用户 x 已对 f 文件进行了更改”。我在编写 shell 脚本方面没有太多经验,为此我不知道如何开始。任何帮助将不胜感激。

4

2 回答 2

1

这是在超级用户中回答的:https ://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes

基本上你使用inotifywait

简单,使用 inotifywait:

while inotifywait -e close_write myfile.py; do ./myfile.py; done

这有一个很大的限制:如果某些程序将 myfile.py 替换为不同的文件,而不是写入现有的 myfile,inotifywait 将会死掉。大多数编辑都是这样工作的。

要克服此限制,请在目录上使用 inotifywait:

虽然是真的;做
  更改=$(inotifywait -e close_write,moved_to,create .)
  更改=${更改#./ * }
  如果 [ "$change" = "myfile.py" ]; 然后./myfile.py;菲
完毕

提问者甚至为此在网上放了一个脚本,可以这样调用:

while sleep_until_modified.sh derivation.tex ; do latexmk -pdf derivation.tex ; done
于 2013-09-04T05:52:33.833 回答
0

要直接回答您的问题,您可能应该查看Advanced Bash Scripting Guide。它专门针对 Bash,但即使您不使用 Bash,您也会发现它很有帮助。至于观察文件的变化,请尝试inotify。还有一些工具可以直接从命令行使用,根据我的经验,这些工具效果很好。

现在,还有其他一些方法可以解决这个问题。您可能会查看md5deepssdeep。它们是为数字取证而设计的工具,可以创建加密哈希列表(在 md5deep 的情况下)或模糊哈希(在 ssdeep 的情况下),然后扫描该列表并告诉您哪些文件已经出现、消失、更改、移动,等等。或者,如果您想检测潜在的未经授权的更改,您可以查看基于主机的入侵检测系统,例如OSSEC。显然,它们既可以扫描文件更改,也可以观察其他未经授权的活动迹象。

于 2013-09-04T05:54:29.923 回答