我不知道为什么会发生这种情况,但我上传了一些文件,然后Amazon S3
删除了发送的文件,检查它们md5sum
在亚马逊和本地。但最近我发现这个问题是关于相同内容生成两个不同的md5sum
[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
有人知道为什么会发生这种情况吗?或者我应该如何检查我的文件是否一致、可靠?
更新 回答蒂亚戈·克鲁兹的回答:
[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
这给 Tiago 带来了同样的问题。
答案1
根据RFC 1952,gzip
文件头包括修改时间原始文件(字段)的标题。您可以使用以下方式以纯文本1)MTIME
显示标题: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
因此,如果您确实想比较 gzip 文件,请使用以下-n
选项压缩它们:不保存原始文件名和时间戳,
gzip -n renew.log s3/renew.log
并且它们的 md5sum 应该相同。
否则你可以使用
md5sum <(zcat renew.log.gz) <(zcat s3/renew.log.gz)
计算解压文件的md5sum。
1)但是,显示的时间和日期不是从标题中获取的,而是代表当前值;文件名也是如此:
$ 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
答案2
为什么你期望同一个文件的压缩版本是相同的?压缩程序(gzip)可以在标头中包含一些时间戳,或者可以使用一些随机算法。
确实如此!gzip 标头包含时间戳。如果您希望您的压缩文件相同,您的文件必须具有相同的时间戳!
因此,当您复制文件时,请始终按照 进行cp -p file1 file1
,而不仅仅是cp file1 file2
- 这实际上是一个坏习惯!
答案3
只需使用带有‘-n’标志的 gzip:
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