Bzip2 mini-KAKO
David Fetter,
[email protected]
verzija 2.00, 22. kolovoza 1999.
Ovaj dokument govori o kori�tenju bzip2, novog programa za sa�imanje.
Autorativni SGML nalazi se na <
http://fetter.org/Bzip2-HOWTO/>.
______________________________________________________________________
Sadr�aj
1. Uvod
1.1 Popis promjena
2. Nabavljanje bzip2
2.1 Bzip2 mini-HOWTO na va�em jeziku
2.2 Nabavljanje ve� kompajliranih izvr�nih datoteka bzip2
2.3 Nabavljanje izvornog koda bzip2
3. Kompajliranje bzip2 za va� stroj
4. Kori�tenje samog bzip2
5. Kori�tenje bzip2 uz tar
5.1 Najlak�i za namje�tanje
5.2 Lak za namje�tanje, relativno lak za kori�tenje, bez potrebe za root privilegijama
5.3 Isto tako lak za kori�tenje, ali zahtijeva root pristup
6. Kori�tenje bzip2 uz less
7. Kori�tenje bzip2 uz emacs
7.1 Mijenjanje emacsa za sve
7.2 Mijenjanje emacsa za jednu osobu
8. Kori�tenje bzip2 uz wu-ftpd
9. Kori�tenje bzip2 s grepom
10. Kori�tenje bzip2 uz Netscape pod X-om
11. Kori�tenje bzip2 za ponovno sa�imanje drugih sa�etih datoteka
12. Hrvatski prijevod
______________________________________________________________________
11.. UUvvoodd
bzip2 je zgodan novi algoritam za sa�imanje podataka. Op�enito,
datoteke �ini 30-40% manjim od veli�ine njihovih gzip-anih pandana.
Ovaj dokument vodi vas kroz nekoliko uobi�ajenih primjena bzip2-a.
Budu�e verzije dokumenta govorit �e o primjenama libbzip2, bzip2 C
librarya kojeg je ljubazno napisao autor bzip2, Julian Seward,
[email protected]. Detaljne informacije o libraryu
sadr�i bzip2 priru�nik dostupan na
<
http://www.bzip2.org/bzip2/docs/manual_toc.html>.
Budu�e verzije dokumenta mo�da �e tako�er sadr�avati sa�etak rasprava
o tome bi li (i kako bi) trebalo koristiti bzip2 u Linux kernelu.
11..11.. PPooppiiss pprroommjjeennaa
VVeerrzziijjaa 22..0000
Promijenio poglavlje ``Kori�tenje bzip2 uz less'' tako da se
.tar.bzip2 datoteke mogu �itati. Hvala Nicoli Fabianu
[email protected] za ispravak.
Osvje�io alat buzzit.
Osvje�io informacije o taru.
VVeerrzziijjaa 11..9922
Osvje�io poglavlje ``Nabavljanje ve� kompajliranih izvr�nih
datoteka bzip2'' i dodao S.u.S.E.-ove.
VVeerrzziijjaa 11..9911
Ispravio pravopisnu gre�ku i razjasnio neke idiome ljuske u
poglavlju ``Kori�tenje bzip2 uz tar''. Za to hvala Alessandru
Rubiniju.
Sredio buzzit alat tako da se ne zagrcne na postoje�oj bzip2
arhivi.
Dodao bgrep, zgrep-olik alat.
VVeerrzziijjaa 11..99
Razjasnio gcc 2.7.* problem. Hvala Ulriku Dickowu �to me
upozorio.
Dodao elegantni na�in rada s tarom Leonarda Jean-Marca.
Dodao �vedski prijevod Linusa �kerlunda.
Sredio wu-ftpd poglavlje prema prijedlogu Arnauda Launaya.
Prijevode premjestio u zasebno poglavlje.
VVeerrzziijjaa 11..88
buzzit i tar.diff u SGML-u stavio tamo gdje spadaju. Sredio
interpunkcije i formatiranje. Hvala Arnaudu Launayu na pomo�i u
ispravljanju mog primjerka. :-)
Za sada ispustio xv projekt zbog nedostatnog zanimanja
�itatelja.
Dodao neodgovorena pitanja za budu�e verzije dokumenta.
VVeerrzziijjaa 11..77
Dodao alat buzzit. Sredio zakrpu za GNU tar.
VVeerrzziijjaa 11..66
Dodao TenThumbsov program za Netscape.
Promijenio i lesspipe.sh prema njegovom prijedlogu. Sad bi
trebao raditi bolje.
VVeerrzziijjaa 11..55
Dodao francuski prijevod Arnauda Launaya i njegovu datoteku za
wu-ftpd.
VVeerrzziijjaa 11..44
Dodao japanski prijevod Tetsua Isajia.
VVeerrzziijjaa 11..33
Dodao .emacs Ulrika Dickowa za 19.30 i bolji.
(Ispravio i jka-compr.el prema njegovu prijedlogu. Ups! bzip2
jo� uvijek (?) nema opciju --append.)
VVeerrzziijjaa 11..22
Promijenio zakrpu za emacs tako da automatski prepoznaje .bz2
datoteke.
VVeerrzziijjaa 11..11
Dodao zakrpu za emacs.
VVeerrzziijjaa 11..00
Prva runda.
22.. NNaabbaavvlljjaannjjee bbzziipp22
WWW stranica bzip2 nalazi se na <
http://www.bzip2.org/>. Mirror u
SAD je <
http://www.digistar.com/bzip2/index.html>.
22..11.. BBzziipp22 mmiinnii--HHOOWWTTOO nnaa vvaa��eemm jjeezziikkuu
Francuski �itatelji mogu pro�itati francuski prijevod Arnauda Launaya.
WWW verzija je na
<
http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html>, a FTP-om ga
mo�ete dobiti s
<
ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz>.
Arnauda mo�ete kontaktirati elektronskom po�tom na
[email protected].
Japanski �itatelji mogu pro�itati japanski prijevod Tetsua Isajia na
<
http://jf.gee.kyoto-u.ac.jp/JF/JF.html>. Do Isajia mo�ete do�i preko
njegove WWW stranice, <
http://www2s.biglobe.ne.jp/~kaien/>.
�vedski �itatelji mogu pro�itati �vedski prijevod Linusa �kerlunda na
<
http://user.tninet.se/~uxm165t/linux_doc.html>. Linusova e-mail
adresa je
[email protected].
22..22.. NNaabbaavvlljjaannjjee vvee�� kkoommppaajjlliirraanniihh iizzvvrr��nniihh ddaattootteekkaa bbzziipp22
Pogledajte WWW stranice bzip2.
22..33.. NNaabbaavvlljjaannjjee iizzvvoorrnnoogg kkooddaa bbzziipp22
Mo�e se na�i na slu�benim stranicama (pogledajte ``Nabavljanje
bzip2'').
33.. KKoommppaajjlliirraannjjee bbzziipp22 zzaa vvaa�� ssttrroojj
AAkkoo iimmaattee ggcccc 2.7.*, promijenite red
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops
u
CFLAGS = -O2 -fomit-frame-pointer
To jest, -O3 zamijenite s -O2 i izostavite -funroll-loops. Tako�er
mo�ete dodati -m* prekida�e (-m486, na primjer) koje koristite kod
kompajliranja kernela.
Najva�nije je izbje�i -funroll-loops jer �e zbog toga mnogi gcc-i
verzije 2.7 generirati neispravan kod, a svi gcc-i 2.7 generirati
sporiji i ve�i kod. Za druge kompajlere (lcc, egcs, gcc 2.8.x) CFLAGS
nije potrebno mijenjati.
Nakon toga samo make i instalirajte ga prema README-u.
44.. KKoorrii��tteennjjee ssaammoogg bbzziipp22
RRTTFFMM (pro�itajte tu dobru man stranicu :).
55.. KKoorrii��tteennjjee bbzziipp22 uuzz ttaarr
Evo tri na�ina kori�tenja bzip2 uz tar, to jest:
55..11.. NNaajjllaakk��ii zzaa nnaammjjee��ttaannjjee
Ova metoda ne zahtijeva nikakvo petljanje. Za dearhiviranje bzip2-ane
tar arhive foo.tar.bz2 u trenutnom direktoriju napi�ite:
/staza/do/bzip2 -cd foo.tar.bz2 | tar xf -
ili
tar --use-compress-prog=bzip2 xf foo.tar.bz2
To radi, ali toliko tipkati �esto mo�e biti mu�no.
55..22.. pprriivviilleeggiijjaammaa LLaakk zzaa nnaammjjee��ttaannjjee,, rreellaattiivvnnoo llaakk zzaa kkoorrii��tteennjjee,,
bbeezz ppoottrreebbee zzaa rroooott
Hvala Leonardu Jean-Marcu,
[email protected], �to mi je ovo
spomenuo. Tako�er hvala Alessandru Rubiniju,
[email protected], za razlike izme�u basha i csha.
U svoj .bashrc mo�ete staviti ovakav red:
alias btar='tar --use-compress-program /usr/local/bin/bzip2 '
Odgovaraju�i red za .tcshrc ili .cshrc izgleda ovako:
alias btar 'tar --use-compress-program /usr/local/bin/bzip2'
55..33.. IIssttoo ttaakkoo llaakk zzaa kkoorrii��tteennjjee,, aallii zzaahhttiijjeevvaa rroooott pprriissttuupp
Nadogradite svoj tar na najnoviju GNU verziju, trenutno 1.13.10. Ona
se mo�e na�i na GNU-ovom FTP poslu�itelju
<
ftp://alpha.gnu.org/gnu/tar/> i svim mirrorima.
66.. KKoorrii��tteennjjee bbzziipp22 uuzz lleessss
Za dekompresiju bzip2-anih datoteka u hodu, odnosno mogu�nost
kori�tenja lessa bez bunzip2-avanja, mo�ete napraviti lesspipe.sh
(pogledajte man less) poput ovog:
#!/bin/sh
# Ovo je preprocesor za less. Koristi se kada je postavljena varijabla
# okru�ja: LESSOPEN="|lesspipe.sh %s"
case "$1" in
*.tar) tar tvvf $1 2>/dev/null ;; # Prikaz sadr�aja raznih tar datoteka
*.tgz) tar tzvvf $1 2>/dev/null ;;
# Ovo �e raditi za nepromijenjenu verziju tara:
*.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tvvf - ;;
# Ovo radi za zakrpanu verziju tara:
# *.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 ;; # Ispravan pregled sa�etih datoteka
*.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) DATOTEKA=`file -L $1` ; # u groffu
DATOTEKA=`echo $DATOTEKA | cut -d ' ' -f 2`
if [ "$DATOTEKA" = "troff" ]; then
groff -s -p -t -e -Tascii -mandoc $1
fi ;;
*) cat $1 2>/dev/null ;;
# *) DATOTEKA=`file -L $1` ; # Provjeravamo je li je binarna -- pregled preko strings
# DATOTEKA1=`echo $DATOTEKA | cut -d ' ' -f 2`
# DATOTEKA2=`echo $DATOTEKA | cut -d ' ' -f 3`
# if [ "$DATOTEKA1" = "Linux/i386" -o "$DATOTEKA2" = "Linux/i386" \
# -o "$DATOTEKA1" = "ELF" -o "$DATOTEKA2" = "ELF" ]; then
# strings $1
# fi ;;
esac
77.. KKoorrii��tteennjjee bbzziipp22 uuzz eemmaaccss
77..11.. MMiijjeennjjaannjjee eemmaaccssaa zzaa ssvvee
Napisao sam sljede�u zakrpu za jka-compr.el. Ona dodaje bzip2 u auto-
compression-mode.
NNaappoommeennaa:: Ovo sam testirao samo na emacsu 20.2, ali ne vidim razloga
za�to sli�an pristup ne bi radio na drugim verzijama.
Primijenite ju ovako:
1. Oti�ite u direktorij emacs-20.2/lisp s izvornim kodom (gdje god ste
ga otpakirali).
2. Snimite ovu zakrpu u datoteku jka-compr.el.diff (u toj bi datoteci
trebala biti samo ona ;).
3. Napi�ite:
patch < jka-compr.el.diff
4. Pokrenite emacs i napi�ite
M-x byte-compile-file jka-compr.el
5. Iza�ite iz emacsa.
6. Svoj izvorni jka-compr.elc maknite na sigurnije mjesto za slu�aj
gre�ke.
7. U�ivajte!
--- jka-compr.el Sat Jul 26 17:02:39 1997
+++ jka-compr.el.new Thu Feb 5 17:44:35 1998
@@ -44,7 +44,7 @@
;; The variable, jka-compr-compression-info-list can be used to
;; customize jka-compr 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 @@
;;; I have this defined so that .Z files are assumed to be in unix
-;;; compress format; and .gz files, in gzip format.
+;;; compress format; and .gz files, in gzip format, and .bz2 files,
+;;; in the 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")
77..22.. MMiijjeennjjaannjjee eemmaaccssaa zzaa jjeeddnnuu oossoobbuu
Za ovo hvala Ulriku Dickowu,
[email protected], sistemskom programeru iz
Kampsax Technology.
Ako �elite automatski koristiti bzip2 kada niste root, samo dodajte
ovo svojoj .emacs datoteci.
;; Automatska (de)kompresija kod u�itavanja/snimanja datoteka (gzip(1) i
;; sli�no)
;; Pokre�emo ju u uga�enom stanju tako da se mo�e dodati podr�ka za
;; bzip2(1). Kod skupio Ulrik Dickow za ~/.emacs uz Emacs 19.34. Trebalo bi
;; raditi i s mnogim starijim i novijim Emacsima. Ipak, nema jamstva.
;;
(if (fboundp 'auto-compression-mode) ; Emacs 19.30+
(auto-compression-mode 0)
(require 'jka-compr)
(toggle-auto-compression 0))
;; Sad dodajmo bzip2 podr�ku i ponovo uklju�imo automatsku kompresiju
(add-to-list 'jka-compr-compression-info-list
["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
"zipping" "bzip2" ()
"unzipping" "bzip2" ("-d")
nil t])
(toggle-auto-compression 1 t)
88.. KKoorrii��tteennjjee bbzziipp22 uuzz wwuu--ffttppdd
Hvala Arnaudu Launayu za ovo spa�avanje bandwidtha. Sljede�e treba
staviti u /etc/ftpconversions za de/kompresiju u hodu pomo�u bzip2.
Provjerite jesu li staze (kao �to je /bin/compress) ispravne.
:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.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 -I -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2
99.. KKoorrii��tteennjjee bbzziipp22 ss ggrreeppoomm
Ovaj alat, kojeg sam nazvao bgrep, je mal�ice izmijenjen zgrep koji
dolazi s Linuxom. Mo�ete ga koristiti za grep kroz datoteke bez
njihovog bunzip2-anja.
#!/bin/sh
# bgrep -- omota� oko programa grep koji po potrebi dekomprimira datoteke
PATH="/usr/bin:$PATH"; export PATH
prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
*egrep) grep=${EGREP-egrep} ;;
*fgrep) grep=${FGREP-fgrep} ;;
*) grep=${GREP-grep} ;;
esac
pat=""
while test $# -ne 0; do
case "$1" in
-e | -f) opt="$opt $1"; shift; pat="$1"
if test "$grep" = grep; then # grep pati od gre�aka s -e na 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 kroz bzip2 datoteke"
echo "usage: $prog [grep_opcije] uzorak [datoteke]"
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
res=0
for i do
if test $list -eq 1; then
bzip2 -cdfq "$i" | $grep $opt "$pat" > /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 $res
1100.. KKoorrii��tteennjjee bbzziipp22 uuzz NNeettssccaappee ppoodd XX--oomm
[email protected] ka�e:
Shvatio sam i kako natjerati Netscape za Linux da koristi
bzip2 za Content-Encoding ba� kao �to i koristi gzip.
Dodajte ovo u $HOME/.Xdefaults ili $HOME/.Xresources:
Koristim opciju -s samo zato �to vi�e volim sporiju
dekompresiju nego manje RAM-a. Ako �elite, mo�ete ju
izostaviti.
Netscape*encodingFilters: \
x-compress : : .Z : uncompress -c \n\
compress : : .Z : uncompress -c \n\
x-gzip : : .z,.gz : gzip -cdq \n\
gzip : : .z,.gz : gzip -cdq \n\
x-bzip2 : : .bz2 : bzip2 -ds \n
1111.. KKoorrii��tteennjjee bbzziipp22 zzaa ppoonnoovvnnoo ssaa��iimmaannjjee ddrruuggiihh ssaa��eettiihh ddaattootteekkaa
Ovaj perl program uzima datoteke sa�ete u drugim formatima (.tar.gz,
.tgz, .tar.Z i .Z za ovu iteraciju) i ponovno ih sa�ima radi bolje
kompresije. Izvorni kod ima dosta zgodne dokumentacije o tome �to radi
i kako to radi. Ova, najnovija verzija ulazne datoteke prima preko
naredbenog retka. Ako nema argumenata, poku�at �e prepakirati svaku
datoteku u radnom direktoriju.
#!/usr/bin/perl -w
#######################################################
# #
# Ovaj program uzima compress-ane i gzip-ane datoteke #
# u trenutnom direktoriju i pretvara ih u bzip2 #
# format. S nastavkom .tgz pona�a se razumno, #
# stvaraju�i .tar.bz2 datoteku. #
# #
#######################################################
$broja� = 0;
$bajta_snimljeno = 0;
$ukupno_datoteka = '/tmp/bzip2_ukupno_na_stroju';
$bzip2_ukupno_na_stroju = 0;
@zadane = (defined @ARGV)?@ARGV:<*>;
foreach(@zadane) {
next if /^bzip/;
next unless /\.(tgz|gz|Z)$/;
push @datoteke, $_;
}
$ukupno = scalar(@datoteke);
foreach (@datoteke) {
if (/tgz$/) {
($novo=$_) =~ s/tgz$/tar.bz2/;
} else {
($novo=$_) =~ s/\.g?z$/.bz2/i;
}
$izv_koliko = (stat $_)[7];
++$broja�;
print "Ponovo sa�imam $_ ($broja�/$ukupno)...\n";
if ((system "gzip -cd $_ |bzip2 >$novo") == 0) {
$novo_koliko = (stat $novo)[7];
$faktor = int(100*$novo_koliko/$izv_koliko+.5);
$bajta_snimljeno += $izv_koliko-$novo_koliko;
print "$novo zauzima oko $faktor% veli�ine $_. :",($faktor<100)?')':'(',"\n";
unlink $_;
} else {
print "Arrgg! Ne�to se dogodilo s $_: $!\n";
}
}
print ($bajta_snimljeno>=0)?"Dobili ":"Izgubili "
, "ste "
, abs($bajta_snimljeno)
, " bajta diskovnog prostora :"
, ($bajta_snimljeno>=0)?")":"("
, "\n"
;
unless (-e '/tmp/bzip2_ukupno_na_stroju') {
system ('echo "0" >/tmp/bzip2_ukupno_na_stroju');
system ('chmod', '0666', '/tmp/bzip2_ukupno_na_stroju');
}
chomp($bzip2_ukupno_na_stroju = `cat $ukupno_datoteka`);
open UKUPNO, ">$ukupno_datoteka"
or die "Ne mogu otvoriti datoteku s ukupnim rezultatem stroja: $!";
$bzip2_ukupno_na_stroju += $bajta_snimljeno;
print UKUPNO $bzip2_ukupno_na_stroju;
close UKUPNO;
print "Ukupni rezultat cijelog stroja je ",`cat $ukupno_datoteka`," bajta.\n";
1122.. HHrrvvaattsskkii pprriijjeevvoodd
Najnovija verzija ovog prijevoda mo�e se na�i na
<
http://dokumentacija.linux.hr/Bzip2.html>. Odr�ava ga Matej Vela,
[email protected]. Svi su prilozi, primjedbe i prijedlozi
dobrodo�li.