我正在編寫腳本,我將在其中接收時間和資料夾名稱的輸入,我需要找到一個文件(snort.log.*),該文件落在我的用戶輸入的時間範圍內(他將看到警報文件以粗體顯示)時間戳並輸入實際 snort.log.** 文件的時間,其中包含攻擊的詳細信息,警報文件僅包含元數據)這裡是目錄示例
[jump1@widids01 snort-3]# ls -ltr |尾-6 -rwxr-x--- 1 snort snort 301731 2月2日18:18 snort.log.1517557015 -rwxr-x--- 1 snort snort 5720853 2月5日21:11 snort.log.1517563475 -rwxr-x--- 1 鼻息 鼻息 3566073 2 月 7 日 16:00 snort.log.1517832965 -rwxr-x--- 1 snort snort 18999 2月7 20:46 snort.log.1518003111 -rwxr-x--- 1 snort snort 20705098 2月15日19:00 snort.log.1518004113 -rw-------- 1 鼻息 鼻息 357271 2 月 15 日 22:22 snort.log.1518688923 -rwxr-x--- 1 snort snort 50782147 2 月 15 日 22:22 警報 [jump1@widids01 snort-3]# tail -3 警報 02/15-18:22:02.204655 [1:2403380:38412] ET CINS 主動威脅情報信譽不良 IP TCP 組 41 [分類:雜項攻擊] [優先順序:2] {TCP} 02/15-22:22:03.335107 [1:2403408:38412] ET CINS 主動威脅情報信譽不佳 IP TCP 組 55 [分類:雜項攻擊] [優先順序:2] {TCP} 02/15-22:22:03.335107 [1:2403408:38412] ET CINS 主動威脅情報信譽不佳 IP TCP 組 55 [分類:雜項攻擊] [優先順序:2] {TCP}
我在這裡面臨的問題snort.log.[epoch]
是[epoch]
文件生成時間,所以如果用戶輸入
測試用例1:
time:2015-02-15-22:28:02
snort.log.file
如何為他提供攻擊資料包含位置的匹配
測試用例2:
time:2015-02-15-18:22:02
snort.log.file
如何為他提供攻擊資料包含位置的匹配
我嘗試過但find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"
沒有得到正確的輸出。
答案1
假設您有這樣的輸入:
time="time:2015-02-15-18:22:02"
然後你可以將其轉換為 Unix 時間戳記(自紀元以來的秒數)並將其保存在變數中timestamp
:
time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/\1T/') +%s)
我sed
在這裡使用去掉前綴time:
並將日期和時間之間的冒號更改為T
(ISO 8601),date
然後用於將時間戳轉換為自紀元以來的秒數。
根據此時間戳代表的內容,您可以使用它find
來輸出日誌的檔案名稱:
如果檔案名稱已經包含時間戳,則可以
snort.log.$time
直接使用如果是文件的修改時間:
find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
這將找到修改時間在
time
- 1 秒和time
.如果您需要查找給定時間戳之後最舊的日誌文件,您可以使用
sort
andhead
:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
如果您需要找到日誌檔案(以任何方式)包含給定的時間戳,使用
grep
:grep -l $time *
如果您有很多長日誌文件,可以將其與
find
和/或parallel
使其更快,例如:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +