bzip2 howto pl ZJGZZ7Z4QCSDLFM5BG47II5XIJ33IUTDC6H34RI


Bzip2 Howto Bzip2 Howto David Fetter dfetter@best.com v1.92 18 sierpnia 1998 Wersja polska: Krzysztof P. Jasiutowicz kpjas@priv.onet.pl v0.99, 28 sierpnia 1998 Ten tekst wyjaśnia jak używać programu do kompresji bzip2. Lokalna wersja tego tekstu w sgml-u jest dostępna tu tu, a "autor-ytatywna" pod tym adresem tu. Dokument ten został napisany w standardzie ISO-8859-2. 1. Wstęp Bzip2 to superowy nowy algorytm kompresji danych. Ogólnie rzecz biorąc tworzy pliki, które są 60-70% mniejsze od takich samych plików spakowanych gzip-em. Ten dokument opisze kilka typowych zastosowań bzip2-a. Przyszłe wersje tego dokumentu będą dotyczyły planowanej bzip2 library którą autor bzip2-a, Julian Seward opisuje następująco: Pracuję nad następną wersją bzip2-a, która będzie używać tego samego formatu pliku .bz2; główną nowością będzie biblioteka podobna do zlib służąca do odczytywania i zapisu danych w tym formacie z poziomu programu. Przyszłe wersje tego dokumentu mogą także zawierać podsumowanie dyskusji nad tym czy (i jak) bzip2 powinno być zastosowane w jądrze Linux-a. 1.1 Revision History v1.92 Zaktualizowałem rozdział Pobieranie binariów bzip2, dodałem S.u.S.E. v1.91 Poprawiłem błąd w pisowni i poprawiłem kilka idiomów shell-a w rozdziale o używaniu bzip2-a z tar-em. Podziękowania dla Alessandro Rubini za nie. Poprawiłem aby narzędzie buzzit nie [to stomp] oryginalnego archiwum bzip2-a. Dodałem bgrep, narzędzie podobne do zgrep-a. v1.9 Poprawiłem problem z gcc 2.7.*. Podziękowanie dla Ulrika Dickow-a za wskazanie go. Dodałem elegancki sposób Leonard-a Jean-Marc-a posługiwania się tar-em. Dodałem szwedzkie tłumaczenie Linus-a kerlund-a. Poprawiłem rozdział o wu-ftpd np. sugestii Arnaud Launay-a. Przeniosłem tłumaczenia ich odpowiednich rozdziałów. v1.8 Wstawiłem buzzit i tar.diff do sgml-a tam gdzie ich miejsceg. Poprawiłem interpunkcję i formatowanie. Podziękowania dla Arnaud Launay za jego pomoc w poprawianiu mojej własnej wersji. :-) Porzuciłem xv project na razie z powodu braku większego zainteresowania. Wspomniałem o tipsach w przyszłych wersjach tego dokumentu. v1.7 Dodałem aplikację buzzit. Poprawiłem patch do nałożenia na gnu tar. v1.6 Dodałem tip TenThumbs-a dot. Netscape. Także zmieniłem lesspipe.sh dzięki jego sugestii. Powinien teraz lepiej działać. v1.5 Dodałem francuskie tłumaczenie Arnaud Launay-a, i jego plik wu-ftpd. v1.4 Dodałem japońskie tłumaczenie Tetsu Isaji-ego. v1.3 Dodałem plik Ulrik Dickow-a .emacs do emacs-a 19.30 lub wyższej wersji. (także poprawiłem patch jka-compr.el do emacs-a dzięki jego sugestii. Ojej! Bzip2 nie ma jeszcze(?) flagi "append".) v1.2 Zmienilem patch do emacs-a aby automagicznie rozpoznawał pliki .bz2. v1.1 Dodałem patch dla emacs-a. v1.0 Runda 1. 2. Jak zdobyć bzip2 Home page Bzip2-a znajduje się na Home site w Wielkiej Brytanii. Mirror site w U.S.A jest tu. Można też znaleźć go na site-cie FTP Red Hat-a tu. 2.1 Bzip2-HOWTO w twoim języku Osoby posługujące się językiem francuskim mogą skierować się do francuskich dokumentów Arnaud Launay-a. Wersja WWW jest tu, a ftp można użyć tu Z Arnaud można skontaktować się pocztą elektroniczną pod tym adresem Osoby posługujące się językiem japońskim mogą skierować się do japońskich dokumentów Tetsu Isaji tu. Z Isaji można skotaktować się na jego stronie WWW, lub pocztą elektroniczną pod tym adresem. Osoby posługujące się językiem szwedzkim mogą skierować się do szwedzkich Linus-a kerlund-a tu. Z Linus-em można się skontaktować pocztą elektroniczną pod tym adresem. 2.2 Jak zdobyć prekompilowane binaria bzip2-a Zobacz Home site-y. Binarium Debian Intel jest tu. Binarium alpha Red Hat-a jest tu. Binarium Intel Red Hat-a jest tu. Binarium SPARC Red Hat-a jest tu. Binarium Intel Slackware jest tu. Binarium Intel S.u.S.E jest tu. Wyżej wymienione są także dostępne w analogicznuch miejscach różnych lustrzanych site-ów. 2.3 Jak zdobyć źródła bzip2-a Znajdują się na oficjalnych site-ach (zobacz w Jak zdobyć Bzip2 gdzie, albo Red Hat ma je tu). 2.4 Kompilacja bzip2-a dla twojej maszyny Jeśli masz gcc 2.7.*, zmień linijkę która brzmi CFLAGS = -O3 -fomit-frame-pointer -funroll-loops na CFLAGS = -O2 -fomit-frame-pointer to jest, zamień -O3 na -O2 i pomiń -funroll-loops. You may also wish to add any -m* flags (like -m486, for example) you use when compiling kernels. Usunięcie -funroll-loops jest najistotniejszą częścią, ponieważ może to spowodować wiele gcc 2.7-ów będzie generowało nieprawidłowy kod, a wszystkie gcc 2.7-y będą większy i wolniejszy kod wynikowy. Dla innych kompilatorów (lcc, egcs, gcc 2.8.x) standartowe CFLAGS są w porządku. Potem, po prostu make i zainstaluj wg README. 3. Używanie bzip2 Przeczytaj Wspanaiałą Stronę Podręcznika Systemowego :) 4. Używanie bzip2 z tar-em Poniżej są opisane trzy metody używania bzip2 z tar-em, a mianowicie 4.1 Najłatwiejsza do zrobienia: Ta metoda nie wyamga wcale żadnych zmian. Aby od-tar-ować bzip2-owane archiwum tar-owe, foo.tar.bz2 w aktualnym katalogu, wykonaj /path/to/bzip2 -cd foo.tar.bz2 | tar xf - To działa, ale może być wnerwiające jeśli wypisuje się to zbyt często. 4.2 Łatwa do zrobienia, dość łatwa w użyciu, nie trzba mieć uprawnień root-a: Dzięki dla Leonard Jean-Marc za ten tip. Dzięki także dla Alessandro Rubini za wprawadzenie różnic specyficznych dla csh. W swoim .bashrc, możesz wstawić taką linijkę : alias btar='tar --use-compress-program /usr/local/bin/bzip2 ' W .tcshrc, lub .cshrc, analogiczna linijka wygląda tak: alias btar 'tar --use-compress-program /usr/local/bin/bzip2' 4.3 Też łatwa do zrobienia, ale wymaga dostępu jako root. Nałóż poniższy patch na gnu tar 1.12 w następujący sposób: cd tar-1.12/src; patch < /path/to/tar.diff skompiluj go, i zainstaluj go, i wszystko już gotowe do działania. Upewnij się ze zarówno tar jak i bzip2 są w twojej $PATH poprzez "which tar" i "which bzip2." Aby użyć nowego tar-a, po prostu zrób tar xyf foo.tar.bz2 aby zdekompresować plik. Aby utworzyć nowe archiwum, podobnie zrób: tar cyf foo.tar.bz2 file1 file2 file3...directory1 directory2... A oto patch: *** tar.c Thu Jun 11 00:09:23 1998 --- tar.c.new Thu Jun 11 00:14:24 1998 *************** *** 196,201 **** --- 196,203 ---- {"block-number", no_argument, NULL, 'R'}, {"block-size", required_argument, NULL, OBSOLETE_BLOCKING_FACTOR}, {"blocking-factor", required_argument, NULL, 'b'}, + {"bzip2", required_argument, NULL, 'y'}, + {"bunzip2", required_argument, NULL, 'y'}, {"catenate", no_argument, NULL, 'A'}, {"checkpoint", no_argument, &checkpoint_option, 1}, {"compare", no_argument, NULL, 'd'}, *************** *** 372,377 **** --- 374,380 ---- PATTERN at list/extract time, a globbing PATTERN\n\ -o, --old-archive, --portability write a V7 format archive\n\ --posix write a POSIX conformant archive\n\ + -y, --bzip2, --bunzip2 filter the archive through bzip2\n\ -z, --gzip, --ungzip filter the archive through gzip\n\ -Z, --compress, --uncompress filter the archive through compress\n\ --use-compress-program=PROG filter through PROG (must accept -d)\n"), *************** *** 448,454 **** Y per-block gzip compression */ #define OPTION_STRING \ ! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxz" static void set_subcommand_option (enum subcommand subcommand) --- 451,457 ---- Y per-block gzip compression */ #define OPTION_STRING \ ! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxyz" static void set_subcommand_option (enum subcommand subcommand) *************** *** 805,810 **** --- 808,817 ---- case 'X': exclude_option = 1; add_exclude_file (optarg); + break; + + case 'y': + set_use_compress_program_option ("bzip2"); break; case 'z': 5. Używanie bzip2 z less-em Aby dekompresować pliki bzip2 w locie, tj. aby móc używać less-a do czytania ich bez wcześniejszego bunzip2-owania ich, należy zrobić lesspipe.sh (man less) w ten sposób: #!/bin/sh # To jest preprocessor dla 'less-a'. Jest on używany, gdy ta zmienna # środowiskowa jest ustawiona: LESSOPEN="|lesspipe.sh %s" case "$1" in *.tar) tar tvvf $1 2>/dev/null ;; # Oglądaj zawartość różnych plików tar-owych *.tgz) tar tzvvf $1 2>/dev/null ;; # Działa dla niezmodyfikowanej wersji tar-a *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;; # Działa z spatchowaną wersją tar-a # *.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 ;; # Oglądaj spakowane pliki *.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` ; # Check to see if binary, if so -- view with '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 6. Używanie bzip2 z emacs-em 6.1 Zmaina emacs-a dla wszystkich: Napisalem ten patch do jka-compr.el który dodaje bzip2 do auto-compression-mode. Disclaimer: Spawdziłem go tylko z emacs-20.2, ale nie mam powodów by sądzić, że podobne postępowanie nie będzie działać z innymi wersjami. By go użyć, Przejdź do katalogu źródłowego emacs-20.2/lisp (tam gdzie go roztarowałeś) Wstaw ten patch do pliku jka-compr.el.diff ( powinien być sam w tym pliku ;). Wykonaj patch < jka-compr.el.diff Wystartuj emacs-a, i wykonaj M-x byte-compile-file jka-compr.el Wyjdź z emacs-a. Przenieś pierwotny jka-compr.elc w bezpieczne miejsce gdyby były bug-i. Zastąp go new jka-compr.elc. Baw się dobrze! --- 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 dodał 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") 6.2 Zmiana emacs-a dla pojedyńczego użytkownika: Podziękowania za to mależą się Ulrik-owi Dickow-owi, ukd@kampsax.dk, programiście systemowemu w Kampsax Technology: Aby móc używać bzip2 automatycznie gdy nie jesteś sysadmin-em, po prostu dodaj co następuje do swojego pliku .emacs. ;; Automatic (un)compression on loading/saving files (gzip(1) and similar) ;; We start it in the off state, so that bzip2(1) support can be added. ;; Code thrown together by Ulrik Dickow for ~/.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) 7. Używanie bzip2-a z wu-ftpd Podziękowania dla Arnaud Launay za tego oszczędzacza bandwidth-u. To co następuje powinno się znaleźć w /etc/ftpconversions aby wykonywać kompresję i dekompresję on-the-fly za pomocą bzip2. Upewnij się, że ścieżki takie jak (like /bin/compress) są poprawne. :.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 -y -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2 8. Użycie bzip2 z grep-em Ten użytek, który nazwałem bgrep, jest niewielką modyfikacją zgrep który jest dostarczany z Linux-em. Można go używać do grep-owania plików bez bunzip2-owania ich najpierw. #!/bin/sh # bgrep -- a wrapper around a grep program that decompresses files as needed 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 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 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 9. Używanie bzip2-a z Netscape-m pod X-ami. tenthumbs@cybernex.net pisze: Znalazłem sposób aby spowodować żeby Linux-owy Netscape używał bzip2-a do Content-Encoding tak jak używa gzip-a. Dodaj to do $HOME/.Xdefaults lub $HOME/.Xresources Używam opcji -s ponieważ wolę stracić trochę z szybkości dekompresji na korzyść zużycia RAM-u. Możn pominąć tą opcję, jeśli ktoś tak chce. 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 10. Użycie bzip2-a do rekompresji plików skompresowanych w innych formatach Ten program w perl-u pobiera plik skompresowany w innych formatach (.tar.gz, .tgz. .tar.Z, and .Z ) i przepakowuje je dla lepszej kompresji. Kod żródłowy w perl-u ma wiele porządnej dokumentacji dotyczącej tego co robi i jak to robi co robi. #!/usr/bin/perl -w ####################################################### # # # Ten program pobiera pliki skompresowane programami # # compress i gzip w aktualnym katalogu i zamienia je # # do formatu bzip2. Obsługuje rozdszerzenie .tgz w # # prawidłowy sposób, tworząc plik .tar.bz2. # # # ####################################################### $counter = 0; $saved_bytes = 0; $totals_file = '/tmp/machine_bzip2_total'; $machine_bzip2_total = 0; while(<*[Zz]>) { next if /^bzip2-0.1pl2.tar.gz$/; push @files, $_; } $total = scalar(@files); foreach (@files) { if (/tgz$/) { ($new=$_) =~ s/tgz$/tar.bz2/; } else { ($new=$_) =~ s/\.g?z$/.bz2/i; } $orig_size = (stat $_)[7]; ++$counter; print "Repacking $_ ($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", " $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";

Wyszukiwarka

Podobne podstrony:
Bzip2 HOWTO pl 7 (2)
Bzip2 HOWTO pl 4 (2)
Bzip2 HOWTO pl 6 (2)
Bzip2 HOWTO pl 5 (2)
Bzip2 HOWTO pl 9 (2)
Bzip2 HOWTO pl 1 (2)
Bzip2 HOWTO pl (2)
Bzip2 HOWTO pl 8 (2)
Bzip2 HOWTO pl
Bzip2 HOWTO pl 2 (2)
Bzip2 HOWTO pl 10 (2)
bootdisk howto pl 8
PPP HOWTO pl 6 (2)
NIS HOWTO pl 1 (2)
cdrom howto pl 1
jtz howto pl 5
Keystroke HOWTO pl (2)
PostgreSQL HOWTO pl 14

więcej podobnych podstron