我想编写一个 shell 脚本来检查放置的所有逻辑文件/var/www/html/
,如果用户对这些文件进行了任何更改,则会向管理员发送警报,通知他们“用户 x 已对 f 文件进行了更改”。我在编写 shell 脚本方面没有太多经验,为此我不知道如何开始。任何帮助将不胜感激。
2 回答
这是在超级用户中回答的: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
要直接回答您的问题,您可能应该查看Advanced Bash Scripting Guide。它专门针对 Bash,但即使您不使用 Bash,您也会发现它很有帮助。至于观察文件的变化,请尝试inotify。还有一些工具可以直接从命令行使用,根据我的经验,这些工具效果很好。
现在,还有其他一些方法可以解决这个问题。您可能会查看md5deep和ssdeep。它们是为数字取证而设计的工具,可以创建加密哈希列表(在 md5deep 的情况下)或模糊哈希(在 ssdeep 的情况下),然后扫描该列表并告诉您哪些文件已经出现、消失、更改、移动,等等。或者,如果您想检测潜在的未经授权的更改,您可以查看基于主机的入侵检测系统,例如OSSEC。显然,它们既可以扫描文件更改,也可以观察其他未经授权的活动迹象。