Podczas obsługi plików dziennika niektóre kończą się jako pliki spakowane gzip, logrotate
a inne nie. Więc kiedy spróbujesz czegoś takiego:
$ zcat *
kończy się wiersz poleceń, zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz
a następnie:
gzip: xyz.log: not in gzip format
Czy istnieje narzędzie, które pobierze bajty magiczne, podobne do tego file
, jak działa, i użyje zcat
lub w cat
zależności od wyniku, aby grep
na przykład przesłać dane wyjściowe ?
NB: Wiem, że mogę to napisać, ale pytam, czy istnieje już jakieś narzędzie.
text-processing
cat
gzip
0xC0000022L
źródło
źródło
Wypróbuj z
-f
lub--force
:Ponieważ
zcat
jest to tylko prosty skrypt, który działaz długimi opcjami, które by się przełożyły
i zgodnie z
man gzip
(podkreśl moje):Również:
Możesz użyć
zgrep
do tego:choć patrz komentarz Stéphane poniżej.
źródło
zless
rozwiązania. Fajnie i +1.zless
izgrep
są skrypty, które nie nazywajągzip -cdfq
(to znaczyzcat -fq
).Używam dokładnie w tym samym celu:
źródło
Istnieje zastąpienie ztools (zcat, zgrep, ..) zwane zutils, które łączy wszystkie narzędzia dekompresyjne niezależnie od backendu. Tak więc za pomocą tego samego polecenia możesz odczytywać pliki zwykłe, lzma, gzipped, xz.
Jest dostępny w wersji debian wheezy lub nowszej, prawdopodobnie także w wersji redhat / centos.
Strona projektu znajduje się tutaj nongnu.org
Wpis na blogu wyjaśniający wykorzystanie util tutaj ( noone.org )
źródło
Działa to dobrze w RHEL 5.x, gdzie Zcat jest plikiem binarnym. Nie działa w RHEL 6.x (i Ubuntu 12.x), gdzie zcat jest skryptem. To kiedyś działało dobrze.
W ogóle nie używałbym Zcat, ale zgrep również nie będzie poprawnie obsługiwał nieskompresowanych plików.
źródło
Otwiera zarówno skompresowane, jak i nieskompresowane, w kolejności chronologicznej.
źródło
ls -rv
aby uniknąćtac
. Dla plików dziennika,less $(ls -rv syslog*)
ze swojąLESSOPEN
ustawić env var prawidłowo działa dobrze. Możesz wyszukiwać w plikach,esc-n
aby znaleźć następne dopasowanie, ignorując granice plików.zsh
:zcat -f syslog*(nOn)
Co powiesz na opakowanie?
źródło
Skopiuj i wklej (lub umieść na końcu
~/.bashrc
pliku) tę funkcję bash :Teraz można wpisać na przykład
logs /var/log/syslog
lublogs /var/log/nginx/access.log
zobaczyć wszystkie te syslog lub nginx wiadomości dziennika od najstarszego do najnowszego z mniej .Następnie możesz wyszukać coś, wpisując
/something
i naciskającn
w następnej kolejności .źródło
Dokładnie to robi piękny skrypt perla. Jest to logresolvemerge.pl z projektu awstats: http://www.awstats.org/docs/awstats_tools.html
Logresolvemerge pozwala uzyskać jeden unikalny wyjściowy plik dziennika, posortowany według daty, zbudowany z określonych źródeł:
Dane wyjściowe są w STDOUT, dzięki czemu można je całkiem dobrze wykorzystać w dodatkowych procesach.
źródło
Opierając się na odpowiedzi @ Ryana, następujące zostaną pobrane wszystkie „zwinięte” pliki posortowane alfabetycznie, a następnie pobierz bieżący plik, w razie potrzeby rozpakuj go, a
less
następnie:cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less
lub jeśli chcesz uzyskać je wszystkie jako ciągły strumień, możesz
tail
je i opcjonalnie potokować to do innego procesucat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)
Powinienem zauważyć, że jest to przeznaczone dla dzienników, które są obracane codziennie z datą dołączaną na końcu pliku. Jeśli logujesz nam inny format, musisz zmodyfikować pierwszą część
cat
instrukcji, aby uwzględnić.źródło