11

随着大多数 Linux 发行版放弃 gzip 和 bzip2 以支持 LZMA2 来压缩它们的包,以及许多平台的许多开源实现,我想知道:我们不应该让 DEFLATE 和.zip格式(不幸的是,它被一遍又一遍地混为一谈)休息吗?并继续使用其他现代方式分发我们的(源)包?

GNU tar 支持J使用xz(另一个 LZMA2 压缩器)作为过滤器的开关:

$ tar cJf foo.tar.xz foo/

但是,我倾向于使用7z(p7zip 实现),它是7zaLinux 下用于创建档案的朋友。在创建档案时,我仍然使用“避免 tar-bombs”范例,这意味着档案中有一个目录,因此从命令行提取不会导致当前目录中的文件溢出(这是Linux 上的标准操作方式tar,例如,但在 Windows 下这似乎不是一件值得做的事情)。

无论如何,似乎由于在包中的使用(例如 Fedora RPM 和 Ubuntu DEB),以及像tar. 它具有很高的压缩率(在标准设置中远远超过 bzip2)并且速度也非常快(压缩比 gzip 稍慢,

我自己做了一些基准测试,但我想把重点放在一些更广泛的基准测试上:

现在,您会注意到,作为参考实现的7-zip并没有出现在首位。然而 Freearc 使用它自己的.arc格式,它不是真正的跨平台能力,并且与 80 年代的旧ARC 不兼容。nanozip 不是开源的,这是一种低迷,但重要的是算法,而不是存档器!

无论如何,现在使用 7-zip 及其衍生实现 ( xz ) 的性能不再是问题,而且压缩率不言自明,我觉得将我的源包分发为.7z档案.tar.xz。但是,我面前有两个障碍,我似乎无法克服:

  1. WinRAR 的倡导者。不要误会我的意思,我对 WinRAR 或其用户没有怨恨,只是我不能在 Linux 上真正制作 RAR,而且没有必要,因为我们有免费的 LZMA2 工具。正如我所说,自从成为分发包的组成部分以来,它可以在任何现代分发中使用。由于制作 a.7z比 a需要大约相同的时间,.rar而且 LZMA2 文件通常更小,我不明白为什么不使用 7-zip。

  2. tar 档案必须是 zip 或 bzip2,没有例外。这是一个很难的。为什么这么多人对 gzip 印象深刻?甚至 bzip2 在大多数情况下也没有太多使用。诚然,gzip 速度很快,对于按需压缩(例如在 Web 服务器中)或创建大型镜像备份时,这是一个很好的选择。但是分发软件呢?LZMA2非常不对称。虽然压缩需要时间,但解压缩速度非常快。

好的,现在我的问题来了:

既然 LZMA2 可以说是下一个更好的压缩算法,为什么人们不跳上火车呢?为什么人们仍然使用WinRAR,它是专有的,压缩比更差,并且没有移植到Linux(除了unrar,但你显然不能用它创建档案)。为什么 Tarball 仍然大多是 gzip 压缩的?

有没有办法说服人们转向更新、可靠的归档格式,这不仅是跨平台的,而且是免费的?当我给某人一个以 结尾的文件时.7z,他们往往不知道如何处理它,这会改变吗?

哦,这是我自己做的小基准测试。我到处使用默认设置:

11837440 GNUtar_TAR.tar
10657984 Arc_ARC.arc
9632524 PA2010_TAR_BZip2.tar.bz2
9536967 PA2010_LHA_Frozen5.lzh
9510148 PA2010_ZIP_BZip2.zipx
9490211 GNUtar_TAR.tar.bz2
9467242 PA2010_LHA_Frozen6.lzh
9463630 7-zip_ZIP_BZip2.zip
9437520 7-zip_7-ZIP_BZip2.7z
9398798 Arj_ARJ.arj
9373435 GNUtar_TAR.tar.gz
9370456 PA2010_BlackHole_Deflate.bh
9369621 Lha_LHA_Frozen6.lzh
9367712 PA2010_ZIP_Deflate.zip
9364237 PA2010_TAR_gzip.tar.gz
9360248 PA2010_Cabinet_MsZip.cab
9303923 7-zip_ZIP_Deflate.zip
9215279 7-zip_ZIP_Deflate64.zip
9189365 PA2010_ZIP_PPMd.zipx
9060663 PA2010_7-ZIP_PPMd.7z
8931280 PA2010_Cabinet_LZX.cab
8847427 7-zip_7-ZIP_PPMd.7z
8803350 PA2010_ZIP_Optimized.zipx
8803350 PA2010_ZIP_Wavpack.zipx
8802850 PA2010_ZIP_LZMA.zipx
5812491 FreeArc_7-ZIP.arc
5789853 7-zip_7-ZIP_LZMA.7z
5789853 PA2010_7-ZIP_LZMA.7z
5789024 GNUtar_TAR.tar.xz
5782637 FreeArc_UHARC.arc
5770969 FreeArc_CCM.arc
5739697 Fp8_5.fp8
5718865 Fp8_8.fp8
5685234 Paq8px_5.paq8px
5677662 Paq8kx_5.paq8kx
5644422 Paq8px_8.paq8px
5609608 Paq8kx_8.paq8kx

以字节为单位的大小;文件名Archiver_Format_Algorithm.Extension:)

填充集由包含 DOS 安装的磁盘映像组成:

1474979 disk01.144
1474979 disk02.144
1474979 disk03.144
1474979 disk04.144
1474979 disk05.144
1474979 ldisk01.144
1474979 ldisk02.144
1474979 ldisk03.144
24325 diskcopy.com

(大小以字节为单位)

4

1 回答 1

2

以前 bz2 不是 tarball 的选项。然后有人在 GNU Tar 中添加了一个选项来创建和读取 bz2 档案,很快这种格式开始传播。所以答案是:

如果您相信 LZMA,那么向自由软件基金会提交补丁(连同所有适当的文书工作),您将使世界变得更加美好。

于 2010-08-28T07:00:28.380 回答