Gzip
gzip:文件意外結束 - 無論如何如何讀取文件
我在批處理系統上有一份工作,該系統執行時間極長並產生大量輸出。實際上,我必須通過 gzip 傳輸標準輸出,以防止批處理節點填充其工作區並隨後崩潰。
longscript | gzip -9 > log.gz
現在,我想調查仍在執行的作業的輸出。所以我這樣做:
gunzip log.gz
這執行時間很長,因為它是一個巨大的文件(幾 GB)。我可以在執行時看到正在創建的輸出文件,並且可以在建構時查看它。
tail log > some-line-of-the-log-file tail log > some-other-line-of-the-log-file
但是,最終,gzip 會遇到 gzip 壓縮文件的結尾。由於作業仍在執行並且 gzip 仍在寫入文件,因此還沒有適當的頁腳,所以會發生這種情況:
gzip: log.gz: unexpected end of file
在此之後,提取的日誌文件被刪除,因為 gzip 認為損壞的提取數據對我沒有用。然而,我不同意——即使最後幾行被打亂了,輸出對我來說仍然非常有趣。
如何說服 gzip 讓我保留“損壞”的文件?
除了文件的最後,您還可以使用
zcat
(或gzip -dc
,或gunzip -c
)查看未壓縮的數據:zcat log.gz | tail
或者
zcat log.gz | less
或者
zless log.gz
gzip
出於明顯的原因會進行緩衝(它需要將數據壓縮成塊),因此即使程序可能已經輸出了一些數據,該數據可能還沒有在log.gz
文件中。您還可以將未壓縮的日誌儲存為
zcat log.gz > log
…但這很愚蠢,因為您首先壓縮輸出顯然是有原因的。