Mat*_*all 76
TAR从许多文件中创建一个存档文件,但不压缩它们。
tar 文件是一个或多个文件的串联。每个文件前面都有一个 512 字节的头记录。文件数据被原封不动地写入,只是它的长度被四舍五入到 512 字节的倍数并且额外的空间被零填充。存档的结尾由至少两个连续的零填充记录标记。
GZIP将单个文件压缩为另一个文件,但不会创建存档。
...虽然它的文件格式也允许连接多个这样的流(压缩文件只是简单地解压缩连接,就好像它们最初是一个文件一样),gzip 通常只用于压缩单个文件。 [4] 压缩档案通常是通过将文件集合组合成单个 tar 档案,然后使用 gzip 压缩该档案来创建的。
小智 20
Gzip / Bzip2 是流压缩器。他们将数据流压缩成更小的东西。它们可以用于单个文件,但不能单独用于文件组。
另一方面,Tar 能够将包含路径、权限和所有权信息的文件列表转换为单个连续流——反之亦然。
这就是为什么要存档文件(如果还需要压缩),通常使用 tar + 某种压缩方法。
lui*_*nal 12
Tar 负责做好一件事,而且只有一件事:(取消)归档到(移出)单个归档文件。什么?只有一件事:一组文件。
Gzip 只负责做好一件事:(解)压缩。什么?一件事,只有一件事:任何类型的单个文件......并且包括一个用tar创建的文件。
它可以追溯到 UNIX 的流水线哲学,即底层的“管道和过滤器”架构;将所有内容都作为文件处理,以及“一件事只做一件事,而且做得好”的合理架构目标(这导致了一种非常优雅和简单的即插即用) .)
就其简单性而言,它本质上几乎是代数的(系统设计中的一个重要目标)。这绝非易事。
在许多方面(并非没有缺陷),这几乎是可组合性、模块化、松散耦合和高内聚性的顶峰。如果你理解这四个(我的意思是真正理解),你就会明白,为什么 tar 和 gzip 成对工作就很明显了。
p_l*_*p_l 10
首先,TAR 不是为了创建文件存档而创建的。它是磁带存档器。它的工作是从磁带写出或加载存档。
的-f选项使得它使用一个文件作为“虚拟磁带”,然后可以通过另一个程序被压缩。事实上,这种压缩也发生在现实世界的磁带驱动器上。
当然,在这种情况下,使用一个程序来做好的哲学也很重要,但人们可能会错过为什么 TAR 档案被构造为流而不是内容 + 内容的目录。
传统上,Unix系统中使用的一个程序来执行每一个任务Unix哲学:tar只是一种手段将多个文件打包到单个文件中,最初为磁带备份(因此tar,吨猿AR香葱)。tar不提供压缩;将所得的未压缩存档通常与一些其它压缩方案诸如gzip,bzip2,或xz。在过去,他们会使用compress命令来执行此操作;较新的压缩算法比这更有效。
Unix 哲学所规定的高度模块化的方法意味着每个程序都可以根据需要单独使用,也可以组合使用以执行更复杂的任务,包括创建此处所述的压缩档案。对于这些类型的任务,还可以根据需要轻松更换单个工具;您只需更改压缩程序以使用不同的压缩算法,而不必更换tar实用程序本身。
这种模块化方法并非没有缺点。正如在对其他答案的评论中提到的那样,专用的压缩存档格式.zip能够更好地处理单个文件的提取;压缩的 tarball 需要几乎全部解压缩,以便在接近存档末尾处提取文件,而.zip存档允许随机访问其内容。(一些较新的格式,例如.7z,支持实体和非实体档案,以及较大档案中不同大小的实体块。)继续tar与单独的压缩实用程序结合使用是传统和兼容性的问题;同时,.7z和.zip不支持Unix文件系统的元数据,如权限。