文件内容更改时发出警报

时间:2013-09-04 05:47:01

标签: shell

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

2 个答案:

答案 0 :(得分: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:

  
while true; do
  change=$(inotifywait -e close_write,moved_to,create .)
  change=${change#./ * }
  if [ "$change" = "myfile.py" ]; then ./myfile.py; fi
done

提问者甚至为此提出script online,可以这样调用:

while sleep_until_modified.sh derivation.tex ; do latexmk -pdf derivation.tex ; done

答案 1 :(得分:0)

要直接回答您的问题,您应该查看Advanced Bash Scripting Guide。这是关于Bash的,但即使您不使用Bash,也可能会发现它很有帮助。至于观察文件中的更改,请尝试inotify。还有tools available可以直接从命令行使用它,这在我的经验中非常好用。

现在,还有其他一些方法可以解决这个问题。您可以查看md5deepssdeep。它们是专为数字取证设计的工具,它可以创建cryptographic hashes(在md5deep的情况下)或模糊散列(在ssdeep的情况下)的列表,然后扫描该列表并告诉您哪些文件已出现,消失,已更改或者,如果您想检测可能未经授权的更改,可以查看host-based intrusion detection system,例如OSSEC。显然,这些都可以扫描文件更改并观察其他未经授权活动的迹象。

相关问题