答案1
柏油从多个文件中创建一个单独的存档文件,但不压缩它们。
格式详细信息
tar 文件是一个或多个文件的串联。每个文件前面都有一个 512 字节的标头记录。文件数据会原封不动地写入,但其长度会四舍五入为 512 字节的倍数,并且额外的空间会用零填充。档案的结尾由至少两个连续的零填充记录标记。
压缩将单个文件压缩为另一个单个文件,但不创建档案。
文件格式
...尽管其文件格式也允许多个这样的流连接起来(压缩文件只是简单地解压缩连接起来,就好像它们原本是一个文件一样),但 gzip 通常用于压缩单个文件。[4] 压缩档案通常是通过将文件集合组装成一个 tar 档案,然后使用 gzip 压缩该档案来创建的。
答案2
Gzip / Bzip2 是流压缩器。它们将数据流压缩成更小的压缩器。它们可以用于单个文件,但不能单独用于文件组。
另一方面,Tar 能够将包含路径、权限和所有权信息的文件列表转换为单个连续的流 - 反之亦然。
这就是为什么,为了存档文件(如果也需要压缩),通常使用 tar + 一些压缩方法。
答案3
Tar 只负责做好一件事:将文件归档到单个存档文件中。归档什么?只负责一件事:放文件。
Gzip 只负责做好一件事:解压缩。解压缩什么?只负责一件事:单个文件任何类型...其中包括用 tar 创建的文件。
它可以追溯到 UNIX 的管道哲学、底层的“管道和过滤器”架构;将所有内容视为文件以及“一件事只做一件事,并且做得很好”的合理架构目标(这产生了一种非常优雅和简单的即插即用功能。)
就其简单性而言,它几乎是代数性质的(这是系统设计的一个重要目标)。而这绝非易事。
从很多方面来看(并非没有缺陷),这几乎是可组合性、模块化、松耦合和高内聚性的巅峰。如果你理解这四个(我的意思是真正理解),你理解了,就会明白为什么 tar 和 gzip 会成对工作。
答案4
传统上,Unix 系统使用一个程序来执行每Unix 哲学:tar
只是将多个文件打包成一个文件的一种手段,最初用于磁带备份(因此tar
,吨猿应收账chive)tar
不提供压缩功能;生成的未压缩档案通常使用其他程序进行压缩,例如gzip
,bzip2
, 或者xz
过去,他们会使用compress
命令来执行此操作;较新的压缩算法比这有效得多。
Unix 哲学所规定的高度模块化方法意味着每个程序都可以根据需要单独使用,也可以组合起来执行更复杂的任务,包括创建此处所述的压缩档案。对于这些类型的任务,它还可以根据需求轻松更换单个工具;您只需更改压缩程序以使用不同的压缩算法,而无需更换实用程序本身tar
。
这种模块化方法并非没有缺点。提及在对其他答案的评论中,专用的压缩存档格式如下.zip
能够更好地处理单个文件的提取;压缩的 tarball 需要几乎完全解压才能提取存档末尾附近的文件,而.zip
存档允许随机访问其内容。(一些较新的格式,例如.7z
,支持固实和非固实档案,以及较大档案中大小不一的固实块。)继续tar
与单独的压缩实用程序结合使用是传统和兼容性的问题;此外,.7z
和.zip
不支持 Unix 文件系统元数据,例如权限。