Каков наилучший способ использования параллельных bzip2 и gzip по умолчанию?

У меня была аналогичная проблема (наиболее заметная в Thunderbird) для примера en_AU здесь, но я из en_NZ - и после некоторой пробной ошибки с Ubuntu 17.10 мне было исправлено обновление ~ / .pam_environment, заменив все другие записи (в основном en_AU и en_US) с en_NZ, затем перезагрузка.

Позор, что вы не можете просто установить свой язык и заставить его делать то, что он утверждает, - большинство разочаровано тем, что работающий dpkg-configure Кажется, что локали действительно ничего полезного не делают.

39
задан 23 September 2011 в 02:08

5 ответов

Вы можете символизировать 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.

Edit:

pigz-2.1.6, который включен в Precise Pangolin, отказывается распаковывать файлы с неизвестными суффиксами (например, initramfs- * .img). Это зафиксировано в pigz-2.2.4, который поставляется с Quantal. Таким образом, вы можете подождать до Quantal, установить , чтобы поговорить о lbzip2 вручную, или еще не связать gunzip / gzcat / zcat.

29
ответ дан 25 May 2018 в 18:41
  • 1
    Это работает хорошо, потому что / usr / local / bin / приходит перед / bin / в PATH большинства людей. Если что-то вызывает / bin / gunzip напрямую или у кого-то есть / bin сначала в их $ PATH, они не будут использовать pigz. Чтобы сделать эту работу для них, вы можете использовать dpk-divert и сделать что-то подобное для всех двоичных файлов sudo dpkg-divert --divert /bin/gunzip.orig --rename /bin/gunzip; sudo ln -s /usr/bin/pigz /bin/gunzip, но есть вероятность, что pigz не на 100% совместим со всеми gzip поэтому будьте осторожны. – Mark McKinstry 4 May 2012 в 20:31

Идея symlink действительно прекрасна. Другим рабочим решением является псевдоним tar:

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

или соответственно

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

Он создает другой тип по умолчанию.

30
ответ дан 25 May 2018 в 18:41
  • 1
    добавленная выгода: вы можете использовать псевдоним, например «partar», если хотите сохранить исходную функциональность (по какой-то причине). К сожалению, «ptar» берется за реализацию perl – jena 10 March 2017 в 15:25

Ответ на символическую ссылку действительно неверен. Он заменит gzip (или bzip2) по умолчанию на pigz (или pbzip2) для всей системы. Хотя параллельные реализации очень похожи на отдельные версии процессов, тонкие различия в параметрах командной строки могут нарушать основные системные процессы, которые зависят от этих различий.

Опция «-use-compress-program» - это гораздо лучший выбор. Второй вариант (как и псевдоним) - установить переменную среды TAR_OPTIONS, поддерживаемую GNU tar:

$ export TAR_OPTIONS="--use-compress-program=pbzip2" $ tar czf myfile.tar.bz2 mysubdir/
13
ответ дан 25 May 2018 в 18:41
  • 1
    Я использую символические ссылки с 2011 года и не вижу поломки (кроме случая, упомянутого в редакции). И если такие тонкие различия не будут найдены и не будут сообщены, мы будем придерживаться непараллельных версий навсегда. Если вы используете TAR_OPTIONS = " - use-compress-program = pbzip2 " похоже, вы не можете различать bzip2 и gzip. – elmicha 1 May 2013 в 21:45

Один интересный вариант - перекомпилировать tar для использования многопоточности по умолчанию. Скопировано из этого ответа stackoverflow

Перекомпиляция с заменой

Если вы создаете 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
2
ответ дан 25 May 2018 в 18:41

Используйте в своих ~ / .bash_aliases:

alias gzip="pigz"
alias gunzip="unpigz"
-2
ответ дан 25 May 2018 в 18:41
  • 1
    Это будет работать только при вызове программы gzip (или gunzip) непосредственно в командной строке оболочки. Другие программы (например, tar) не будут затронуты этим. – Christian Hudon 29 October 2015 в 00:52

Другие вопросы по тегам:

Похожие вопросы: