Al manejar archivos de registro, algunos terminan como archivos comprimidos gracias a logrotate
otros y no. Entonces, cuando intentas algo como esto:
$ zcat *
terminas con una línea de comando como zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz
y luego con:
gzip: xyz.log: not in gzip format
¿Existe una herramienta que tomará los bytes mágicos, similar a cómo file
funciona, y usará zcat
o cat
dependerá del resultado para que pueda canalizar la salida, grep
por ejemplo?
NB: Sé que puedo escribirlo, pero estoy preguntando si ya existe una herramienta.
text-processing
cat
gzip
0xC0000022L
fuente
fuente
Pruébalo con
-f
o--force
:Dado que
zcat
es solo un script simple que se ejecutacon opciones largas que se traducirían en
y, según el
man gzip
(enfatizar el mío):También:
Podrías usar
zgrep
para eso:aunque vea el comentario de Stéphane a continuación.
fuente
zless
solución. Agradable y +1.zless
yzgrep
son scripts que llamangzip -cdfq
(es decirzcat -fq
).Yo uso exactamente para el mismo propósito:
fuente
Hay un reemplazo directo para ztools (zcat, zgrep, ..) llamado zutils que une todas las herramientas de descompresión independientemente del backend. Entonces, con el mismo comando, puede leer archivos lzma, gzipped, xz de forma transparente.
Está disponible en debian wheezy o más reciente, probablemente también en redhat / centos.
La página del proyecto está aquí nongnu.org
Una publicación de blog que explica el uso de la utilidad aquí ( noone.org )
fuente
Esto funciona bien en RHEL 5.x donde zcat es un binario. Falla en RHEL 6.x (y Ubuntu 12.x) donde zcat es un script. Esto solía funcionar bien.
No estaría usando zcat en absoluto, pero zgrep tampoco manejará correctamente los archivos sin comprimir.
fuente
Abre tanto comprimido como no comprimido, en orden cronológico.
fuente
ls -rv
para evitartac
. Para los archivos de registro,less $(ls -rv syslog*)
con suLESSOPEN
conjunto de variables de entorno funciona correctamente. Puede buscar entre archivosesc-n
para encontrar la siguiente coincidencia, ignorando los límites de los archivos.zsh
:zcat -f syslog*(nOn)
¿Qué hay de la envoltura?
fuente
Copie y pegue (o póngalo al final de su
~/.bashrc
archivo) esta función bash :Ahora puede escribir, por ejemplo,
logs /var/log/syslog
ologs /var/log/nginx/access.log
para ver todos los mensajes de registro syslog o nginx, desde el más antiguo al más nuevo con menos .Luego puede buscar algo escribiendo
/something
y presionandon
para el siguiente .fuente
Hay un hermoso script de Perl que hace exactamente esto. Es logresolvemerge.pl del proyecto awstats: http://www.awstats.org/docs/awstats_tools.html
Logresolvemerge le permite obtener un archivo de registro de salida único, ordenado por fecha, creado a partir de fuentes particulares:
La salida está en STDOUT, por lo que puede utilizarla bastante bien en procesos adicionales.
fuente
Sobre la base de la respuesta de @ Ryan, lo siguiente obtendrá todos los archivos 'enrollados' ordenados alfabéticamente, luego obtendrá el archivo actual, descomprímalos, si es necesario, y
less
ellos:cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less
o si desea obtenerlos todos como una secuencia continua, puede
tail
hacerlo y, opcionalmente, canalizarlo a otro procesocat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)
Debo señalar que esto está diseñado para registros que se rotan diariamente con la fecha adjunta al final del archivo. Si nos registra un formato diferente, tendrá que modificar la primera parte de la
cat
declaración para acomodarla.fuente