Linux 为什么人们用柏油球?

Linux 为什么人们用柏油球?,linux,package,archive,Linux,Package,Archive,作为一名主要的Windows开发人员,也许我缺少Linux社区中的一些文化元素,但这总是让我感到困惑 下载时,文件首先放入.tar存档,然后压缩。为什么要分两步进行?压缩不能实现文件分组吗?还有什么我不知道的好处吗?bzip和gzip处理单个文件,而不是多组文件。普通的老式zip(和pkzip)对文件组进行操作,并具有内置存档的概念 *nix哲学是一种小型工具,可以很好地完成特定的工作,并且可以链接在一起。这就是为什么这里有两个工具具有特定的任务,它们被设计为很好地配合在一起。这还意味着您可以使

作为一名主要的Windows开发人员,也许我缺少Linux社区中的一些文化元素,但这总是让我感到困惑


下载时,文件首先放入
.tar
存档,然后压缩。为什么要分两步进行?压缩不能实现文件分组吗?还有什么我不知道的好处吗?

bzip
gzip
处理单个文件,而不是多组文件。普通的老式
zip
(和
pkzip
)对文件组进行操作,并具有内置存档的概念


*nix哲学是一种小型工具,可以很好地完成特定的工作,并且可以链接在一起。这就是为什么这里有两个工具具有特定的任务,它们被设计为很好地配合在一起。这还意味着您可以使用tar对文件进行分组,然后可以选择压缩工具(
bzip
gzip
,等等)。

tar=将文件分组到1个文件中

GZip=Zip文件

他们把过程一分为二。就这样


在Windows环境中,您可能更习惯于使用WinZip或WinRar来执行Zip。这些软件的压缩过程会对文件进行分组和压缩,但您根本看不到该过程。

gzip和bzip2只是一个压缩程序,而不是archiver软件。因此,组合。您需要tar软件来捆绑所有文件


ZIP本身和RAR也是这两个过程的组合。

通常在*nux世界中,文件包以tarball的形式分发,然后可以选择gzip。Gzip是一个简单的文件压缩程序,它不像tar或zip那样进行文件绑定


有一段时间,zip没有正确处理Unix tar和Unix文件系统认为正常的一些事情,如符号链接、混合大小写文件等。我不知道这是否发生了变化,但这就是我们使用tar的原因。

在Unix世界中,大多数应用程序设计为做一件事,并且做得很好。Unix中最流行的zip实用程序gzip和bzip2只进行文件压缩。tar执行文件连接。通过管道将tar的输出传输到压缩实用程序中,可以实现所需的功能,而不会给任何一个软件增加过多的复杂性。

我想您正在寻找更多的历史背景。最初的压缩是针对单个文件的。Tar用于将多个文件放入单个文件中。因此,涂油和拉链是两个步骤。为什么它在今天仍然如此占主导地位,这是任何人的猜测

来自维基百科

在计算中,tar(源自磁带存档)既是一种文件格式(以一种存档位流的形式),也是用于处理此类文件的程序的名称。格式由POSIX.1-1988和后来的POSIX.1-2001标准化。最初是作为原始格式开发的,用于磁带备份和用于备份目的的其他顺序访问设备,现在通常用于将文件集合整理成一个更大的文件,以便分发或存档,同时保留文件系统信息,如用户和组权限、日期和目录结构


奇怪的是,没有人提到GNU
tar的现代版本允许您在捆绑时进行压缩:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...
您也可以使用您选择的压缩器,只要它支持“
-c
”(到标准输出或从标准输入)和“
-d
”(解压缩)选项:

这将允许您指定任何替代压缩机

[新增:如果您是从压缩文件
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
更有效)然后是
gzip
,它围绕着它的两个前身运行,与
zip
(它已经移植到Unix,但不是本地的)完全竞争,现在是
bzip2
,根据我的经验,它通常比
gzip
有10-20%的优势

[补充:有人在他们的回答中指出,
cpio
有有趣的约定。这是真的,但直到GNU
tar
获得相关选项(“
-T-
”),
cpio
是一个更好的命令,当您不想归档给定目录下的所有内容时,实际上可以选择归档的文件。
cpio
的缺点是,您不仅可以选择文件,还必须选择它们。
cpio
scores;它可以从一个目录层次结构到另一个目录层次结构进行现场复制,而无需任何中间存储:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place
顺便说一句,
查找
上的“
-depth
”选项在此上下文中很重要-它在设置目录本身的权限之前复制目录的内容。当我在输入此答案之前选中该命令时,我复制了一些只读目录(555权限);当我去删除副本时,我必须在“
rm-fr/new/place
”完成之前放松对目录的权限。如果没有
-depth
选项,
cpio
命令就会失败。我只是在去做清理时才想起这一点——引用的公式对我来说是自动的(主要是由于多年来多次重复)。
]一个重要的区别在于两种ar的性质
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
sudo apt install <package_name>