Lors de la gestion des fichiers journaux, certains fichiers finissent par être compressés, d' logrotate
autres non. Alors, quand vous essayez quelque chose comme ça:
$ zcat *
vous vous retrouvez avec une ligne de commande comme zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz
et ensuite avec:
gzip: xyz.log: not in gzip format
Existe-t-il un outil qui prend les octets magiques, similaire à la façon dont file
fonctionne, et utilise zcat
ou cat
dépend du résultat afin que je puisse diriger la sortie vers grep
par exemple?
NB: Je sais que je peux le scripter, mais je demande s'il existe déjà un outil.
la source
Essayez avec
-f
ou--force
:Depuis
zcat
est juste un script simple qui s'exécuteavec de longues options qui se traduiraient par
et, comme indiqué dans
man gzip
(souligner le mien):Aussi:
Vous pouvez utiliser
zgrep
pour cela:voir cependant le commentaire de Stéphane ci-dessous.
la source
zless
solution. Nice et +1.zless
etzgrep
sont des scripts qui appellentgzip -cdfq
(c'est-à-direzcat -fq
).J'utilise exactement dans le même but:
la source
Il existe un remplacement instantané pour ztools (zcat, zgrep, ..) appelé zutils qui unit tous les outils de décompression indépendamment du serveur. Donc, avec la même commande, vous pouvez lire des fichiers en clair, lzma, gzippés, xz de manière transparente.
Il est disponible dans debian Wheezy ou plus récent, probablement aussi dans redhat / centos.
La page du projet est ici nongnu.org
Un article de blog expliquant l'utilisation de l'util ici ( noone.org )
la source
Cela fonctionne très bien dans RHEL 5.x où zcat est un binaire. Il échoue dans RHEL 6.x (et Ubuntu 12.x), où zcat est un script. Cela utilisé pour fonctionner correctement.
Je n'utiliserais pas du tout zcat mais zgrep ne gérera pas correctement les fichiers non compressés non plus.
la source
Ouvre à la fois compressé et non compressé, dans l'ordre chronologique.
la source
ls -rv
à évitertac
. Pour les fichiers journaux,less $(ls -rv syslog*)
avec votreLESSOPEN
variable var, le jeu fonctionne correctement. Vous pouvez effectuer une recherche dans les fichiers avecesc-n
pour trouver la correspondance suivante, en ignorant les limites des fichiers.zsh
:zcat -f syslog*(nOn)
Qu'en est-il de l'emballage?
la source
Copiez et collez (ou mettez-le à la fin de votre
~/.bashrc
fichier) cette fonction bash :Vous pouvez maintenant taper par exemple
logs /var/log/syslog
oulogs /var/log/nginx/access.log
pour voir tous les messages du journal syslog ou nginx du plus ancien au plus récent avec moins .Vous pouvez ensuite rechercher quelque chose en tapant
/something
et en tapantn
pour la suivante .la source
Il y a un beau script Perl qui fait exactement cela. C'est logresolvemerge.pl du projet awstats: http://www.awstats.org/docs/awstats_tools.html
Logresolvemerge vous permet d’obtenir un fichier journal de sortie unique, trié par date et construit à partir de sources particulières:
La sortie est sur STDOUT, afin que vous puissiez l'utiliser assez facilement dans des processus supplémentaires.
la source
En s'appuyant sur la réponse de @ Ryan, les éléments suivants obtiendront tous les fichiers 'roulés' triés par ordre alphabétique, puis le fichier en cours, décompressez-les, si nécessaire, et procédez comme suit
less
:cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less
ou si vous voulez tous les obtenir en tant que flux continu, vous pouvez
tail
les diriger et éventuellement les diriger vers un autre processus.cat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)
Je devrais noter que cela est conçu pour les journaux qui font l'objet d'une rotation quotidienne avec la date ajoutée à la fin du fichier. Si votre journal nous enregistre sous un format différent, vous devrez modifier la première partie de la
cat
déclaration afin de l'adapter.la source