我想编写一个shell脚本来检查放置在/var/www/html/
的所有逻辑文件,如果用户对这些文件进行了任何更改,则会向管理员发送警报,通知他们“用户x已进行更改在f文件中。“我在编写shell脚本方面没有太多经验,为此我不知道如何开始。任何帮助将受到高度赞赏。
答案 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可以直接从命令行使用它,这在我的经验中非常好用。
现在,还有其他一些方法可以解决这个问题。您可以查看md5deep和ssdeep。它们是专为数字取证设计的工具,它可以创建cryptographic hashes(在md5deep的情况下)或模糊散列(在ssdeep的情况下)的列表,然后扫描该列表并告诉您哪些文件已出现,消失,已更改或者,如果您想检测可能未经授权的更改,可以查看host-based intrusion detection system,例如OSSEC。显然,这些都可以扫描文件更改并观察其他未经授权活动的迹象。