Bzip2 mini-KAKO
David Fetter, david@fetter.org
verzija 2.00, 22. kolovoza 1999.
Ovaj dokument govori o koristenju bzip2, novog programa za sazimanje.
Autorativni SGML nalazi se na .
______________________________________________________________________
Sadrzaj
1. Uvod
1.1 Popis promjena
2. Nabavljanje bzip2
2.1 Bzip2 mini-HOWTO na vasem jeziku
2.2 Nabavljanje vec kompajliranih izvrsnih datoteka bzip2
2.3 Nabavljanje izvornog koda bzip2
3. Kompajliranje bzip2 za vas stroj
4. Koristenje samog bzip2
5. Koristenje bzip2 uz tar
5.1 Najlaksi za namjestanje
5.2 Lak za namjestanje, relativno lak za koristenje, bez potrebe za root privilegijama
5.3 Isto tako lak za koristenje, ali zahtijeva root pristup
6. Koristenje bzip2 uz less
7. Koristenje bzip2 uz emacs
7.1 Mijenjanje emacsa za sve
7.2 Mijenjanje emacsa za jednu osobu
8. Koristenje bzip2 uz wu-ftpd
9. Koristenje bzip2 s grepom
10. Koristenje bzip2 uz Netscape pod X-om
11. Koristenje bzip2 za ponovno sazimanje drugih sazetih datoteka
12. Hrvatski prijevod
______________________________________________________________________
11.. UUvvoodd
bzip2 je zgodan novi algoritam za sazimanje podataka. Opcenito,
datoteke cini 30-40% manjim od velicine njihovih gzip-anih pandana.
Ovaj dokument vodi vas kroz nekoliko uobicajenih primjena bzip2-a.
Buduce verzije dokumenta govorit ce o primjenama libbzip2, bzip2 C
librarya kojeg je ljubazno napisao autor bzip2, Julian Seward,
Julian_Seward@muraroa.demon.co.uk. Detaljne informacije o libraryu
sadrzi bzip2 prirucnik dostupan na
.
Buduce verzije dokumenta mozda ce takoder sadrzavati sazetak rasprava
o tome bi li (i kako bi) trebalo koristiti bzip2 u Linux kernelu.
11..11.. PPooppiiss pprroommjjeennaa
VVeerrzziijjaa 22..0000
Promijenio poglavlje ``Koristenje bzip2 uz less'' tako da se
.tar.bzip2 datoteke mogu citati. Hvala Nicoli Fabianu
mc8644@mclink.it za ispravak.
Osvjezio alat buzzit.
Osvjezio informacije o taru.
VVeerrzziijjaa 11..9922
Osvjezio poglavlje ``Nabavljanje vec kompajliranih izvrsnih
datoteka bzip2'' i dodao S.u.S.E.-ove.
VVeerrzziijjaa 11..9911
Ispravio pravopisnu gresku i razjasnio neke idiome ljuske u
poglavlju ``Koristenje bzip2 uz tar''. Za to hvala Alessandru
Rubiniju.
Sredio buzzit alat tako da se ne zagrcne na postojecoj bzip2
arhivi.
Dodao bgrep, zgrep-olik alat.
VVeerrzziijjaa 11..99
Razjasnio gcc 2.7.* problem. Hvala Ulriku Dickowu sto me
upozorio.
Dodao elegantni nacin rada s tarom Leonarda Jean-Marca.
Dodao svedski 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 pomoci u
ispravljanju mog primjerka. :-)
Za sada ispustio xv projekt zbog nedostatnog zanimanja
citatelja.
Dodao neodgovorena pitanja za buduce 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
jos 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 . Mirror u
SAD je .
22..11.. BBzziipp22 mmiinnii--HHOOWWTTOO nnaa vvaasseemm jjeezziikkuu
Francuski citatelji mogu procitati francuski prijevod Arnauda Launaya.
WWW verzija je na
, a FTP-om ga
mozete dobiti s
.
Arnauda mozete kontaktirati elektronskom postom na zoro@mygale.org.
Japanski citatelji mogu procitati japanski prijevod Tetsua Isajia na
. Do Isajia mozete doci preko
njegove WWW stranice, .
Svedski citatelji mogu procitati svedski prijevod Linusa Ãkerlunda na
. Linusova e-mail
adresa je uxm165t@tninet.se.
22..22.. NNaabbaavvlljjaannjjee vveecc kkoommppaajjlliirraanniihh iizzvvrrssnniihh ddaattootteekkaa bbzziipp22
Pogledajte WWW stranice bzip2.
22..33.. NNaabbaavvlljjaannjjee iizzvvoorrnnoogg kkooddaa bbzziipp22
Moze se naci na sluzbenim stranicama (pogledajte ``Nabavljanje
bzip2'').
33.. KKoommppaajjlliirraannjjee bbzziipp22 zzaa vvaass 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. Takoder
mozete dodati -m* prekidace (-m486, na primjer) koje koristite kod
kompajliranja kernela.
Najvaznije je izbjeci -funroll-loops jer ce zbog toga mnogi gcc-i
verzije 2.7 generirati neispravan kod, a svi gcc-i 2.7 generirati
sporiji i veci 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.. KKoorriisstteennjjee ssaammoogg bbzziipp22
RRTTFFMM (procitajte tu dobru man stranicu :).
55.. KKoorriisstteennjjee bbzziipp22 uuzz ttaarr
Evo tri nacina koristenja bzip2 uz tar, to jest:
55..11.. NNaajjllaakkssii zzaa nnaammjjeessttaannjjee
Ova metoda ne zahtijeva nikakvo petljanje. Za dearhiviranje bzip2-ane
tar arhive foo.tar.bz2 u trenutnom direktoriju napisite:
/staza/do/bzip2 -cd foo.tar.bz2 | tar xf -
ili
tar --use-compress-prog=bzip2 xf foo.tar.bz2
To radi, ali toliko tipkati cesto moze biti mucno.
55..22.. pprriivviilleeggiijjaammaa LLaakk zzaa nnaammjjeessttaannjjee,, rreellaattiivvnnoo llaakk zzaa kkoorriisstteennjjee,,
bbeezz ppoottrreebbee zzaa rroooott
Hvala Leonardu Jean-Marcu, leonard@sct1.is.belgacom.be, sto mi je ovo
spomenuo. Takoder hvala Alessandru Rubiniju,
rubini@morgana.systemy.it, za razlike izmedu basha i csha.
U svoj .bashrc mozete staviti ovakav red:
alias btar='tar --use-compress-program /usr/local/bin/bzip2 '
Odgovarajuci red za .tcshrc ili .cshrc izgleda ovako:
alias btar 'tar --use-compress-program /usr/local/bin/bzip2'
55..33.. IIssttoo ttaakkoo llaakk zzaa kkoorriisstteennjjee,, aallii zzaahhttiijjeevvaa rroooott pprriissttuupp
Nadogradite svoj tar na najnoviju GNU verziju, trenutno 1.13.10. Ona
se moze naci na GNU-ovom FTP posluzitelju
i svim mirrorima.
66.. KKoorriisstteennjjee bbzziipp22 uuzz lleessss
Za dekompresiju bzip2-anih datoteka u hodu, odnosno mogucnost
koristenja lessa bez bunzip2-avanja, mozete napraviti lesspipe.sh
(pogledajte man less) poput ovog:
#!/bin/sh
# Ovo je preprocesor za less. Koristi se kada je postavljena varijabla
# okruzja: LESSOPEN="|lesspipe.sh %s"
case "$1" in
*.tar) tar tvvf $1 2>/dev/null ;; # Prikaz sadrzaja raznih tar datoteka
*.tgz) tar tzvvf $1 2>/dev/null ;;
# Ovo ce 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 sazetih 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.. KKoorriisstteennjjee bbzziipp22 uuzz eemmaaccss
77..11.. MMiijjeennjjaannjjee eemmaaccssaa zzaa ssvvee
Napisao sam sljedecu 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
zasto slican pristup ne bi radio na drugim verzijama.
Primijenite ju ovako:
1. Otidite 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. Napisite:
patch < jka-compr.el.diff
4. Pokrenite emacs i napisite
M-x byte-compile-file jka-compr.el
5. Izadite iz emacsa.
6. Svoj izvorni jka-compr.elc maknite na sigurnije mjesto za slucaj
greske.
7. Uzivajte!
--- 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, ukd@kampsax.dk, sistemskom programeru iz
Kampsax Technology.
Ako zelite automatski koristiti bzip2 kada niste root, samo dodajte
ovo svojoj .emacs datoteci.
;; Automatska (de)kompresija kod ucitavanja/snimanja datoteka (gzip(1) i
;; slicno)
;; Pokrecemo ju u ugasenom stanju tako da se moze dodati podrska 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 podrsku i ponovo ukljucimo 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.. KKoorriisstteennjjee bbzziipp22 uuzz wwuu--ffttppdd
Hvala Arnaudu Launayu za ovo spasavanje bandwidtha. Sljedece treba
staviti u /etc/ftpconversions za de/kompresiju u hodu pomocu bzip2.
Provjerite jesu li staze (kao sto 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.. KKoorriisstteennjjee bbzziipp22 ss ggrreeppoomm
Ovaj alat, kojeg sam nazvao bgrep, je malcice izmijenjen zgrep koji
dolazi s Linuxom. Mozete ga koristiti za grep kroz datoteke bez
njihovog bunzip2-anja.
#!/bin/sh
# bgrep -- omotac 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 gresaka 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.. KKoorriisstteennjjee bbzziipp22 uuzz NNeettssccaappee ppoodd XX--oomm
tenthumbs@cybernex.net kaze:
Shvatio sam i kako natjerati Netscape za Linux da koristi
bzip2 za Content-Encoding bas kao sto i koristi gzip.
Dodajte ovo u $HOME/.Xdefaults ili $HOME/.Xresources:
Koristim opciju -s samo zato sto vise volim sporiju
dekompresiju nego manje RAM-a. Ako zelite, mozete 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.. KKoorriisstteennjjee bbzziipp22 zzaa ppoonnoovvnnoo ssaazziimmaannjjee ddrruuggiihh ssaazzeettiihh ddaattootteekkaa
Ovaj perl program uzima datoteke sazete u drugim formatima (.tar.gz,
.tgz, .tar.Z i .Z za ovu iteraciju) i ponovno ih sazima radi bolje
kompresije. Izvorni kod ima dosta zgodne dokumentacije o tome sto radi
i kako to radi. Ova, najnovija verzija ulazne datoteke prima preko
naredbenog retka. Ako nema argumenata, pokusat ce 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 ponasa se razumno, #
# stvarajuci .tar.bz2 datoteku. #
# #
#######################################################
$brojac = 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];
++$brojac;
print "Ponovo sazimam $_ ($brojac/$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% velicine $_. :",($faktor<100)?')':'(',"\n";
unlink $_;
} else {
print "Arrgg! Nesto 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 moze se naci na
. Odrzava ga Matej Vela,
mvela@public.srce.hr. Svi su prilozi, primjedbe i prijedlozi
dobrodosli.
.