como encontrar um log específico de um servidor para um horário específico e compactar logs apenas para esse horário

como encontrar um log específico de um servidor para um horário específico e compactar logs apenas para esse horário

Eu tenho um comando para a pergunta acima. Alguém poderia me explicar o comando abaixo?

DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done

Responder1

O script ao qual você está se referindo não está bem escrito e pode não funcionar conforme o esperado.

Aqui está o detalhamento do que ele está fazendo:

DATA=date +%m%d%Y-%H%M%S

Armazene a data atual em DATE em um formato como "10192016-171249". Consulte "man date" para obter detalhes. A propósito, esta não é a melhor maneira de armazenar uma data/hora. Usar o formato AAAAMMDD para a parte da data é muito preferido por motivos de referência/classificação rápida.

ls -lt *.log*

Isso obtém uma lista de diretórios de todos os arquivos que correspondem ao padrão "*.log*" no diretório atual. Por exemplo, poderia ser algo como:

-rw-r--r-- 1 root root  174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm      414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root     209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root    1333 Apr  9  2015 pm-powersave.log.1

grep "11 de outubro"

Em seguida, ele "extrai" apenas as linhas onde "11 de outubro" está presente, o que daria:

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

grep -E '12:|13:|14:

Em seguida, ele extrai novamente apenas aqueles onde "12:" ou "13:" ou "14" estão presentes: (novamente muito mal feito, pois se aplica ao campo de horas, mas também aos campos de minutos e segundos)

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

awk '{imprimir $ 9}'

Dessas linhas restantes, extrai o 9º elemento (o nome do arquivo):

fontconfig.log

zip logs_ hostname_${DATA}.zip $i

Usando um loop "for" em torno do comando acima, cada um desses arquivos é então adicionado a um arquivo zip cujo nome é:

logs_`hostname`_${DATE}.zip

onde hostnameé o nome do seu host e "${DATE}" é a DATA armazenada anteriormente. Portanto, se o seu nome de host for BLUERAY e usar a DATA acima, você obterá um arquivo chamado:

logs_BLUERAY_10192016-171249.zip

Novamente, este script está muito mal escrito e você certamente não deveria usá-lo (ou qualquer outro escrito pelo mesmo autor) para aprender a escrever scripts...

informação relacionada