0

侵害されたアカウントを探すことができるように、1 時間に 1 回実行し、過去 1 時間にメールを送信したすべてのユーザーと IP を返す小さなシェル スクリプトを作成しようとしています。

次の方法で必要なデータを取得しています。

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

しかし、これらの結果を前の 1 時間だけに制限したい (したがって、午前 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

しかし、そこには愛がありませんでした。

ティア

4

1 に答える 1

1

車輪を再発明するのではなく、他の人がすでに作成して本番環境でテストしたツールを使用してください。logcheckパッケージからlogtail2 perl スクリプトを入手してください。次に、追跡しているログ ファイルを処理する cronjob を 1 時間ごとに実行します。logtail2スクリプトは、最後に実行されたときに停止した場所を追跡するため、1 時間ごとに実行すると、過去 1 時間分のログ行のみが取得されることがわかります。次に、通常のテキスト解析を使用して、追跡するデータを抽出します。

tarball はhttp://packages.debian.org/unstable/logtailにあります。

于 2013-06-14T18:37:29.963 に答える