私のログファイル(log.txt)が次のようなものだと言います
2014-01-01 22:30:30 something happened....
2014-01-01 22:30:31 something happened....
2014-01-01 22:30:41 something happened....
過去1時間のログを表示するためにこのファイルをテールし、テールを維持したいと思います。
つまり.
tail <some magic to specify last 1 hour> -f log.txt
次に、出力は
2014-01-01 21:30:41 something happened....
...
2014-01-01 22:30:30 something happened....
2014-01-01 22:30:31 something happened....
2014-01-01 22:30:41 something happened....
これを行うツールはありますか?
ワンライナーでgrepとtailの組み合わせを使用できます。
grep "2014-01-01 21:" log.txt; tail -f log.txt
それはその時間からすべてを印刷し、テーリングを続けます。
または、awkを使用して、特定の時間の始まりからファイルの終わりまですべてを印刷し、その後もテーリングを続けることができます。これにより、必要に応じて最後の数時間をテーリングできます。
awk '/2014-01-01 21:/' log.txt; tail -f log.txt
onehourago=$(date --date='1 hours ago' +"%b%e %H:%M:%S")
echo $onehourago | cat /var/log/auth.log - | sort | sed "1,/$onehourago/d"
Sed-commandなしの中間出力:
Aug 7 00:00:03 thinkpux CRON[25475]: pam_unix(cron:session): session closed for user stefan
Aug 7 00:17:01 thinkpux CRON[25504]: pam_unix(cron:session): session closed for user root
Aug 7 00:17:01 thinkpux CRON[25504]: pam_unix(cron:session): session opened for user root by (uid=0)
Aug 7 00:19:33
Aug 7 01:00:02 thinkpux CRON[25652]: pam_unix(cron:session): session opened for user stefan by (uid=0)
Aug 7 01:00:03 thinkpux CRON[25652]: pam_unix(cron:session): session closed for user stefan
Aug 7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session closed for user root
Aug 7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session opened for user root by (uid=0)
出力:
Aug 7 01:00:02 thinkpux CRON[25652]: pam_unix(cron:session): session opened for user stefan by (uid=0)
Aug 7 01:00:03 thinkpux CRON[25652]: pam_unix(cron:session): session closed for user stefan
Aug 7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session closed for user root
Aug 7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session opened for user root by (uid=0)
注:最初に+ "%b%e%H:%M:%S"で日付を作成しました(%bと%eの間の空白に注意してください。ただし、echoは2つの空白を1つに圧縮します。sedで検索すると、空白が2つあり、式が見つからないため、月の日付が2桁か1桁かを区別するのが多少複雑になります。ただし、余分な/欠落している空白については、ソートに依存しないようです。圧縮を防ぐためのbashスイッチがあるかもしれません。 ?ただし、日付形式が異なるため、影響はありませんが、この方法を何とかテストする必要があり、学習者は同じ罠に踏み込む可能性があります。
したがって、全体的なアイデアは、1時間前の日付/時刻を取得するには、ログファイルのようにフォーマットし、純粋な日付をログファイルに追加して、その組み合わせを並べ替え、純粋な日付までをsedで削除します。
覚えてタイプするのは面白くありませんが、スクリプトや関数に入れることができます。