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


60

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

Answers:


72

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

格式详情

tar文件是一个或多个文件的串联。每个文件之前都有一个512字节的标头记录。文件数据按原样写入,但其长度舍入为512字节的倍数,并且多余的空间为零。归档的结尾至少由两个连续的零填充记录标记。

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

文件格式

...尽管它的文件格式也允许串联多个这样的流(压缩的文件被解压缩后串联起来,就好像它们最初是一个文件一样),但gzip通常用于压缩单个文件。[4] 压缩档案通常是通过将文件集合组合到单个tar档案中,然后使用gzip压缩该档案来创建的。


12
没有“ tgz”文件。它是tar.gz。gzip的工作是压缩或解压缩其内容(在本例中为tar存档)。然后,您可以使用tar对其进行归档。这是Unix的典型流水线哲学,因此很难独树一帜。
luis.espinal 2011年

5
不,.tar.gz不是唯一的:.tar.bz2,.cpio.gz等以相同的方式工作。
user46971 2011年

3
@ user36310我原则上知道您的意思,但实际上,这些工具可让您提取单个文件。 tar -xzvf tarball.tar.gz single/file.txt。在幕后,它需要做一些额外的工作,但是对于外观,它会提取一个文件。
Rich Homolka'3

4
如果文件在大型归档文件的末尾,请进行“大量的额外工作”。显然,如果您需要随机访问,则zip / rar / xar / 7z / lzh / arj / cab / sit等是更好的格式。
LaC 2011年

3
确切地说,.tar.*压缩存档始终是“可靠的”,即。由单个压缩流组成。一个.zip在另一方面归档不固根本,压缩算法重新开始为每个文件。它牺牲了压缩效率来加速随机访问。.7z档案可以是实心,非实心或具有实心块。
丹尼尔·B

17

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

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

因此,要存档文件(如果还需要压缩),通常要使用tar +某种压缩方法。


12

Tar负责做好一件事情,并且只有一件事情:(取消)归档到单个存档文件中。什么啊 只有一件事:一文件。

Gzip负责做好一件事情,只有一件事情:(取消)压缩。什么啊 只有一件事和一件事情:任何类型的单个文件...,其中包括用tar创建的文件。

它可以追溯到UNIX的流水线哲学,即底层的“管道和过滤器”体系结构。将所有内容都视为文件,并且将“一件事一事无成”的合理架构目标(这导致非常优雅且简单的即插即用) )

简单来说,它本质上几乎是代数的(系统设计的重要目标)。这绝非易事。

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


1
这种UNIX哲学很好,但是我发现它不足以创建非可靠的归档文件。(从1 GB的tar.gz中提取单个文件应该不会很麻烦,而且据我了解,ZIP远远优于tar.gz ...是吗?)
Mehrdad

@Mehrad- 首先,什么是非固定存档?正如伏尔泰的说法“如果要与我交谈,首先必须定义您的用语。” 其次,是的,在任何情况下,管道和过滤器体系结构都无法满足要求,就像其他任何体系结构一样,无论其外观如何。这只是工程学上的一点点,而不是在争论。第三,zip优于gzip和tar,但这不是您要的。您问为什么zip和tar会以它们的方式工作以及是否有任何优势,并且给了您技术上的答案。
luis.espinal 2011年

@Mehrad-另外,我不知道在解压缩1gig tar.gz文件时会遇到什么样的问题。我已经做过很多次了,使用旧版本的gzip最多可以达到2GB(使用新版本的gzip最多可以达到4gb。)如果您是通过有线方式或在NFS挂载上进行操作,那么该死!您将遇到类似的性能问题,就好像使用普通zip一样。哎呀,我什至从管道到远程进程都将其解压缩,将gzip输入分散到套接字中。尝试使用zip。对于每个问题,请使用适当的工具(无论是tar | gz还是zip。)
luis.espinal 2011年

8

首先,并不是创建TAR来创建文件存档。是Tape ARchiver。它的工作是向/从磁带写出或加载存档。

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

当然,在这种情况下,使用一个程序很好地执行操作的原则也很重要,但是人们可能会错过为什么TAR归档被构造为流而不是目录+目录的原因。


3
是的... ZIP文件将所有文件信息放在一个统一的标头中,然后是所有文件内容...这使得不可能更多文件附加到ZIP文件中...您必须重写整个文件... TAR格式,每个文件的标头是单独的,因此您可以轻松添加更多文件而无需重写整个磁带
JoelFan 2011年

5

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

Unix哲学所要求的高度模块化的方法意味着,每个程序都可以适当地单独使用,或者组合起来执行更复杂的任务,包括创建压缩档案(如此处所述)。对于这类任务,还可以轻松地根据需要交换出各个工具。您只需将压缩程序更改为使用其他压缩算法,而不必替换tar实用程序本身。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.