为什么人们使用tarballs?
作为一个主要的Windows开发人员,也许我在Linux社区中缺less一些文化,但是当下载文件首先放到.tar文件中然后压缩时,它总是让我感到困惑。 为什么这两个步骤的过程? 不压缩实现文件分组? 有没有其他的好处,我不知道?
bzip和gzip可以处理单个文件,而不是文件组。 普通的旧zip(和pkzip)在文件组上运行,并具有内置存档的概念。
*尼克斯哲学是一个小工具,可以很好地完成特定的工作,并可以链接在一起。 这就是为什么这里有两个具有特定任务的工具,而且它们被devise成适合一起使用。 这也意味着你可以使用tar来分组文件,然后你可以select压缩工具(bzip,gzip等)。
奇怪的是,没有其他人提到,现代版本的GNU tar
允许您在捆绑的时候进行压缩:
tar -czf output.tar.gz directory1 ... tar -cjf output.tar.bz2 directory2 ...
您也可以使用您select的压缩器,只要它支持' -c
'(标准输出或标准input)和' -d
'(解压缩)选项:
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
这将允许您指定任何替代压缩机。
[ 补充 :如果您从gzip
或bzip2
压缩文件中提取,GNU tar
自动检测这些文件并运行相应的程序。 也就是说,你可以使用:
tar -xf output.tar.gz tar -xf output.tgz # A synonym for the .tar.gz extension tar -xf output.tar.bz2
这些将得到妥善处理。 如果您使用的是非标准压缩机,则需要在进行抽取时指定。]
与选定的答案一样,分离的原因是职责分离。 除此之外,这意味着人们可以使用“ cpio
”程序来打包文件(而不是tar
),然后使用压缩机(曾经一次,首选的压缩机是压缩pack
,之后是compress
pack
)比pack
更有效),然后gzip
与其前任一起运行,并与zip
(已移植到Unix,但不是原生的)完全竞争,现在bzip2
,根据我的经验,通常有比gzip
有10-20%的优势。
[ 补充 :有人在他们的回答中指出, cpio
有有趣的约定。 这是真的,但直到GNU tar
得到相关的选项(' -T -
'),当你不想存档给定目录下的所有东西时, cpio
才是最好的命令 – 你可以确切地select哪些文件被存档。 cpio
的缺点是你不仅可以select文件 – 你必须select它们。 cpio
还有一个分数。 它可以进行从一个目录层次到另一个的原地复制,而不需要任何中间存储:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
顺便说一下,在这种情况下, find
上的' -depth
'选项是非常重要的 – 在设置目录本身的权限之前,它复制目录的内容。 当我在input除了这个答案之前检查命令,我复制了一些只读目录(555许可); 当我去删除副本时,我不得不在“ rm -fr /new/place
”完成之前放宽目录上的权限。 没有-depth
选项, cpio
命令将失败。 当我去做清理工作时,我只记得这一点 – 引用的这个方法对我来说是自动的(主要是凭借多年的许多重复)。 ]
这两种档案的性质有一个重要的区别。
TAR文件仅仅是文件内容与一些头文件的连接,而gzip和bzip2是压缩文件,在压缩包中应用于整个连接。
ZIP文件是单独压缩文件和一些头文件的串联。 实际上,zip和gzip都使用DEFLATEalgorithm,并且通过适当的二进制调整,您可以获取gzipstream的有效载荷,并将其放入带有适当头和字典条目的zip文件中。
这意味着两种不同的存档types有不同的权衡。 对于大量的小文件,TAR后面跟一个stream压缩器通常会导致比ZIP更高的压缩比,因为stream压缩器将有更多的数据来build立它的字典频率,从而能够挤出更多的冗余信息。 另一方面,ZIP文件中的(文件长度保留)错误只会破坏压缩数据受到影响的文件。 通常情况下,stream式压缩机不能从中途错误中有效地恢复。 因此,ZIP文件更容易腐败,因为档案的一部分仍然可以访问。
有趣的是,你可以得到tar
和gzip
的创造者没有预料到的行为。 例如,你不仅可以gzip一个tar文件,还可以tar压缩文件,生成一个files.gz.tar
(这在技术上更接近于pkzip
工作方式)。 或者你可以把另外一个程序joinpipe道,例如一些密码学,你可以select一个任意的tarring,gzip和encrypting的顺序。 无论谁写密码程序,都不需要知道程序如何使用,只需从标准input中读取数据并写入标准输出即可。
在Unix世界里,大多数应用程序都是为了做一件事而做的。 Unix中最受欢迎的压缩工具gzip和bzip2只做文件压缩。 tar做文件连接。 把tar的输出压缩到一个压缩工具中是不需要的,而不会增加任何一个软件的复杂度。
另外一个普遍的原因是,tar和gzip几乎在整个* NIX的安装基础上。 我相信这可能是唯一最大的原因。 这也是为什么zip文件在Windows上非常stream行的原因,因为支持是内置的,而不pipeRAR或7z中的高级例程如何。
GNU tar也允许你从一个命令创build/提取这些文件(一步):
- 创build一个档案:
-
tar -cfvj destination.tar.bz2 *.files
-
tar -cfvz destination.tar.gz *.files
-
提取存档: (-C部分是可选的,它默认为当前目录)
-
tar -xfvj archive.tar.bz2 -C destination_path
-
tar -xfvz archive.tar.gz -C destination_path
这些是我多年来在Linux和最近在Nexenta(OpenSolaris)上致力于记忆的东西。
我认为你正在寻找更多的历史背景。 原始的zip文件是一个文件。 Tar用于将多个文件放入一个文件中。 因此,压缩和压缩是两个步骤。 为什么今天仍然如此主导是任何人的猜测。
从维基百科Tar_(file_format)
在计算中,tar(从磁带归档派生)既是一种文件格式(以一种归档比特stream的forms),也是用于处理这些文件的程序的名称。 格式由POSIX.1-1988和后来的POSIX.1-2001标准化。 最初作为原始格式开发,用于备份目的的磁带备份和其他顺序访问设备,现在通常用于将文件集合整理成一个较大的文件,以进行分发或归档,同时保留文件系统信息,例如用户和组权限,date和目录结构。
焦油大多因历史原因而受欢迎。 有几种可供select的方法。 他们中的一些人几乎和焦油一样长,但由于几个原因不能超过焦油。
- cpio(外来语法;理论上比较一致,但是人们喜欢他们所知道的焦油盛行)
- ar(很久以前stream行,现在用于打包库文件)
- shar(自解压shell脚本,有各种各样的问题;曾经stream行的永远不会less)
- zip(由于许可证问题,许多Unices并不是很容易获得)
tar的主要优点(和缺点)是它既没有文件头,也没有内容的中央目录。 因此,多年以来,它从来没有受到文件大小的限制(直到十年前,档案文件内的8GB限制成为一个问题,几年前才解决)。
显然,tar.gz(或者ar.Z就是这个问题)的一个缺点,就是你不得不解压缩整个存档文件来提取单个文件和列出存档内容, 。
tar是UNIX,因为UNIX是tar
在我看来,今天仍然使用tar
的原因是,它是UNIX方法从一开始就完全正确的情况之一(可能是罕见的)。
仔细研究创build档案所涉及的阶段,我希望你们会同意,不同任务分离的方式在这里是UNIX的哲学 :
-
一个工具(在这里给它一个名字的
tar
),专门将任何select的文件,目录和符号链接(包括所有相关的元数据,如时间戳,所有者和权限)转换成一个字节stream。 -
和另一个任意可互换的工具(
gzip
bz2
xz
,仅举几个选项),将任何input字节stream转换为另一个(希望)较小的输出stream。
使用这样的方法为用户和开发者提供了一些好处:
-
可扩展性允许将
tar
与已经存在的任何压缩algorithm或任何压缩algorithm耦合, 而不必根据tar
的内部工作改变任何东西。只要所有全新的“hyper-zip-utra”或whater压缩工具出来,你已经准备好用它拥抱
tar
的全部力量,拥抱你的新仆人。 -
自从80年代初期以来, 稳定性
tar
一直被大量使用,并在众多的操作系统和机器上运行。为了每个新的归档工具一次又一次地执行存储所有权,许可,时间戳等等的重复操作,不仅节省了大量(否则不必要的)花费在开发中的时间,而且还保证了每个相同的可靠性新应用程序。
-
一致性用户界面始终保持不变。
没有必要记住要使用工具A来恢复权限,您必须通过选项
--i-hope-you-rember-this-one
并使用工具B,您必须使用--this-time-its-another-one
使用工具C它是` – 希望你没有尝试与工具作为开关。而在利用工具D时,如果你现在没有使用
--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
如果你已经使用--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
你真的会搞砸了。
gzip和bzip2只是一个压缩器,而不是一个归档软件。 因此,组合。 你需要tar软件来捆绑所有的文件。
ZIP本身,而RAR也是这两个过程的结合。
通常在* nux世界中,文件包以tarball的forms分发,然后可以select性地进行压缩。 Gzip是一个简单的文件压缩程序,不会执行tar或zip文件捆绑。
有一段时间,zip没有正确处理Unix tar和unix文件系统认为是正常的一些事情,比如符号链接,混合大小写文件等。我不知道这是否改变,但这就是我们使用tar的原因。
Tar =在1个文件中分组文件
GZip =压缩文件
他们在2分裂的过程。就是这样。
在Windows环境中,您可能更习惯于使用执行Zip的WinZip或WinRar。 这些软件的Zip过程将文件和压缩分组,但你根本没有看到这个过程。
出于同样的原因,为什么Mac用户喜欢磁盘映像:他们是一个非常方便的方式来归档的东西,然后传递,上传/下载或电子邮件等。
更容易使用,比拉链恕我直言,更便携。
在我的Altos-XENIX时代(1982年),我们开始使用tar(磁带归档器)从5 1/4软盘或stream式磁带提取文件以及复制到这些媒体。 它的function非常类似于DOS 5.0和6.22中的BACKUP.EXE和RESTORE.EXE命令作为补充,允许跨越多个媒体,如果它不适合只有一个。 缺点是如果其中一个媒体有问题,整个事情就毫无价值。 tar和dd来源于UNIX系统III,并且一直是标准版本的实用程序,类似于UNIX的操作系统可能出于向后兼容性的原因。
焦油不仅是一种文件格式,而且是一种磁带格式。 磁带按位存储数据。 每个存储实现都是定制的。 焦油是您可以从磁盘上取下数据的方法,并将其存储到磁带上,使其他人无需使用自定义程序就可以将其检索出来。
后来压缩程序出现了,* nix仍然只有一种创build包含多个文件的单个文件的方法。
我相信这只是惯性,继续tar.gz的趋势。 Pkzip开始压缩和归档,但DOS系统通常没有附带磁带驱动器!
从维基百科Tar_(file_format)
在计算中,tar(从磁带归档派生)既是一种文件格式(以一种归档比特stream的forms),也是用于处理这些文件的程序的名称。 格式由POSIX.1-1988和后来的POSIX.1-2001标准化。 最初作为原始格式开发,用于备份目的的磁带备份和其他顺序访问设备,现在通常用于将文件集合整理成一个较大的文件,以进行分发或归档,同时保留文件系统信息,例如用户和组权限,date和目录结构。