версия 2.00, 22 августа 1999
В этом документе содержится информация о том, как пользоваться новым архиватором bzip2 и здесь.
Bzip2 - это принципиально новый, мощный алгоритм сжатия данных. Его файлы обычно составляют 60-70% размера своих gzip-собратьев.
Этот документ содержит описание некоторых способов применения bzip2.
Будущие версии этого документа будут включать в себя описание возможностей libbzip2, C-библиотеки bzip2, которую написал автор bzip2 Julian Seward. Руководство по bzip2, включающее в себя подробную информацию о библиотеке, можно найти здесь.
В будущие версии этого документа может войти сокращенная версия обсуждения, посвященного тому, куда и как внести bzip2 в ядро Linux.
Изменен раздел "Использование bzip2 совместно с less", чтобы была возможность чтения файлов .tar.bzip2. Спасибо Nicola Fabiano за исправления.
Обновлена утилита buzzit.
Обновлена информация о tar.
Обновлен раздел "Где получить скомпилированный bzip2", в том числе добавлена информация о S.u.S.E.
Исправлена опечатка и подправлены некоторые идиомы shell в разделе "Использование bzip2 совместно с tar". Спасибо Alessandro Rubini за это.
Обновлена утилита buzzit - теперь она не изменяет исходный bzip2-архив.
Добавлена утилита bgrep, аналог zgrep.
Устранена проблема с gcc 2.7.*. Спасибо Ulrik Dickow за то, что указал на это.
Добавлен "элегантный" путь работы с tar, предложенный Leonard Jean-Marc.
Добавлена ссылка на шведский перевод Linus Ãkerlund.
По предложению Arnaud Launay, исправлен раздел, касающийся wu-ftpd.
Переводы помещены в отдельный раздел.
buzzit и tar.diff помещены в sgml, где им и место. Исправлены ошибки в пунктуации и форматировании. Спасибо Arnaud Launay, за помощь в исправлении моей копии. :-)
Отказ на время от проекта xv, из-за отсутствия интереса.
Добавлены заметки о том, что надо сделать в следующих версиях документа.
Добавлена заметка о Netscape.
Подправлен скрипт lesspipe.sh. Теперь он должен работать лучше.
Добавлен файл .emacs для версий 19.30 или выше от Ulrik Dickow.
(Также исправлен патч jka-compr.el для emacs. Упс! В Bzip2 до сих пор нет флага "append"!)
Домашняя страничка Bzip2 находится в Великобритании. Зеркало для США находится здесь.
Франкоязычные пользователи возможно захотят воспользоваться документацией, переведенной Arnaud Launay. Веб-версия находится здесь, а ftp здесь. Почту для Arnaud можно посылать по этому адресу.
Есть перевод, выполненный Tetsu Isaji, на японский. Домашняя страничка Isaji находится по этому адресу, а письма ему можно посылать на этот адрес.
Также существует шведский перевод, выполненный Linus Ãkerlund. Контактный адрес Linus находится здесь.
Они размещены на официальных сайтах (смотрите главу "Как получить bzip2").
Если у вас gcc 2.7.*, исправьте следующую строку:
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops
на
CFLAGS = -O2 -fomit-frame-pointer
Это заменяет -O3 на -O2 и опускает ключ -funroll-loops. Вы, возможно, захотите добавить еще флаги -m* (например -m486).
установки по умолчанию стоят правильно.
После всего, выполните команду make и установите, как описано в README.
Ниже приводятся три способа использования bzip2 с архиватором tar.
Этот способ не предусматривает никакой дополнительной установки. Чтобы разархивировать tar-архив foo.tar.bz2, запакованый bzip2, находящийся в текущем каталоге, надо
/path/to/bzip2 -cd foo.tar.bz2 | tar xf -или
tar --use-compress-prog=bzip2 xf foo.tar.bz2
Благодарим Leonard Jean-Marc за подсказки. Также спасибо Alessandro Rubini за разграничение bash и csh.
В файле .bashrc вы можете поместить строчку типа:
alias btar='tar --use-compress-program /usr/local/bin/bzip2 '
В файле .tcshrc, или файле .cshrc, аналогичная строка выглядит следующим образом:
alias btar 'tar --use-compress-program /usr/local/bin/bzip2'
Обновите tar в соответствии с последней версией GNU, на данный момент это 1.13.10. Вы можете это сделать на GNU's ftp site или каком-либо зеркале.
#!/bin/sh
# Это процессор для 'less'. Это используется когда установлена переменная окружения
# variable is set: LESSOPEN="|lesspipe.sh %s"
>/dev/null ;; # Просмотр списка различных файлов архивированных tar
*.tgz) tar tzvvf $1 2>/dev/null ;;
# Эта строка работает со старой версией tar:
*.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tvvf - ;;
# Эта строка работает с обновленной версией tar:
# *.tar.bz2) tyvvf $1 2>/dev/null ;;
*.tar.gz) tar tzvvf $1 2>/dev/null ;;
*.tar.Z) tar tzvvf $1 2>/dev/null ;;
*.tar.z) tar tzvvf $1 2>/dev/null ;;
*.bz2) bzip2 -dc $1 2>/dev/null ;; # Корректный просмотр файлов
*.Z) gzip -dc $1 2>/dev/null ;;
*.z) gzip -dc $1 2>/dev/null ;;
*.gz) gzip -dc $1 2>/dev/null ;;
*.zip) unzip -l $1 2>/dev/null ;;
*.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` ; # groff src
FILE=`echo $FILE | cut -d ' ' -f 2`
if [ "$FILE" = "troff" ]; then
groff -s -p -t -e -Tascii -mandoc $1
fi ;;
*) cat $1 2>/dev/null ;;
# *) FILE=`file -L $1` ; # Проверяет файл на двоичный формат , если так -- просматривает при помощи 'strings'
# FILE1=`echo $FILE | cut -d ' ' -f 2`
# FILE2=`echo $FILE | cut -d ' ' -f 3`
# if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \
# -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then
# strings $1
# fi ;;
esacЯ написал следующий патч на jka-compr.el, который переводит bzip2 в режим авто-архивирования.
Предупреждение: Я проверил это только с emacs-20.2, но думаю, что проблем не будет и с другими версиями. |
Как это сделать,
Зайдите в каталог исходников emacs-20.2/lisp (после того, как разархивируете его)
Разместите патч в файл jka-compr.el.diff (он должен быть один в этом файле ;).
Выполните
patch < jka-compr.el.diff
Запустите emacs и выполните
M-x byte-compile-file jka-compr.el
Выйдите из emacs.
перенесите исходный файл jka-compr.elc в безопасное место для защиты от глюков.
Замените его новым jka-compr.elc.
Возрадуйтесь!
to work with other compression programs.
;; The default value of this variable allows jka-compr to work with
-;; Unix compress and gzip.
+;; Unix compress and gzip. David Fetter added bzip2 support :)
;;
;; If you are concerned about the stderr output of gzip and other
;; compression/decompression programs showing up in your buffers, you
@@ -121,7 +121,9 @@
snappy new bzip2 format from http://www.muraroa.demon.co.uk.
+;;; Keep up the good work, people!
(defcustom jka-compr-compression-info-list
;;[regexp
;; compr-message compr-prog compr-args
@@ -131,6 +133,10 @@
"compressing" "compress" ("-c")
"uncompressing" "uncompress" ("-c")
nil t]
+ ["\\.bz2\\'"
+ "bzip2ing" "bzip2" ("")
+ "bunzip2ing" "bzip2" ("-d")
+ nil t]
["\\.tgz\\'"
"zipping" "gzip" ("-c" "-q")
"unzipping" "gzip" ("-c" "-q" "-d")
Благодарим Ulrik Dickow, ukd@kampsax.dk, системного программиста Kampsax Technology:
Если вы не являетесь системным администратором и хотите, чтобы bzip2 работал автоматически, просто добавьте следующее в файл .emacs.
with Emacs 19.34.
;; Should work with many older and newer Emacsen too. No warranty though.
;;
(if (fboundp 'auto-compression-mode) ; Emacs 19.30+
(auto-compression-mode 0)
(require 'jka-compr)
(toggle-auto-compression 0))
;; Now add bzip2 support and turn auto compression back on.
(add-to-list 'jka-compr-compression-info-list
["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
"zipping" "bzip2" ()
"unzipping" "bzip2" ("-d")
nil t])
(toggle-auto-compression 1 t)
bzip2. Удостоверьтесь, что путь (like /bin/compress) правильный.
:.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP :.bz2: : :/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:BUNZIP2 : : :.bz2:/bin/bzip2 -9 -c %s:T_REG:O_COMPRESS:BZIP2 : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP : : :.tar.bz2:/bin/tar -c -y -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2
Следующая утилита, которую я называю bgrep, является небольшой модификацией zgrep, поставляемой вместе с Linux. Вы можете использовать grep без предварительной распаковки файлов.
#!/bin/sh
# bgrep -- программа которая позволяет пользоваться grep без предварительной распаковки файлов
PATH="/usr/bin:$PATH"; export PATH
test $# -ne 0; do
case "$1" in
-e | -f) opt="$opt $1"; shift; pat="$1"
if test "$grep" = grep; then # grep is buggy with -e on SVR4
grep=egrep
fi;;
-*) opt="$opt $1";;
*) if test -z "$pat"; then
pat="$1"
else
break;
fi;;
esac
shift
done
if test -z "$pat"; then
echo "grep through bzip2 files"
echo "usage: $prog [grep_options] pattern [files]"
exit 1
fi
list=0
silent=0
op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'`
case "$op" in
*l*) list=1
esac
case "$op" in
*h*) silent=1
esac
if test $# -eq 0; then
bzip2 -cd | $grep $opt "$pat"
exit $?
fi
> /dev/null && echo $i
r=$?
elif test $# -eq 1 -o $silent -eq 1; then
bzip2 -cd "$i" | $grep $opt "$pat"
r=$?
else
bzip2 -cd "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
r=$?
fi
test "$r" -ne 0 && res="$r"
done
exit $restenthumbs@cybernex.net утверждает:
Я также нашел способ заставить Linux Netscape использовал bzip2 для Content-Encoding так, как он использует gzip. Добавьте нижеследующее в $HOME/.Xdefaults или $HOME/.Xresources
Я использую опцию -s потому, что я бы лучше уменьшил скорость распаковки, ослабив загрузку оперативной памяти. Но вы можете этим не воспользоваться.
gzip : : .z,.gz : gzip -cdq \n\
x-bzip2 : : .bz2 : bzip2 -ds \nтекст программы на языке perl имеет все виды документации по тому, что она делает, и как она делает то, что она делает. Последняя версия берет на входе файлы, указанные в командной строке. Если аргументы не указаны в командной строке, программа переупаковывает файлы в текущем каталоге.
#!/usr/bin/perl -w
Она поддерживает .tgz #
# расширения преобразуя их в .tar.bz2 #
# #
#######################################################
$counter = 0;
$saved_bytes = 0;
$totals_file = '/tmp/machine_bzip2_total';
$machine_bzip2_total = 0;
@raw = (defined @ARGV)?@ARGV:<*>;
foreach(@raw) {
next if /^bzip/;
next unless /\.(tgz|gz|Z)$/;
push @files, $_;
}
$total = scalar(@files);
$_ ($counter/$total)...\n";
if ((system "gzip -cd $_ |bzip2 >$new") == 0) {
$new_size = (stat $new)[7];
$factor = int(100*$new_size/$orig_size+.5);
$saved_bytes += $orig_size-$new_size;
print "$new is about $factor% of the size of $_. :",($factor<100)?')':'(',"\n";
unlink $_;
} else {
print "Arrgghh! Something happened to $_: $!\n";
}
}
print "You've "
, ($saved_bytes>=0)?"saved ":"lost "
, abs($saved_bytes)
, " bytes of storage space :"
, ($saved_bytes>=0)?")":"("
, "\n"
;
unless (-e '/tmp/machine_bzip2_total') {
system ('echo "0" >/tmp/machine_bzip2_total');
system ('chmod', '0666', '/tmp/machine_bzip2_total');
}
chomp($machine_bzip2_total = `cat $totals_file`);
open TOTAL, ">$totals_file"
or die "Can't open system-wide total: $!";
$machine_bzip2_total += $saved_bytes;
print TOTAL $machine_bzip2_total;
close TOTAL;
print "That's a machine-wide total of ",`cat $totals_file`," bytes saved.\n";Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: <linux-howto@metalab.unc.edu> или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу <linux-howto@asplinux.ru>
| Главная |