Answers:
TAR从许多文件中创建一个存档文件,但不压缩它们。
tar文件是一个或多个文件的串联。每个文件之前都有一个512字节的标头记录。文件数据按原样写入,但其长度舍入为512字节的倍数,并且多余的空间为零。归档的结尾至少由两个连续的零填充记录标记。
GZIP将一个文件压缩为另一个文件,但不创建档案。
...尽管它的文件格式也允许串联多个这样的流(压缩的文件被解压缩后串联起来,就好像它们最初是一个文件一样),但gzip通常用于压缩单个文件。[4] 压缩档案通常是通过将文件集合组合到单个tar档案中,然后使用gzip压缩该档案来创建的。
tar -xzvf tarball.tar.gz single/file.txt
。在幕后,它需要做一些额外的工作,但是对于外观,它会提取一个文件。
.tar.*
压缩存档始终是“可靠的”,即。由单个压缩流组成。一个.zip
在另一方面归档不固根本,压缩算法重新开始为每个文件。它牺牲了压缩效率来加速随机访问。.7z
档案可以是实心,非实心或具有实心块。
Tar负责做好一件事情,并且只有一件事情:(取消)归档到单个存档文件中。什么啊 只有一件事:一组文件。
Gzip负责做好一件事情,只有一件事情:(取消)压缩。什么啊 只有一件事和一件事情:任何类型的单个文件...,其中包括用tar创建的文件。
它可以追溯到UNIX的流水线哲学,即底层的“管道和过滤器”体系结构。将所有内容都视为文件,并且将“一件事一事无成”的合理架构目标(这导致非常优雅且简单的即插即用) )
简单来说,它本质上几乎是代数的(系统设计的重要目标)。这绝非易事。
在许多方面(并非没有缺陷),这几乎是可组合性,模块化,松散耦合和高内聚性的顶峰。如果您理解了这四个(我的意思是真的很了解),您就会明白,为什么tar和gzip会成对地工作。
首先,并不是创建TAR来创建文件存档。是Tape ARchiver。它的工作是向/从磁带写出或加载存档。
的-f选项使得它使用一个文件作为“虚拟磁带”,然后可以通过另一个程序被压缩。实际上,这种压缩也发生在现实世界的磁带驱动器上。
当然,在这种情况下,使用一个程序很好地执行操作的原则也很重要,但是人们可能会错过为什么TAR归档被构造为流而不是目录+目录的原因。
传统上,Unix系统中使用的一个程序来执行每一个任务Unix哲学:tar
只是封装多个文件到单个文件中,最初为磁带备份(因此的装置tar
,吨猿AR香葱)。tar
不提供压缩;将所得的未压缩存档通常与一些其它压缩方案诸如gzip
,bzip2
,或xz
。在过去,他们会使用compress
命令来执行此操作;较新的压缩算法要比这有效得多。
Unix哲学所要求的高度模块化的方法意味着,每个程序都可以适当地单独使用,或者组合起来执行更复杂的任务,包括创建压缩档案(如此处所述)。对于这类任务,还可以轻松地根据需要交换出各个工具。您只需将压缩程序更改为使用其他压缩算法,而不必替换tar
实用程序本身。
这种模块化方法并非没有缺点。正如在其他答案的注释中所提到的,专用的压缩存档格式如.zip
更好地能够处理单个文件的提取。压缩的tarball几乎需要完全解压缩,以便在存档末尾提取文件,而.zip
存档则允许随机访问其内容。(某些较新的格式,例如.7z
支持固体和非固体档案,以及较大档案中大小不同的固体块。)继续tar
结合使用单独的压缩实用程序是传统和兼容性的问题;同时,.7z
和.zip
不支持Unix文件系统的元数据,如权限。