为什么同一个项目的 'tar cvf' 的两个结果不匹配?

Why two results of 'tar cvf' of a same project not matched?

我有一个 go project names hello,它只包含一个 main.go 源文件。

我使用 go build 获取名为 hello 的可执行文件,然后 md5sum hello 获取其 md5:9d51bcdbddd40320ba3057f91952865e。然后我使用 tar cvf hello.tar hello 得到 hello.tar 并计算它的 md5:63fda573908ec8c1bfa58ac46419efbe.

接下来,我 rm hello hello.tar 重做上面的事情:

hello md5: 9d51bcdbddd40320ba3057f91952865e (还是一样)

hello.tar md5: 880dea1e12e5c69b24b83cf13db6606b(已更改)

我已经了解到,如果我使用 tar czf 命令,md5 肯定会更改,因为存档中的时间戳已更改。但是为什么 tar cf 也改变了 md5?

参考:

当您获取 hello 的哈希值时,它会获取内容并计算哈希值。

但是当你得到 hello.tar 时,它会在 hello 文件旁边包含 header 类型,其中包括文件 hello 的修改时间等变量。这些时间戳改变了 hello.tar

的内容(和散列)

参考 tar header 你可以查看 here.