Я работаю над скриптом, в котором я буду получать входные данные в виде времени и имени папки. Мне нужно найти файл (snort.log.*), который попадает в тот временной диапазон, который вводит мой пользователь (он увидит в файле оповещения жирную временную метку и введет это время для фактического файла snort.log.**, который содержит сведения об атаке, а файл оповещения содержит только метаданные). Вот пример каталога.
[jump1@widids01 snort-3]# ls -ltr | tail -6 -rwxr-x--- 1 фырканье фырканье 301731 2 фев 18:18 фырканье.log.1517557015 -rwxr-x--- 1 фырканье фырканье 5720853 5 фев 21:11 фырканье.log.1517563475 -rwxr-x--- 1 хрюканье хрюканье 3566073 7 фев 16:00 хрюканье.log.1517832965 -rwxr-x--- 1 фырканье фырканье 18999 7 фев 20:46 фырканье.log.1518003111 -rwxr-x--- 1 фырканье фырканье 20705098 15 фев 19:00 фырканье.log.1518004113 -rw------- 1 фырканье фырканье 357271 15 фев 22:22 фырканье.log.1518688923 -rwxr-x--- 1 фырканье фырканье 50782147 15 фев 22:22 оповещение [jump1@widids01 snort-3]# tail -3 alert 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
(ИСО 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 {} +