Aynı içeriğe sahip dosyalar ancak gzip'deyken farklı md5sums'ler?


16

Bunun neden olduğunu bilmiyorum, ancak Amazon S3gönderilen dosyaları silmek için md5sumhem Amazon’da hem de yerel olarak kontrol etmek için bazı dosyalar yüklüyorum. Ancak son zamanlarda aynı konuyla ilgili bu konuyu iki farklı yaratıyor buldummd5sum

[valter.silva@alog ~]$ ls
renew.log  s3

[valter.silva@alog ~]$ ls s3/
renew.log

[valter.silva@alog ~]$ md5sum renew.log 
d41d8cd98f00b204e9800998ecf8427e  renew.log

[valter.silva@alog ~]$ md5sum s3/renew.log 
d41d8cd98f00b204e9800998ecf8427e  s3/renew.log

[valter.silva@alog ~]$ gzip renew.log 
[valter.silva@alog ~]$ gzip s3/renew.log 

[valter.silva@alog ~]$ md5sum renew.log.gz 
aa1f0ae9a61aac5bcd32b917fbd9324b  renew.log.gz

[valter.silva@alog ~]$ md5sum s3/renew.log.gz 
6ae0e48edb68e9ed938fdfc3894f6c94  s3/renew.log.gz

Bunun neden olduğunu bilen var mı? Veya dosyalarımın tutarlı ve güvenilir olup olmadığını nasıl kontrol etmeliyim?

güncelleme Tiago Cruz cevap cevap:

[valter.silva@alog ~]$ sha1sum renew.log 
da39a3ee5e6b4b0d3255bfef95601890afd80709  renew.log

[valter.silva@alog ~]$ sha1sum s3/renew.log 
da39a3ee5e6b4b0d3255bfef95601890afd80709  s3/renew.log

[valter.silva@alog ~]$ gzip renew.log 
[valter.silva@alog ~]$ gzip s3/renew.log 

[valter.silva@alog ~]$ sha1sum renew.log.gz 
2d9111d9db71da9fe4de57fbc19c89eb0bd46470  renew.log.gz

[valter.silva@alog ~]$ sha1sum s3/renew.log.gz 
05014ca24d133f1761f9134e8dab52e6e2111010  s3/renew.log.gz

Aynı sorunu verir Tiago.

Yanıtlar:


54

RFC 1952'ye göre , gzipdosya başlığı orijinal dosyanın değiştirilme zamanını (alan MTIME) içerir. Başlığı düz metin olarak 1) ile görüntüleyebilirsiniz 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

Eğer gerçekten gzip'd dosyalarını karşılaştırmak istiyorsanız Yani, onları sıkıştırmak -niçin, seçenek orijinal dosya adını ve zaman damgası kaydetmez ,

gzip -n renew.log s3/renew.log 

ve onların md5sum'u aynı olmalıdır.

Aksi takdirde kullanabilirsiniz

md5sum <(zcat renew.log.gz) <(zcat s3/renew.log.gz)

sıkıştırılmış dosyaların md5sum'unu hesaplamak için.


1) Ancak, görüntülenen saat ve tarih başlıktan alınmaz, ancak geçerli değerleri gösterir; bu aynı zamanda dosya adı için de geçerlidir:

$ 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

12

Neden aynı dosyanın sıkıştırılmış sürümünün aynı olmasını bekliyorsunuz? Sıkıştırma programı (gzip), başlığa bazı zaman damgası içerebilir veya bazı rasgele algoritmalar kullanabilir.

Ve tam olarak! Gzip başlığı zaman damgasını içerir . Sıkıştırılmış dosyalarınızın aynı olmasını istiyorsanız, dosyanızın aynı zaman damgasına sahip olması gerekir!

Bu nedenle, bir dosyayı kopyaladığınızda, her zaman cp -p file1 file1sadece yapın cp file1 file2- bu aslında kötü bir alışkanlık!


10

Sadece '-n' bayrağıyla gzip kullanın:

tiagocruz@stark:~$ gzip -n Yippie-Ki-Yay.mp3 bla/Yippie-Ki-Yay.mp3 

tiagocruz@stark:~$ 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

Kaynak: https://unix.stackexchange.com/questions/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum


Cevabımı güncellerim Tiago, genel olarak sorun aynı.
Valter Silva

2
'-N' bayrağıyla kullanın
Tiago Cruz

2
-1, bu cevap bir yorum olmalıdır (veya üç)
Brezilyalı Adam

@ ruda.almeida bu, nasıl test edileceğini gösterip problemi çözmeyi denediği için geçerli bir cevaptır.
James Mertz

2
Tamam, "gzip '-n' ile kullanın" öncesi her şey, tam olarak ne anlama geldiğini soruyu netleştirmeye çalışırken yorum yapılmalıdır. Ve sonra, ikinci kısım teknik olarak doğrudur, ancak düşük kaliteli bir cevaptır, çünkü soruna neyin neden olduğunu ya da önerilen önerinin neden çözdüğünü açıklamamaktadır.
Brezilyalı Adam,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.