Bei der Verarbeitung von Protokolldateien werden einige dank logrotate
und andere nicht als komprimierte Dateien ausgegeben . Also, wenn Sie so etwas versuchen:
$ zcat *
Sie erhalten eine Befehlszeile wie zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz
und dann mit:
gzip: xyz.log: not in gzip format
Gibt es ein Tool, das die magischen Bytes annimmt, ähnlich wie es file
funktioniert, und verwendet zcat
oder cat
abhängig vom Ergebnis, damit ich die Ausgabe zum grep
Beispiel weiterleiten kann ?
NB: Ich weiß, dass ich es schreiben kann, aber ich frage, ob es da draußen schon ein Tool gibt.
text-processing
cat
gzip
0xC0000022L
quelle
quelle
Probieren Sie es mit
-f
oder--force
:Da
zcat
ist nur ein einfaches Skript, das läuftmit langen Optionen, die übersetzt werden würden
und nach der
man gzip
(betonen meine):Ebenfalls:
Sie könnten dafür verwenden
zgrep
:siehe jedoch Stéphanes Kommentar unten.
quelle
zless
Lösung. Schön und +1.zless
undzgrep
Skripte sind , die rufen Siegzip -cdfq
(dhzcat -fq
).Ich benutze genau für den gleichen Zweck:
quelle
Es gibt einen Drop-In-Ersatz für ztools (zcat, zgrep, ..) namens zutils, der alle Dekomprimierungswerkzeuge unabhängig vom Backend vereint. Mit dem gleichen Befehl können Sie Klartext-, LZMA-, GZIP- und XZ-Dateien transparent lesen.
Es ist in debian wheezy oder neuer verfügbar, wahrscheinlich auch in redhat / centos.
Die Seite des Projekts ist hier nongnu.org
Ein Blog-Beitrag, der die Verwendung des Dienstprogramms hier erklärt ( noone.org )
quelle
Dies funktioniert gut in RHEL 5.x, wo zcat eine Binärdatei ist. In RHEL 6.x (und Ubuntu 12.x), wo zcat ein Skript ist, schlägt dies fehl. Das hat früher gut funktioniert.
Ich würde zcat überhaupt nicht verwenden, aber auch nicht komprimierte Dateien werden von zgrep nicht richtig verarbeitet.
quelle
Öffnet sowohl komprimierte als auch nicht komprimierte Dateien in chronologischer Reihenfolge.
quelle
ls -rv
zu vermeidentac
. Für die Logdateienless $(ls -rv syslog*)
mit IhremLESSOPEN
env var gut eingestellt funktioniert. Sie können Dateien mit durchsuchenesc-n
, um die nächste Übereinstimmung zu finden, wobei die Dateigrenzen ignoriert werden.zsh
:zcat -f syslog*(nOn)
Was ist mit Wrapper?
quelle
Kopieren Sie
~/.bashrc
diese Bash- Funktion und fügen Sie sie ein (oder fügen Sie sie am Ende Ihrer Datei ein) :Jetzt können Sie zum Beispiel eingeben
logs /var/log/syslog
oderlogs /var/log/nginx/access.log
um zu sehen , alle die syslog oder nginx Protokollmeldungen vom ältesten bis zum neuesten mit weniger .Anschließend können Sie suchen etwas tippen
/something
und schlagenn
für nächste .quelle
Es gibt ein wunderschönes Perl-Skript, das genau das tut. Es ist logresolvemerge.pl aus dem awstats-Projekt: http://www.awstats.org/docs/awstats_tools.html
Mit Logresolvemerge können Sie eine eindeutige Ausgabeprotokolldatei abrufen, die nach Datum sortiert ist und aus bestimmten Quellen erstellt wurde:
Die Ausgabe erfolgt auf STDOUT, sodass Sie sie in zusätzlichen Prozessen recht gut verwenden können.
quelle
Aufbauend auf der Antwort von @ Ryan werden im Folgenden alle "gerollten" Dateien alphabetisch sortiert und anschließend die aktuelle Datei abgerufen und bei Bedarf
less
dekomprimiert.cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less
Wenn Sie sie alle als kontinuierlichen Stream erhalten möchten, können Sie
tail
sie verwenden und optional an einen anderen Prozess weiterleitencat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)
Ich sollte beachten, dass dies für Protokolle gedacht ist, die täglich mit dem Datum gedreht werden, das an das Ende der Datei angehängt wird. Wenn Ihre Protokolle ein anderes Format aufweisen, müssen Sie den ersten Teil der
cat
Anweisung entsprechend ändern .quelle