默认情况下使用并行 bzip2 和 gzip 的最佳方法是什么?

默认情况下使用并行 bzip2 和 gzip 的最佳方法是什么?

Bzip2 和 gzip 仅使用一个核心,尽管许多计算机都有多个核心。但有 lbzip2、pbzip2 和 pigz 等程序会使用所有可用核心,并承诺与 bzip2 和 gzip 兼容。

那么默认情况下使用这些程序的最佳方法是什么,以便tar cfa file.tar.bz2 directory使用 lbzip2/pbzip2 而不是 bzip2?当然我不想破坏任何东西。

答案1

您可以将 bzip2、bunzip2 和 bzcat 符号链接到 lbzip2,将 gzip、gunzip、gzcat 和 zcat 符号链接到 pigz:

sudo apt-get install lbzip2 pigz
cd /usr/local/bin
ln -s /usr/bin/lbzip2 bzip2
ln -s /usr/bin/lbzip2 bunzip2
ln -s /usr/bin/lbzip2 bzcat
ln -s /usr/bin/pigz gzip
ln -s /usr/bin/pigz gunzip
ln -s /usr/bin/pigz gzcat
ln -s /usr/bin/pigz zcat

我选择 lbzip2 而不是 pbzip2,因为 /usr/share/doc/lbzip2/README.gz 看起来比 /usr/share/doc/pbzip2/README.gz “更好”。此外,tar 手册讨论 lbzip2

编辑:

Precise Pangolin 中包含的 pigz-2.1.6 拒绝解压具有未知后缀的文件(例如 initramfs-*.img)。此问题已在 Quantal 附带的 pigz-2.2.4 中得到修复。因此,您可能需要等到 Quantal 推出后再安装量子封装手动,或者不要链接 gunzip/gzcat/zcat。

答案2

符号链接的想法确实很好。
另一个可行的解决方案是使用别名tar

alias tar='tar --use-compress-program=pbzip2'

或分别

alias tar='tar --use-compress-program=pigz'

它创建了另一种默认值。

答案3

符号链接答案确实不正确。它会将整个系统的默认 gzip(或 bzip2)替换为 pigz(或 pbzip2)。虽然并行实现与单进程版本非常相似,但命令行选项的细微差别可能会破坏依赖这些差异的核心系统进程。

--use-compress-program选项是一个更好的选择。

第二个选项(与别名非常相似)是设置 GNU tar 支持的 TAR_OPTIONS 环境变量:

export TAR_OPTIONS="--use-compress-program=pbzip2"
tar czf myfile.tar.bz2 mysubdir/

答案4

在你的 ~/.bash_aliases 中使用:

alias gzip="pigz"
alias gunzip="unpigz"

相关内容