Я работаю над сценарием, где я буду получать исходные данные как время и foldername, я должен найти файл (snort.log.*), который падает в том диапазоне времени, что вводит мой пользователь (он будет видеть аварийный файл полужирная метка времени и вводить то время для фактического snort.log. ** файл, который содержит детали нападения и аварийного файла, содержит только метаданные), вот образец каталога
[jump1@widids01 snort-3]# ls -ltr | tail -6 -rwxr-x--- 1 snort snort 301731 Feb 2 18:18 snort.log.1517557015 -rwxr-x--- 1 snort snort 5720853 Feb 5 21:11 snort.log.1517563475 -rwxr-x--- 1 snort snort 3566073 Feb 7 16:00 snort.log.1517832965 -rwxr-x--- 1 snort snort 18999 Feb 7 20:46 snort.log.1518003111 -rwxr-x--- 1 snort snort 20705098 Feb 15 19:00 snort.log.1518004113 -rw------- 1 snort snort 357271 Feb 15 22:22 snort.log.1518688923 -rwxr-x--- 1 snort snort 50782147 Feb 15 22:22 alert [jump1@widids01 snort-3]# tail -3 alert 02/15-18:22:02.204655 [1:2403380:38412] ET CINS Active Threat Intelligence Poor Reputation IP TCP group 41 [Classification: Misc Attack] [Priority: 2] {TCP} 02/15-22:22:03.335107 [1:2403408:38412] ET CINS Active Threat Intelligence Poor Reputation IP TCP group 55 [Classification: Misc Attack] [Priority: 2] {TCP} 02/15-22:22:03.335107 [1:2403408:38412] ET CINS Active Threat Intelligence Poor Reputation IP TCP group 55 [Classification: Misc Attack] [Priority: 2] {TCP}
Я сталкиваюсь с проблемами здесь snort.log.[epoch]
т.е. [epoch]
сгенерированное время файла, поэтому если пользователь входит
testcase1:
time:2015-02-15-22:28:02
как дать ему соответствие snort.log.file
поскольку, где данные нападения содержат
testcase2:
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"
Я не получаю надлежащий вывод.
Принятие Вас имеет вход как это:
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
и head
:
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 {} +