Inotifywait 在文件更改时应用正则表达式模式

Inotifywait 在文件更改时应用正则表达式模式

要求:如果在 ubuntu 服务器中安装或删除了任何包,则发出警报。

对于这个要求,我尝试使用 inotifywait 持续监控 dpkg.log,查看是否使用正则表达式对已安装和已删除的包进行任何更改并据此发出警报。

我如何将 inotifywait 监视的文件的修改内容移到另一个文件或将其存储在变量中,以便我可以应用一些正则表达式并基于此发出警报?

请帮助我,我该如何做,或者是否有任何其他方法可以使用其他工具来实现此要求。

这是我尝试过的但没有效果。

  #!/bin/sh
   while inotifywait -e modify /var/log/dpkg.log; do   
      if tail -n1 /var/log/dpkg.log | grep installed; then
         // alert script    
       fi 
    done

答案1

该脚本使用diff效果如下:

#!/bin/bash

# Save contents of dpkg.log
last_content=$(</var/log/dpkg.log)

# Loop inotifywait
while inotifywait -e modify /var/log/dpkg.log; do
    # Check diff between dpkg.log and last saved content.
    # Use grep to filter lines not interesting
    # save in a variabler called "diff".
    diff=$(diff /var/log/dpkg.log <(printf '%s' "$last_content") | grep '^<' | grep "status installed")

    # Check if the command to check "diff" succeeded ($? == 0)
    # if yes, run the alert:
    if [ $? -eq 0 ]; then
        echo "$diff"
        notify-send "$(printf '%s' "$diff" | grep -Po "status installed \K.*") has been installed"
    fi

    # Save contents of dpkg.log
    last_content=$(</var/log/dpkg.log)
done

当然notify-send,您也可以使用任何其他方法来发出警报。

相关内容