Minulla on työ eräajojärjestelmässä, joka toimii erittäin pitkään ja tuottaa tonnia ulostuloa. Niin paljon, että minun on syötettävä vakiolähtö gzip: n läpi, jotta eräsolmu ei täytä työaluettaan ja kaatuu myöhemmin.
longscript | gzip -9 > log.gz
Nyt haluaisin haluaisin tutkia työn tuloksia, kun se on vielä käynnissä. Joten teen tämän:
gunzip log.gz
Tämä toimii hyvin kauan, koska se on valtava tiedosto (useita Gt). Näen, että ulostulotiedosto luodaan sen ollessa käynnissä, ja voin tarkastella sitä sen rakentamisen aikana.
tail log > some-line-of-the-log-file tail log > some-other-line-of-the-log-file
Viime kädessä kuitenkin gzip kohtaa lopun gzip-tiedostosta. Koska työ on edelleen käynnissä ja gzip kirjoittaa edelleen tiedostoa, oikeaa alatunnistetta ei vielä ole, joten näin tapahtuu:
gzip: log.gz: unexpected end of file
Tämän jälkeen purettu loki tiedosto poistetaan, koska gzip uskoo, että vioittuneista puretuista tiedoista ei ole minulle hyötyä. Olen kuitenkin eri mieltä – vaikka pari viimeistä riviä sekoitettaisiin, tulos on silti minulle erittäin mielenkiintoinen.
Kuinka voin vakuuttaa gzipin antamaan minun pitää ”vioittunut” tiedosto?
Kommentit
Vastaa
Tiedoston aivan loppupuolen lisäksi näet pakkaamattomat tiedot kohdalla zcat
(tai gzip -dc
tai gunzip -c
):
zcat log.gz | tail
tai
zcat log.gz | less
tai
zless log.gz
gzip
tekee puskuroinnin ilmeisistä syistä (sen on pakattava tiedot paloiksi), joten vaikka ohjelma on saattanut antaa joitain tietoja, kyseiset tiedot eivät välttämättä ole vielä log.gz
tiedosto.
Voit myös tallentaa pakkaamattoman lokin
zcat log.gz > log
… mutta se olisi typerää, koska siellä on ilmeisesti syy miksi pakkaat lähdön ensisijaisesti.
Kommentit
- Katso
gunzip < log.gz
järjestelmille, joissazcat
toimii vain.Z
-tiedostoissa.
Vastaa
Jos ymmärrän oikein, haluat tehdä jotain esimerkiksi tail -f
yhä kasvavan gzip-tiedoston kanssa tiedosto: Olen ”kehittänyt gztool , joka voi tehdä sen (muun muassa):
$ gztool -T log.gz
ja se lähettää konsoliin jatkuvasti, odottaen uusia tietoja tarvittaessa.
Huomaa, että gztool
luo myös hakemistotiedoston (log.gzi
tässä tapauksessa), mikä tekee tulevista hännistä tai muista satunnaisista pääsyistä gzip-tietoihin gztool
-toiminnolla melkein välittömästi. Jos et halua luoda hakemistoa (vaikka se on 0,3% / gzip-koko eikä pidennä käsittelyaikaa), voit luoda sen -W
-toiminnon avulla.
vastaus
Voit yrittää jakaa tiedoston ja gzip: n sen jokaisella: https://stackoverflow.com/a/2016918/3090950
Voisitko silti suorittaa komennon tarkassa tilassa? Tämä antaa sinulle lisätietoja.
gunzip -c
kirjoittaa lähdön stdoutille … ehkä se, että ' s mitä etsit? Se pitää alkuperäisen muuttumattomana.