Bzip2 mini-KAKO
David Fetter, david@fetter.org
verzija 2.00, 22. kolovoza 1999.
Ovaj dokument govori o korištenju bzip2, novog programa za sažimanje.
Autorativni SGML nalazi se na .
______________________________________________________________________
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,
Julian_Seward@muraroa.demon.co.uk. Detaljne informacije o libraryu
sadrži bzip2 priručnik dostupan na
.
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
mc8644@mclink.it 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 . Mirror u
SAD je .
22..11.. BBzziipp22 mmiinnii--HHOOWWTTOO nnaa vvaaššeemm jjeezziikkuu
Francuski čitatelji mogu pročitati francuski prijevod Arnauda Launaya.
WWW verzija je na
, a FTP-om ga
možete dobiti s
.
Arnauda možete kontaktirati elektronskom poštom na zoro@mygale.org.
Japanski čitatelji mogu pročitati japanski prijevod Tetsua Isajia na
. Do Isajia možete doći preko
njegove WWW stranice, .
Švedski čitatelji mogu pročitati švedski prijevod Linusa Ăkerlunda na
. Linusova e-mail
adresa je uxm165t@tninet.se.
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, leonard@sct1.is.belgacom.be, što mi je ovo
spomenuo. Također hvala Alessandru Rubiniju,
rubini@morgana.systemy.it, 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
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, ukd@kampsax.dk, 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
tenthumbs@cybernex.net 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
. Održava ga Matej Vela,
mvela@public.srce.hr. Svi su prilozi, primjedbe i prijedlozi
dobrodošli.