在我的公司,我们将本地开发数据库快照下载为db.dump.tar.gz
文件。压缩是有意义的,但 tarball 只包含一个文件 ( db.dump
)。
归档单个文件有什么意义,或者.tar.gz
只是这样一个常见的习惯用法?为什么不只是.gz
?
答案1
.tar.gz
使用代替的优点.gz
是
tar
比 . 存储更多的元数据(UNIX 权限等)gzip
。- 该设置可以更轻松地扩展以存储多个文件
- .tar.gz 文件很常见,仅压缩文件可能会让一些用户感到困惑。 (参见 梅尔布尔斯兰评论)
使用的开销tar
也很小。
如果不是真的需要,我仍然不建议 tar 单个文件。有许多有用的工具可以直接访问压缩的单个文件(例如zcat
等zgrep
- 也存在bzip2
和xz
)。
答案2
你实际上只问了一半的问题。另一个问题是,“为什么我要用 gzip 压缩 tar 文件?”。答案不仅仅是gzip
使文件变小(在大多数情况下):
tar
:
- 存储文件名和其他元数据:模式、所有者 ID、组 ID、文件大小、修改时间
- 存储校验和(仅适用于标头)
gzip
:
- 可以存储原始文件名,但这是可选的
- 对原始数据进行 CRC-32 校验和
- 它压缩文件
只有tar
你不能确定你的数据没有被损坏。仅gzip
您无法恢复用户/组 ID、修改时间,并且可能不是原始文件名。
该组合比单个命令/格式提供的功能更强大,因为它们的功能互补。
答案3
仅使用 gzip 压缩的文本文件有一个相当大的优势 - 可以使用less
、zgrep
、等命令行工具直接访问内容zcat
。
答案4
在某些情况下,有一个重要的区别可能会使 using 变得tar
重要:除了 @jofel 在他的回答中提到的“元数据”之外,tar
记录文件名在档案中。当你提取它时,你得到原始文件名无论存档的名称是什么。
在您的情况下,tar 存档及其包含的文件具有相关名称db.dump.tar.gz
和db.tar
,但假设您将 tar 文件重命名为20-Apr-16.dump.tgz
,或其他名称。解压这个tar xvfz
,你就得到了db.dump
。为了比较,解压20-Apr-16.dump.gz
后你就得到了20-Apr-16.dump
. (编辑:正如评论中指出的,gzip 还会记录文件名;但解压缩时通常不使用它)。存档tar
还可以包含将提取的文件放入子目录中的相对路径名。
您的用例将决定是否需要这种文件名持久性,甚至通缉,或者实际上是不可取的。但可以肯定的是,无论压缩如何,tar
存档的传输方式都与常规文件不同。