Olyan kötegelt rendszeren dolgozom, amely rendkívül hosszú ideig fut és rengeteg kimenetet produkál. Valójában annyit, hogy át kell vezetnem a szabványos kimenetet a gzip-en keresztül, hogy a kötegcsomópont ne töltse ki a munkaterületét és ne ütközzen össze.
longscript | gzip -9 > log.gz
Most szeretném szeretném megvizsgálni a munka kimenetét, amíg még fut. Tehát ezt csinálom:
gunzip log.gz
Ez nagyon hosszú ideig fut, mivel hatalmas fájl (több GB). Látom, hogy a kimeneti fájl futás közben létrejön, és megnézhetem, amíg épül.
tail log > some-line-of-the-log-file tail log > some-other-line-of-the-log-file
Végül azonban a gzip találkozik a végével a gzip fájlból. Mivel a feladat még mindig fut, és a gzip még mindig írja a fájlt, még nincs megfelelő lábléc, így történik:
gzip: log.gz: unexpected end of file
Ezek után a kibontott napló fájl törlődik, mivel a gzip úgy gondolja, hogy a sérült kibontott adatok nekem nem használhatók. Én azonban nem értek egyet – még akkor is, ha az utolsó pár sort kódolják, a kimenet továbbra is nagyon érdekes számomra.
Hogyan győzhetem meg a gzip-t, hogy hagyjam megtartani a “sérült” fájlt?
Megjegyzések
Válasz
A fájl legvégén kívül a tömörítetlen adatokat láthatja a zcat
(vagy gzip -dc
, vagy gunzip -c
):
zcat log.gz | tail
vagy
zcat log.gz | less
vagy
zless log.gz
gzip
nyilvánvaló okokból pufferelést végez (darabokra kell tömörítenie az adatokat), így annak ellenére, hogy a program esetleg kinyomtatott néhány adatot, előfordulhat, hogy ezek az adatok még nincsenek a log.gz
fájl.
A tömörítetlen naplót tárolhatja a
zcat log.gz > log
fájlokkal is … de ez butaság, mivel nyilvánvalóan ok, miért tömöríted először a kimenetet.
Megjegyzések
- Lásd
gunzip < log.gz
a azoknál a rendszereknél, ahol azcat
csak.Z
fájlokban működik.
Válasz
Ha jól értem, valami olyasmit szeretne csinálni, hogy tail -f
a még mindig növekvő gzip-lel fájl: “kifejlesztettem gztool , amely ezt megteheti (többek között):
$ gztool -T log.gz
és folyamatosan kimenni fog a konzolra, és szükség esetén új adatokat vár.
Ne feledje, hogy az gztool
indexfájlt is létrehoz (log.gzi
ebben az esetben), amelyek a jövőbeni farkakat vagy egyéb véletlenszerű hozzáféréseket tesznek a gzip adatokhoz gztool
segítségével szinte azonnal. Ha nem szeretne indexet létrehozni (annak ellenére, hogy 0,3% / gzip méretű, és nem növeli a feldolgozási időt), akkor a -W
használatával nem hozhatja létre.
Válasz
Megpróbálhatja felosztani a fájlt, és mindegyikét gzip-zni: https://stackoverflow.com/a/2016918/3090950
Különben is, futtathatja a parancsot részletes módban? Ez további információkat nyújt Önnek.
gunzip -c
írja a kimenetet a stdout-ba … talán az, hogy ' s mit keres? Az eredeti változatlan marad.