0

我编写了以下 bash 脚本,该脚本旨在在服务器上更改 UFW 规则时创建文件。然后将使用 Zabbix 检查此文件的存在。

#!/bin/bash

file="/tmp/ports.txt"
file_open="/tmp/open_ports.txt"
md5_file=$(md5sum /tmp/ports.txt | awk '{ print $1 }')
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print $1 }')
file_diff="/tmp/ports_diff"

if [[ ! -f $file ]]; then
  touch $file && sudo ufw status|grep ALLOW > $file
fi

if [ -f $file_diff ];then
rm $file_diff
fi

sudo ufw status|grep ALLOW > $file_open

if [ $md5_file != $md5_file_open ];then
touch $file_diff
fi

我发现有时文件不会在应该创建或删除的时候被创建或删除,但是如果我第二次或第三次运行命令而没有任何进一步的更改,它确实会。

请帮忙。

谢谢

4

1 回答 1

1

在第一次调用期间,文件“/tmp/ports.txt”和“/tmp/open_ports.txt”不存在。第一次运行后,应该创建两个文件并且差异为空。

在此之后,ufw status变化。

在下一次运行中,语句

md5_file=$(md5sum /tmp/ports.txt | awk '{ print $1 }')
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print $1 }')

将处理原始文件(没有更改的状态),因此它们将对相等的文件进行操作。不会发现差异。
在此运行期间$file_open将填充新值,但md5sum在此更改后不会调用该函数。差异将不会产生。

下一次运行将从 changed 开始$file_open,并会发现差异。

当状态变回原来的值时,首先对旧文件运行 md5,声称看到差异而不删除 diff 文件。此运行还将$file_open使用新值写入,下一次运行将检测到该值。

解决方案:将 2 个 md5sum 行移动到最后一个sudo.

于 2017-06-21T19:46:33.563 回答