Tar
Gzip 命令產生與 tar -cvzf 完全相同的輸出?
我確實認為以下命令等效,但它們產生不同的校驗和:
tar -cvzf ...
並且tar -cvf ...; gzip ...
不會產生相同的輸出。
sha1sum
不同。與行為
gzip
完美匹配的命令是什麼?tar -cvzf
輸出文件的差異可能不是由於壓縮方法。預設情況下,GNU tar 使用標準的 GZIP放氣模式。造成差異的原因之一是 GZIP 壓縮文件的格式。
GZIP頭的前8個字節的結構如下
OFFSET SIZE VALUE COMMENT 0 1 0x1F First "magic" id 1 1 0x8B Second "magic" id 2 1 CM Compression method 3 1 FLAGS 8-bit flag register 4 4 MTIME Object modification time
問題出在
MTIME
球場上。對於來自管道的數據,這是目前 Unix 時間的值(自 1970 年 1 月 1 日以來的秒數)。因此,以至少一秒的間隔創建的兩個原本相同的壓縮存檔將是不同的。嘗試對
tar -cvzf
相同的數據執行兩次並比較結果。結果將在第 5 個字節(時間戳值的最低字節)有所不同。$ tar czvf test1.tgz tmp/ ; sleep 2 ; \ tar czvf test2.tgz tmp/ ; md5sum test1.tgz test2.tgz tmp/ tmp/test tmp/ tmp/test 23d46f62dd4a9a0851279df7fe15842e test1.tgz c8ae65026a5f771c63acf87a18f7379c test2.tgz