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 a zcat 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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük