Ao manipular arquivos de log, alguns acabam sendo arquivos compactados com gzip logrotate
e outros não. Então, quando você tenta algo assim:
$ zcat *
você acaba com uma linha de comando como zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz
e depois com:
gzip: xyz.log: not in gzip format
Existe uma ferramenta que retire os bytes mágicos, semelhante a como file
funciona, e use zcat
ou cat
dependendo do resultado para que eu possa canalizar a saída, grep
por exemplo?
NB: Eu sei que posso criar um script, mas estou perguntando se já existe uma ferramenta disponível.
text-processing
cat
gzip
0xC0000022L
fonte
fonte
Experimente com
-f
ou--force
:Como
zcat
é apenas um script simples que rodacom opções longas que se traduziriam em
e, de acordo com o
man gzip
(enfatize o meu):Além disso:
Você poderia usar
zgrep
para isso:embora veja o comentário de Stéphane abaixo.
fonte
zless
solução. Agradável e +1.zless
ezgrep
são scripts que chamamgzip -cdfq
(ou sejazcat -fq
).Eu uso exatamente para o mesmo propósito:
fonte
Existe um substituto para o ztools (zcat, zgrep, ..) chamado zutils, que une todas as ferramentas de descompressão independentemente do back-end. Portanto, com o mesmo comando, você pode ler arquivos simples, lzma, gzipped, xz de forma transparente.
Está disponível no debian wheezy ou mais recente, provavelmente no redhat / centos também.
A página do projeto está aqui nongnu.org
Uma postagem no blog explicando o uso do utilitário aqui ( noone.org )
fonte
Isso funciona bem no RHEL 5.x, em que o zcat é um binário. Ele falha no RHEL 6.x (e Ubuntu 12.x), onde zcat é um script. Isso costumava funcionar bem.
Eu não usaria o zcat, mas o zgrep também não lidará adequadamente com arquivos não compactados.
fonte
Abre ambos compactados e não compactados, em ordem cronológica.
fonte
ls -rv
para evitartac
. Para arquivos de log,less $(ls -rv syslog*)
com o seuLESSOPEN
env var, o conjunto funciona corretamente. Você pode pesquisar nos arquivosesc-n
para encontrar a próxima correspondência, ignorando os limites dos arquivos.zsh
:zcat -f syslog*(nOn)
E o invólucro?
fonte
Copie e cole (ou coloque no final do seu
~/.bashrc
arquivo) esta função bash :Agora você pode digitar, por exemplo,
logs /var/log/syslog
oulogs /var/log/nginx/access.log
para ver todas as mensagens de log syslog ou nginx, da mais antiga para a mais nova, com menos .Você pode então procurar algo digitação
/something
e batern
para o próximo .fonte
Existe um belo script perl exatamente fazendo isso. É logresolvemerge.pl do projeto awstats: http://www.awstats.org/docs/awstats_tools.html
O Logresolvemerge permite obter um arquivo de log de saída exclusivo, classificado na data, construído a partir de fontes específicas:
A saída está em STDOUT, para que você possa utilizá-la bastante bem em processos adicionais.
fonte
Com base na resposta de @ Ryan, o seguinte fará com que todos os arquivos 'rolados' sejam classificados em ordem alfabética, depois obtenha o arquivo atual, descompacte-os, se necessário, e
less
eles:cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less
ou, se você quiser obtê-los todos como um fluxo contínuo, poderá obtê-
tail
los e, opcionalmente, canalizar isso para outro processocat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)
Devo observar que isso foi projetado para logs rotacionados diariamente com a data anexada ao final do arquivo. Se seus logs nos apresentarem um formato diferente, você precisará modificar a primeira parte da
cat
declaração para acomodar.fonte