0

我正在尝试编写一个小 shell 脚本,每小时运行一次,并返回过去一小时内发送过电子邮件的所有用户和 IP,这样我就可以查找任何被入侵的帐户。

我通过以下方式获取我想要的数据:

grep "A=dovecot_login" /var/log/exim_mainlog | sed -e 's#H=.* \[##' -e 's#\]:[0-9]*##' | awk '{print $5,$6}' | sort | uniq -c

但我想将这些结果限制在前一小时(所以如果我在上午 10 点运行它,那么结果将是从上午 9 点到上午 10 点的那些登录)。

知道如何限制吗?我以为我正在接近

hour=`date | awk {'print $4'} | cut -d: -f 1`; lasthour=`expr $hour - 1`; grep "`date -I` $lasthour" /var/log/exim_mainlog | grep "A=dovecot_login" | sed -e 's#H=.* \[##' -e 's#\]:[0-9]*##' | awk '{print $5,$6}' | sort | uniq -c

但在那里没有得到爱。

TIA

4

1 回答 1

1

不要重新发明轮子,使用其他人已经编写并在生产环境中测试过的工具:从logcheck包中获取 logtail2 perl 脚本。然后每隔一小时就有一个 cronjob 来处理你正在跟踪的日志文件。logtail2脚本会跟踪它上次运行时的停止位置,因此您知道如果您每小时运行一次,您只会获得最后一小时的日志行然后使用您的普通文本解析来提取您要跟踪的数据。

可以在http://packages.debian.org/unstable/logtail上找到 tarball 。

于 2013-06-14T18:37:29.963 回答