没有tar的gzip?为什么它们一起使用?

use*_*686 65 gzip tar gz

为什么targzip几乎总是一起使用,而不仅仅是 gzip?这种方法有什么好处吗?

Mat*_*all 76

TAR从许多文件中创建一个存档文件,但不压缩它们。

格式详情

tar 文件是一个或多个文件的串联。每个文件前面都有一个 512 字节的头记录。文件数据被原封不动地写入,只是它的长度被四舍五入到 512 字节的倍数并且额外的空间被零填充。存档的结尾由至少两个连续的零填充记录标记。

GZIP将单个文件压缩为另一个文件,但不会创建存档。

文件格式

...虽然它的文件格式也允许连接多个这样的流(压缩文件只是简单地解压缩连接,就好像它们最初是一个文件一样),gzip 通常只用于压缩单个文件。 [4] 压缩档案通常是通过将文件集合组合成单个 tar 档案,然后使用 gzip 压缩该档案来创建的。

  • 没有“tgz”文件这样的东西。它是一个 tar.gz。gzip 的工作是压缩或解压缩其内容(在本例中为 tar 存档)。然后您使用 tar 将其解压缩。这是典型的 Unix 流水线哲学,因此几乎没有什么独特之处。 (12认同)
  • 不,.tar.gz 不是唯一的:.tar.bz2、.cpio.gz 等的工作方式相同。 (5认同)
  • 如果文件位于大型存档的末尾,则进行“大量额外工作”。显然,如果您需要随机访问,zip/rar/xar/7z/lzh/arj/cab/sit 等是高级格式。 (4认同)
  • @ user36310 原则上我知道您的意思,但实际上这些工具可让您提取单个文件。`tar -xzvf tarball.tar.gz single/file.txt`。在幕后,它需要做一些额外的工作,但对于外观,它提取单个文件。 (3认同)
  • 准确地说,`.tar.*` 压缩档案总是“可靠的”,即。由单个压缩流组成。另一方面,`.zip` 存档根本不可靠,压缩算法会为每个文件重新启动。它牺牲了压缩效率来加速随机访问。`.7z` 档案可以是实心、非实心或具有实心块。 (3认同)

小智 20

Gzip / Bzip2 是流压缩器。他们将数据流压缩成更小的东西。它们可以用于单个文件,但不能单独用于文件组。

另一方面,Tar 能够将包含路径、权限和所有权信息的文件列表转换为单个连续流——反之亦然。

这就是为什么要存档文件(如果还需要压缩),通常使用 tar + 某种压缩方法。


lui*_*nal 12

Tar 负责做好一件事,而且只有一件事:(取消)归档到(移出)单个归档文件。什么?只有一件事:一文件。

Gzip 只负责做好一件事:(解)压缩。什么?一件事,只有一件事:任何类型的单个文件......并且包括一个用tar创建的文件。

它可以追溯到 UNIX 的流水线哲学,即底层的“管道和过滤器”架构;将所有内容都作为文件处理,以及“一件事只做一件事,而且做得好”的合理架构目标(这导致了一种非常优雅和简单的即插即用) .)

就其简单性而言,它本质上几乎是代数的(系统设计中的一个重要目标)。这绝非易事。

在许多方面(并非没有缺陷),这几乎是可组合性、模块化、松散耦合和高内聚性的顶峰。如果你理解这四个(我的意思是真正理解),你就会明白,为什么 tar 和 gzip 成对工作就很明显了。


p_l*_*p_l 10

首先,TAR 不是为了创建文件存档而创建的。它是磁带存档器。它的工作是从磁带写出或加载存档。

-f选项使得它使用一个文件作为“虚拟磁带”,然后可以通过另一个程序被压缩。事实上,这种压缩也发生在现实世界的磁带驱动器上。

当然,在这种情况下,使用一个程序来做好的哲学也很重要,但人们可能会错过为什么 TAR 档案被构造为流而不是内容 + 内容的目录。

  • 对... ZIP 文件将所有文件信息放在一个统一的标题中,然后所有文件内容...这使得不可能*附加*更多文件到 ZIP 文件...你必须重写整个文件... . 使用 TAR 格式,每个文件的头是独立的,因此您可以轻松追加更多文件而无需重写整个磁带 (3认同)

bwD*_*aco 7

传统上,Unix系统中使用的一个程序来执行每一个任务Unix哲学tar只是一种手段将多个文件打包到单个文件中,最初为磁带备份(因此tarAR香葱)。tar不提供压缩;将所得的未压缩存档通常与一些其它压缩方案诸如gzipbzip2,或xz。在过去,他们会使用compress命令来执行此操作;较新的压缩算法比这更有效。

Unix 哲学所规定的高度模块化的方法意味着每个程序都可以根据需要单独使用,也可以组合使用以执行更复杂的任务,包括创建此处所述的压缩档案。对于这些类型的任务,还可以根据需要轻松更换单个工具;您只需更改压缩程序以使用不同的压缩算法,而不必更换tar实用程序本身。

这种模块化方法并非没有缺点。正如在对其他答案的评论中提到的那样,专用的压缩存档格式.zip能够更好地处理单个文件的提取;压缩的 tarball 需要几乎全部解压缩,以便在接近存档末尾处提取文件,而.zip存档允许随机访问其内容。(一些较新的格式,例如.7z,支持实体和非实体档案,以及较大档案中不同大小的实体块。)继续tar与单独的压缩实用程序结合使用是传统和兼容性的问题;同时,.7z.zip不支持Unix文件系统的元数据,如权限。