Localizar arquivo com intervalo de tempo fileA e fileB

0

Estou trabalhando em script onde estarei recebendo entradas como time e foldername, preciso encontrar um arquivo (snort.log. *) que esteja caindo nesse intervalo de tempo que meu usuário entra (ele estará vendo o alerta arquivar o carimbo de data / hora em negrito e digitar esse tempo para o arquivo snort.log. ** real que contém os detalhes do arquivo de ataque e alerta contém apenas os metadados) aqui está a amostra do diretório

[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}

Estou enfrentando os problemas aqui. snort.log.[epoch] i.e [epoch] é o tempo gerado pelo arquivo, portanto, se o usuário inserir

testcase1:

time:2015-02-15-22:28:02 

como dar a ele snort.log.file correspondente para onde os dados do ataque contêm

testcase2:

time:2015-02-15-18:22:02

como dar a ele snort.log.file correspondente para onde os dados do ataque contêm

Eu tentei com find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00" não estou obtendo saída adequada.

    
por shekhar 15.02.2018 / 15:46

1 resposta

1

Supondo que você tenha uma entrada assim:

time="time:2015-02-15-18:22:02"

Depois, você pode convertê-lo em um carimbo de data / hora Unix (segundos desde a época) e salvá-lo na variável timestamp com:

time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/T/') +%s)

Eu uso sed aqui para me livrar do prefixo time: e altero o cólon entre a data e a hora para T ( ISO 8601 ), date é então usado para converter o registro de data e hora em segundos desde a época.

Dependendo do que esse timestamp representa, você pode usar find para gerar o nome do arquivo do log:

  • se o nome do arquivo já contiver o timestamp, você poderá usar snort.log.$time diretamente

  • se for a hora da modificação do arquivo:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
    

    Isso localizará todos os arquivos de log com um tempo de modificação entre time - 1 segundo e time .

  • se você precisar encontrar o arquivo de log mais antigo depois do carimbo de data e hora especificado, use sort e head :

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
    
  • se você precisar encontrar o arquivo de log que (de qualquer forma) contém o registro de data e hora especificado, use grep :

    grep -l $time *
    

    Se você tiver muitos arquivos de log longos, combine isso com find e / ou parallel para torná-lo mais rápido, por exemplo:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +
    
por dessert 17.02.2018 / 11:22