问题描述
Bzip2和gzip只使用一个核心,尽管许多计算机都有一个以上的核心。但是有像lbzip2,pbzip2和pigz这样的程序,它们使用所有可用的内核并承诺与bzip2和gzip兼容。
那么默认情况下使用这些程序的最佳方法是什么,所以tar cfa file.tar.bz2 directory
使用lbzip2 /pbzip2而不是bzip2?当然我不想破坏任何东西。
最佳解决办法
符号链接的想法非常好。另一个工作解决方案是别名tar
:
alias tar='tar --use-compress-program=pbzip2'
或分别
alias tar='tar --use-compress-program=pigz'
它创造了另一种默认。
次佳解决办法
您可以将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看”nicer”。另外,tar手册talks about lbzip2。
编辑:
pigz-2.1.6,包含在Precise Pangolin中,拒绝解压缩具有未知后缀的文件(例如initramfs – * .img)。这在Pigz-2.2.4中得到修复,它与Quantal一起提供。所以你可能要等到Quantal,手动安装Quantal package,或者还没有链接gunzip /gzcat /zcat。
第三种解决办法
符号链接答案确实不正确。它将用pigz(或pbzip2)代替整个系统的默认gzip(或bzip2)。虽然并行实现与单个进程版本非常相似,但命令行选项的细微差别可能会破坏依赖于这些差异的核心系统进程。
“–use-compress-program”选项是一个更好的选择。第二个选项(很像别名)是设置GNU tar支持的TAR_OPTIONS环境变量:
$ export TAR_OPTIONS="--use-compress-program=pbzip2"
$ tar czf myfile.tar.bz2 mysubdir/
第四种办法
一个有趣的选择是重新编译tar以默认使用多线程。从this stackoverflow answer复制
用替换重新编译
如果从源代码构建tar,则可以使用参数重新编译
--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip
使用这些选项重新编译tar后,您可以检查tar帮助的输出:
$ tar --help | grep "lbzip2\|plzip\|pigz"
-j, --bzip2 filter the archive through lbzip2
--lzip filter the archive through plzip
-z, --gzip, --gunzip, --ungzip filter the archive through pigz