0

modsec_audit.log ファイルの最後の X レコードを bash で取得し、それを新しいファイルに書き出す必要があります。tail と sed でこれが可能であることは知っていますが、これはおそらく特定の行で途切れ、最初にメッセージの半分が残る原因となります。
これを行うためのよりクリーンな方法はありますか?ログファイルからX個の最後のイベント/アイテムを取得するだけです。

modsecurity ログ ファイルに慣れていない方のために、modsec_audit.log ファイルの例を次に示します。

--38321e0f-E--
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Unavailable</title>
</head><body>
<h1>Service Unavailable</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at 10.211.55.6 Port 80</address>
</body></html>

--38321e0f-H--
Message: Access denied with code 503 (phase 2). Pattern match "block_hack" at ARGS:block_hack. [file "/usr/share/modsecurity-crs/activated_rules/block_hack.conf"] [line "2"] [id "11212"]
Action: Intercepted (phase 2)
Apache-Handler: application/x-httpd-php
Stopwatch: 1443442449908332 455 (- - -)
Stopwatch2: 1443442449908332 455; combined=23, p1=6, p2=15, p3=0, p4=0, p5=2, sr=0, sw=0, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.7.7 (http://www.modsecurity.org/).
Server: Apache/2.4.7 (Ubuntu)
Engine-Mode: "ENABLED"

--38321e0f-Z--
4

2 に答える 2

0

別のオプションは次のようになります...grepすべての--行の先頭に、次のように番号を付けます。

grep -n "^--" modsec_audit.log

サンプル出力

1:--38321e0f-E--
14:--38321e0f-H--
25:--38321e0f-Z--
26:--38321e0f-E--
39:--38321e0f-H--
50:--38321e0f-Z--
51:--38321e0f-E--  <--- 51 is the line number of the 3rd last one
64:--38321e0f-H--
75:--38321e0f-Z--

したがって、ファイルの 1 ~ 50 行目を削除 (つまり、印刷を抑制) します。

sed '1,50d' modsec_audit.log
于 2015-09-29T21:16:16.977 に答える