第1部分:效果
这是两个单独的工作流程及其作用的比较。
您的磁盘上有一个文件,blah.tar.gz
即1 GB的gzip压缩数据,如果未压缩,则占用2 GB(因此压缩率为50%)。
如果要分别进行归档和压缩,则创建此方法的方式将是:
tar cf blah.tar files ...
这将导致未压缩形式的blah.tar
聚集files ...
。
那你会做
gzip blah.tar
这blah.tar
将从磁盘读取内容,通过gzip压缩算法将其压缩,将内容写入blah.tar.gz
,然后取消链接(删除)文件blah.tar
。
现在,让我们解压缩!
方式1
您有blah.tar.gz
一种或另一种方式。
您决定运行:
gunzip blah.tar.gz
这将
- 读取的1 GB压缩数据内容
blah.tar.gz
。
- 通过
gzip
内存中的解压缩器处理压缩数据。
- 当内存缓冲区中充满了“一块”数据时,将未压缩的数据写到
blah.tar
磁盘上的文件中,然后重复进行直到读取所有压缩的数据为止。
- 取消链接(删除)文件
blah.tar.gz
。
现在,您blah.tar
在磁盘上,该磁盘未经压缩,但其中包含一个或多个文件,而数据结构的开销却非常低。文件大小可能比所有文件数据的总和大几个字节。
你跑:
tar xvf blah.tar
这将
- 读取2 GB的未压缩数据内容
blah.tar
和tar
文件格式的数据结构,包括有关文件许可权,文件名,目录等的信息。
- 将2 GB数据和元数据写入磁盘。这涉及:将数据结构/元数据信息转换为在磁盘上适当地创建新文件和目录,或者用新数据内容重写现有文件和目录。
在此过程中,我们从磁盘读取的总数据为1 GB(对于gunzip)+ 2 GB(对于tar)= 3 GB。
在此过程中,我们写入磁盘的总数据为2 GB(对于gunzip)+ 2 GB(对于tar)+元数据的几个字节=大约4 GB。
方式二
您有blah.tar.gz
一种或另一种方式。
您决定运行:
tar xvzf blah.tar.gz
这将
- 一次读取
blah.tar.gz
一个块的1 GB压缩数据内容到内存中。
- 通过
gzip
内存中的解压缩器处理压缩数据。
- 当内存缓冲区填满时,它将把内存中的数据通过管道传递到
tar
文件格式解析器,后者将读取有关元数据等的信息以及未压缩的文件数据。
- 当内存缓冲区填充到
tar
文件解析器中时,它将通过创建文件和目录并用未压缩的内容填充将未压缩的数据写入磁盘。
在此过程中,我们从磁盘读取的总数据为1 GB压缩数据。
在此过程中,我们写入磁盘的总数据为2 GB的未压缩数据+元数据的几个字节=约2 GB。
如果您注意到,方法2中的磁盘I / O数量与例如or或7-Zip程序执行的磁盘I / O 相同,可以调整压缩率的任何差异。Zip
而且,如果您要考虑压缩率,请使用Xz
压缩器进行封装tar
,您将拥有LZMA2的 TAR存档,该存档的效率与7-Zip可用的最先进的算法一样高效:-)
第2部分:功能
tar
将Unix权限存储在其文件元数据中,并且众所周知并且已经成功地通过各种不同的权限,符号链接等对目录进行了打包测试。在许多情况下,可能需要遍历一堆文件压缩到单个文件或流中,但不一定要压缩它(尽管压缩是有用且经常使用的)。
第3部分:兼容性
许多工具以.tar.gz或.tar.bz2的源代码或二进制格式分发,因为它是“最低公分母”文件格式:与大多数Windows用户可以访问.zip或.rar解压缩器一样,大多数Linux安装也是如此。 ,即使是最基本的版本,无论年龄多大或缩减,都至少可以访问tar和gunzip。甚至Android固件也可以使用这些工具。
针对运行现代发行版的受众的新项目可能会以更现代的格式发行,例如.tar.xz(使用Xz(LZMA)压缩格式,比gzip或bzip2更好地压缩)或.7z,类似于ZIP或RAR文件格式,因为它既压缩又指定了用于将多个文件封装为单个文件的布局。
您不会看到.7z的使用频率更高,其原因与在线下载商店中未以Opus等新格式或WebM中的视频出售音乐的原因相同。与运行古老或非常基本的系统的人的兼容性。
tar xvzf
是不是更难7z -x
?