Podle RFC 1952, gzip
hlavička souboru obsahuje čas úpravy původního souboru (pole MTIME
). Záhlaví můžete zobrazit jako prostý text pomocí gzip -lv renew.log.gz
:
method crc date time compressed uncompressed ratio uncompressed_name
defla 64263ac7 Jun 21 17:59 314 597 52.1% renew.log
Pokud tedy opravdu chcete porovnat soubory gzip, komprimujte je pomocí -n
možnost neukládat původní název souboru a časové razítko ,
gzip -n renew.log s3/renew.log
a jejich součet md5 by měl být stejný.
Jinak byste mohli použít
md5sum <(zcat renew.log.gz) <(zcat s3/renew.log.gz)
vypočítat součet md5 dekomprimovaných souborů.
Zobrazený čas a datum však nejsou převzaty z hlavičky, ale představují aktuální hodnoty; to je také případ názvu souboru:
$ gzip renew.log
$ mv renew.log.gz foo.gz
$ gzip -lv foo.gz -------- uncompressed name is taken from current name ---v
method crc date time compressed uncompressed ratio uncompressed_name
defla 6c721644 Jul 11 22:34 580 1586 65.7% foo
$ hexdump -C foo.gz | head -n 2
00000000 1f 8b 08 08 f0 16 df 51 00 03 72 65 6e 65 77 2e |.......Q..renew.|
00000010 6c 6f 67 00 8d 93 dd 6e 9b 30 18 86 8f 89 94 7b |log....n.0.....{|
^^^-------^^^^^
original filename is stored in the header
Proč očekáváte, že komprimovaná verze stejného souboru bude stejná? Kompresní program (gzip) může v hlavičce obsahovat nějaké časové razítko nebo může používat některé randomizované algoritmy.
A přesně! Záhlaví gzip obsahuje časové razítko. Pokud chcete, aby vaše komprimované soubory byly stejné, váš soubor musí mít stejné časové razítko!
Takže když kopírujete soubor, vždy to dělejte jako cp -p file1 file1
, nejen cp file1 file2
- to je vlastně špatný zvyk!
Stačí použít gzip s příznakem '-n':
[email protected]:~$ gzip -n Yippie-Ki-Yay.mp3 bla/Yippie-Ki-Yay.mp3
[email protected]:~$ sha1sum Yippie-Ki-Yay.mp3.gz bla/Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5 Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5 bla/Yippie-Ki-Yay.mp3.gz
Zdroj:https://unix.stackexchange.com/questions/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum