2016-11-06 165 views
0

我正在使用awk命令在兩個不同時間之間查找我的日誌文件中的條目。 我已經使用這個命令,它的工作原理:awk命令來匹配多個模式

awk '$0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00"' /var/log/messages 

我想知道我怎麼可以搜索被允許或在此期間封鎖特定端口。例如:如果我正在搜索從12:00到12:30之間阻塞的端口22,那麼如何使用awk命令搜索它? /var/log/messages文件

內容:

Nov 5 8:44:30 System1 Kernel [022525 252748] OUTPUT DROPPED=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:01:00:25:97:b2:47:01:00 SRC=10.0.0.1 DST=192.168.4.141 LEN=221 TOS=0x00 PREC=0x00 TTL=128 ID=23315 PROTO=UDP SPT=183 DPT=183 LEN=209 

在日誌文件中的條目類似於像上面。我想知道如何匹配SPT = 80和DPT = 80的12:00至12:30之間的信息

+1

我們不知道您的日誌文件的外觀如何。哪些具體的關鍵字會在那裏?日誌文件的結構也可能很有用。 – karakfa

回答

0

您可以使用&&添加更多條件,就像您對日期所做的一樣。您可以在兩個正斜槓之間放置一個正則表達式,以匹配整行/記錄。

awk '/port 22 (blocked|allowed)/ && $0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00"' /var/log/messages 

當然你也可以用括號和邏輯組合(&&)和/或或(||)如果你需要更復雜的規則。

我想知道我怎麼能比得上之間的信息,比方說,12:00至12:30,其中SPT = 80和DPT = 80

繼上述說明中,只需添加/SPT=80/ && /DPT=80/ && ...條件。請注意,您顯示的示例行不匹配,因爲它的SPT和DPT值不是80,而是143.

順便說一下,請記住,按日期過濾的方式(例如$0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00")可能無效日期越過月份邊界,例如Nov的下限在Dec中的上限不起作用。

+0

感謝您的回答。我不尋找阻止或允許的選項。這僅僅是我給的例子。我正在尋找SPT的源端口,如我的問題中的示例輸出所示。因此,如果我替換爲'awk'/ SPT = 80/&& $ 0> =「Oct 04 12:00:00」&& $ 0 <=「Oct 04 12:30:00」'/ var/log/messages'我得到一個空行。 –

+2

作爲你的榜樣,你不想做的事情絕不是一個好主意,而只是描述和展示你想做的事情。 –

+0

@JoeWoods好吧,既然你沒有舉出你的實例,我回答了你的問題。無論如何,'/ SPT = 80 /'的部分是正確的。用_only_(即'awk'/ SPT = 80 /'/ var/log/messages')嘗試。如果你看到這些線條,你就知道這是你錯誤的日期過濾。修理它。 – Arkku