NAZWA¶
bzip2, bunzip2 - sortujący bloki kompresor/dekompresor plików, v1.0
bzcat - dekompresuje pliki na standardowe wyjście
bzip2recover - odzyskuje dane ze zniszczonych archiwów bzip2
SKŁADNIA¶
bzip2 [
-cdfkqstvzVL123456789] [
nazwy_plików...]
bunzip2 [
-fkvsVL] [
nazwy_plików...]
bzcat [
-s] [
nazwy_plików...]
bzip2recover nazwa_pliku
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
bzip2 kompresuje pliki używając algorytmu sortowania
bloków Burrowsa-Wheelera i kodu Huffmana. Kompresja jest generalnie sporo
lepsza od konwencjonalnych kompresorów opartych o metodę LZ77/LZ78,
i jest porównywalna z osiągnięciami statystycznych
kompresorów z rodziny PPM.
Opcje linii poleceń są w większości bardzo podobne do tych z
GNU gzip, ale nie są identyczne.
bzip2 oczekuje listy plików towarzyszących parametrom linii
poleceń. Każdy plik jest zastępowany przez swoją
skompresowaną wersję, z nazwą "oryginalny_plik.bz2".
Każdy skompresowany plik ma ten sam czas modyfikacji, uprawnienia i,
jeśli to możliwe, właściciela co oryginał, po to, aby
te ustawienia mogły zostać odtworzone podczas dekompresji.
Utrzymywanie nazwy plików nie jest do końca dokładne w tym
sensie, że nie ma możliwości przetrzymywania daty,
uprawnień, właściciela i nazw plików na systemach, na
których brakuje tych możliwości lub mają ograniczenia co
do długości nazwy, tak np. jak MS-DOS.
bzip2 i
bunzip2 standardowo nie nadpisują istniejących
już plików. Jeśli chcesz aby to robiły, musisz
użyć parametru -f.
Jeśli nie podano żadnej nazwy pliku,
bzip2 kompresuje ze
standardowego wejścia na standardowe wyjście. Odmiawia wówczas
wypisywania skompresowanego wyjście na terminal, gdyż byłoby to
całkiem niezrozumiałe i przez to bez większego sensu.
bunzip2 (lub
bzip2-d
) dekompresuje wszystkie podane pliki.
Pliki, które nie były utworzone przez
bzip2 zostaną
wykryte i zignorowane, a na ekranie pojawi się komunikat ostrzegawczy.
bzip2 próbuje zgadnąć nazwę dla dekompresowanego
pliku w następujący sposób:
nazwa_pliku.bz2 staje się nazwa_pliku
nazwa_pliku.bz staje się nazwa_pliku
nazwa_pliku.tbz2 staje się nazwa_pliku.tar
nazwa_pliku.tbz staje się nazwa_pliku.tar
inna_nazwa staje się inna_nazwa.out
Jeśli plik nie ma jednego z następujących rozpoznawalnych
rozszerzeń,
.bz2,
.bz,
.tbz2 lub
.tbz, to
bzip2 napisze, że nie może zgadnąć nazwy
pierwotnego pliku, i użyje oryginalnej nazwy z dodanym rozszerzeniem
.out.
Tak jak kompresja, nie posiadająca żadnych plików, powoduje
kompresję ze standardowego wejścia na standardowe wyjście.
bunzip2 poprawnie zdekompresuje plik, który jest połaczeniem
dwóch lub więcej skompresowanych plików. Rezultatem jest
połączony odpowiedni nieskompresowany plik. Obsługiwane jest
również sprawdzanie spójności (-t) połączonych
skompresowanych plików.
Możesz również kompresować lub dekompresować pliki na
standardowe wyjście używając parametru -c. W ten
właśnie sposób można przeprowadzać kompresję
wielu plików równocześnie. Powstałe wyniki są
przesyłane sekwencyjnie na standardowe wyjście. W ten sposób
kompresja wielu plików generuje strumień zawierający
reprezentacje kilku skompresowanych plików. Taki strumień może
być zdekompresowany poprawnie tylko przez
bzip2 w wersji 0.9.0 lub
późniejszej. Wcześniejsze wersje
bzip2 zatrzymają
się po zdekmpresowaniu pierwszego pliku w strumieniu.
bzcat (lub
bzip2 -dc) dekompresuje wszystkie wybrane pliki na
standardowe wyjście.
bzip2 czyta argumenty ze zmiennych środowiskowych
BZIP2 i
BZIP, w podanej kolejności, i przetwarza je przed jakimikolwiek
argumentami przeczytanymi z linii poleceń. To dobra metoda na
specyfikowanie standardowych ustawień.
Kompresja stosowana jest zawsze, nawet jeśli skompresowany plik jest
nieznaczniej większy od pliku oryginalnego. Pliki mniejsze niż mniej
więcej sto bajtów stają się większe, ponieważ
mechanizm kompresji ma stały nagłówek wynoszący około
50 bajtów. Przypadkowe dane (włączając wyjście
większości kompresorów plików) dą kodowane na mniej
więcej 8.05 bitu na bajt, dając zysk około 0.5%.
Jako samosprawdzenie dla twojej ochrony
bzip2 używa 32-bitowego CRC
aby upewnić się, że zdekompresowana wersja pliku jest
identyczna z oryginalną. To strzeże przed stratami w skompresowanych
danych i przed niewykrytymi błędami w
bzip2 (na
szczęście bardzo rzadkich). Możliwość niewykrycia
utraty danych jest mikroskopijna, mniej więcej jedna szansa na cztery
biliony dla każdego pliku. Uważaj jednak, gdyż sprawdzenie jest
dokonywane przed dekompresją, więc dowiesz się tylko tego,
że coś jest nie w porządku. Nie pomoże ci to odzyskać
oryginalnych nieskompresowanych danych. Możesz użyć
bzip2recover aby spróbować odzyskać dane z uszkodzonych
plików.
Zwracane wartości: 0 dla normalnego wyjścia, 1 dla problemów
technicznych (plik nie znaleziony, niewłaściwy parametr,
błąd wyjścia/wyjścia itp.), 2 dla zasygnalizowania
błędu skompresowanego pliku, 3 dla wewnętrznego błędu
(np. bug), który zmusił
bzip2 do przerwania.
OPCJE¶
- -c --stdout
- Kompresuje lub dekompresuje na standardowe
wyjście.
- -d --decompress
- Wymusza dekompresję. bzip2, bunzip2 i
bzcat są tak naprawdę tymi samymi programami i decyzja
jakie akcje będą wykonane jest wykonywana na podstawie nazwy
jaka została użyta. Ten parametr ma wyższy priorytet i
wymusza na bzip2 dekompresję.
- -z --compress
- Podobne do -d: wymusza kompresję, bez względu na
sposób wywołania.
- -t --test
- Sprawdza integralność wybranego pliku(ów),
ale nie dekompresuje ich. Wymusza to próbną dekompresję i
mówi, jaki jest rezultat.
- -f --force
- Wymusza zastępowanie plików wyjściowych.
Normalnie, bzip2 nie zastępuje istniejących plików
wyjściowych. Wymusza również na bzip2 łamanie
dowiązań twardych, czego normalnie nie robi.
- -k --keep
- Zatrzymaj (nie kasuj) pliki wejściowe przy kompresji
lub dekompresji.
- -s --small
- Zredukuj użycie pamięci na kompresję,
dekompresję i testowanie. Pliki są dekompresowane i testowane
przy użyciu zmodyfikowanego algorytmu, który potrzebuje tylko
2.5 bajtu na blok bajtów. Oznacza to, że każdy plik
może być zdekompresowany przy użyciu około 2300k
pamięci, jednak tracąc około połowę normalnej
szybkości.
Podczas kompresji, -s wybiera bloki wielkości 200k, których limity
pamięci wynoszą mniej więcej tyle samo, w zamian za
jakość kompresji. W skrócie, jeśli twój komputer
ma mało pamięci (8 megabajtów lub mniej), używaj opcji
-s do wszystkiego. Zobacz zarządzanie pamięcią
poniżej.
- -q --quiet
- Wyłącza wszystkie nieistotne komunikaty
ostrzegawcze. Nie są eliminowane komunikaty dotyczące
błędów wejścia/wyjścia i innych zdarzeń
krytycznych.
- -v --verbose
- Tryb gadatliwy -- pokazuje stopień kompresji dla
każdego pliku. Następne -v zwiększają
stopień gadatliwości, powodując wyświetlanie
dużej ilości informacji, przydatnych głównie przy
diagnostyce.
- -L --license -V --version
- Wyświetla wersję programu i warunki
licencji.
- -1 to -9
- Ustawia wielkość bloku na 100 k, 200 k .. 900 k
przy kompresji. Nie ma żadnego znaczenia przy dekompresji. Zobacz
zarządzanie pamięcią poniżej.
- --
- Traktuje wszystkie następujące po nim argumenty
jako nazwy plików, nawet jeśli zaczynają się one od
myślnika. Możesz więc kompresować i dekompresować
pliki, których nazwa zaczyna się od myślnika, na
przykład: bzip2 -- -mój_plik.
- --repetitive-fast --repetitive-best
- Te parametry nie mają znaczenia w wersjach 0.9.5 i
wyższych. Umożliwiały one pewną infantylną
kontrolę nad zachowaniem algorytmu sortującego we
wcześniejszych wersjach, co było czasami użyteczne. Wersje
0.9.5 i wyższe mają usprawniony algorytm, który powoduje
bezużyteczność tej funkcji.
ZARZĄDZANIE PAMIĘCIĄ¶
bzip2 kompresuje duże pliki w blokach. Rozmiar bloku ma wpływ
zarówno na stopień osiąganej kompresji, jak również
na ilość pamięci potrzebnej do kompresji i dekompresji.
Parametry od -1 do -9 wybierają rozmiar bloku odpowiednio od 100,000
bajtów aż do 900,000 bajtów (standardowo). W czasie
dekompresji, rozmiar bloku użytego do kompresji jest odczytywany z
nagłówku pliku skompresowanego i
bunzip2 sam zajmuje
odpowiednią do dekompresji ilość pamięci. Ponieważ
rozmiar bloków jest przetrzymywany w pliku skompresowanym, parametry od
-1 do -9 nie mają przy dekompresji żadnego znaczenia.
Wymagania kompresji i dekompresji w bajtach, mogą być wyliczone przez:
Kompresja : 400k + ( 8 x rozmiar bloku )
Dekompresja : 100k + ( 4 x rozmiar bloku ) lub
100k + ( 2.5 x rozmiar bloku )
Większe bloki dają duże zmniejszenie zwrotów marginalnych.
Większość kompresji pochodzi z pierwszych stu lub dwustu
kilobajtów rozmiaru bloku. Warto o tym pamiętać
używając
bzip2 na wolnych komputerach. Warto
również podkreślić, że rozmiar pamięci
potrzebnej do dekompresji jest wybierany poprzez ustawienie odpowiedniej
wielkości bloku przy kompresji.
Dla plików skompresowanych standardowym blokiem wielkości 900k,
bunzip2 będzie wymagał około 3700 kilobajtów do
dekompresji. Aby umożliwić dekompresję na komputerze
wyposażonym jedynie w 4 megabajty pamięci,
bunzip2 ma
opcję, która może zmniejszyć wymagania prawie do
połowy, tzn. około 2300 kilobajtów. Prędkość
dekompresji jest również bardzo zmiejszona, więc używaj
tej opcji tylko wtedy, kiedy jest to konieczne. Tym parametrem jest -s.
Generalnie, próbuj i używaj największych rozmiarów
bloków, jeśli ilość pamięci ci na to pozwala.
Prędkość kompresji i dekompresji w zasadzie nie zależy od
wielkości użytego bloku.
Inna ważna rzecz dotyczy plików, które mieszczą się w
pojedyńczym bloku -- oznacza to większość plików na
które się natkniesz używając dużych bloków.
Rozmiar realny pamięci zabieranej jest proporcjonalny do wielkości
pliku, jeśli plik jest mniejszy niż blok. Na przykład,
kompresja pliku o wielkości 20,000 bajtów z parametrem -9 wymusi na
kompresorze odnalezienie 7600 k pamięci, ale zajęcie tylko 400k +
20000 * 8 = 560 kilobajtów z tego. Podobnie, dekompresor odnajdzie 3700k,
ale zajmie tylko 100k + 20000 * 4 = 180 kilobajtów.
Tu jest tabela, która podsumowuje maksymalne użycie pamięci dla
różnych rozmiarów bloków. Podano też całkowity
rozmiar skompresowanych 14 plików tekstowych (Calgary Text Compressione
Corpus) zajmujących razem 3,141,622 bajtów. Ta kolumna daje pewne
pojęcie o tym, jaki wpływ na kompresję ma wielkość
bloków. Ta tabela uzmysławia również przewagę
użycia większych bloków dla większych plików,
ponieważ "Corpus" jest zdominowany przez mniejsze pliki.
Użycie Użycie Użycie Corpus
Parametr kompresji dekompresji dekompresji -s Size
-1 1200k 500k 350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642
ODZYSKIWANIE DANYCH ZE ZNISZCZONYCH PLIKÓW BZIP2¶
bzip2 kompresuje pliki w blokach, zazwyczaj 900 kilbajtowych. Każdy
blok jest trzymany osobno. Jeśli błędy transmisji lub
nośnika uszkodzą plik wieloblokowy .bz2, możliwe jest
odtworzenie danych zawartych w niezniszczonych blokach pliku.
Każdy blok jest reprezentowany przez 48-bitowy wzorzec, który
umożliwia znajdowanie przyporządkowań bloków z
rozsądną pewnością. Każdy blok ma również
swój 32-bitowy CRC, więc bloki uszkodzone mogą być
łatwo odseparowane od poprawnych.
bzip2recover jest oddzielnym programem, którego zadaniem jest
poszukiwanie bloków w plikach .bz2 i zapisywanie ich do własnego
pliku .bz2. Możesz potem użyć
bzip2 -t aby
sprawdzić spójność wyjściowego pliku i
zdekompresować te, które nie są uszkodzone.
bzip2recover pobiera pojedynczy argument, nazwę uszkodzonego pliku,
i tworzy pewną liczbę plików "rec0001plik.bz2",
"rec0002plik.bz2", itd., przetrzymujące odzyskane bloki.
Wyjściowe nazwy plików są tak tworzone, aby łatwo
było potem używać ich razem za pomocą gwiazdek -- na
przykład, "bzip2 -dc rec*plik.bz2 > odzyskany_plik" --
wylistuje pliki we właściwej kolejności.
bzip2recover powinien być używany najczęściej z
dużymi plikami .bz2, jako iż one zawierają
najczęściej dużo bloków. Jest czystym bezsensem
używać go na uszkodzonym jedno-blokowym pliku, ponieważ
uszkodzony blok nie może być odzyskany. Jeśli chcesz
zminimalizować jakiekolwiek możliwe straty danych poprzez
nośnik lub transmisję, powinieneś zastanowić się nad
użyciem mniejszych bloków.
OPISY WYNIKÓW¶
Etap sortujący kompresji łączy razem podobne ciągi
znaków w pliku. Przez to, pliki zawierające bardzo długie
ciągi powtarzających się symboli, jak "aabaabaabaab
..." (powtórzone kilkaset razy) mogą być kompresowane
wolniej niż normalnie. Wersje 0.9.5 i wyższe zachowują się
dużo lepiej w tej sytuacji niż wersje poprzednie. Różnica
stopnia kompresji pomiędzy najgorszym i najlepszym przypadkiem kompresji
wynosi około 10:1. Dla wcześniejszych wersji było to nawet
około 100:1. Jeśli chcesz, możesz użyć parametru
-vvvv aby monitorować postępy bardzo szczegółowo.
Prędkość dekompresji nie jest zmieniana przez to zjawisko.
bzip2 zazwyczaj rezerwuje kilka megabajtów pamięci do
działania a potem wykorzystuje ją w sposób zupełnie
przypadkowy. Oznacza to, że zarówno prędkość
kompresji jak i dekompresji jest w dużej części zależna od
prędkości, z jaką twój komputer może naprawiać
braki bufora podręcznego. Z tego powodu, wprowadzone zostały
małe zmiany kody aby zmniejszyć straty, które dały
nieproporcjonalnie duży wzrost osiągnięć. Myślę,
że
bzip2 będzie działał najlepiej na komputerach z
dużymi buforami podręcznymi.
ZAKAMARKI¶
Wiadomości o błędach wejścia/wyjścia nie są
aż tak pomocne, jak mogłyby być.
bzip2 stara się
wykryć błąd wejścia/wyjścia i wyjść
"czysto", ale szczegóły tego, jaki to problem mogą
być czasami bardzo mylące.
Ta strona podręcznika odnosi się do wersji 1.0 programu
bzip2.
Skompresowane pliki utworzone przez tę wersję są kompatybilne
zarówno z w przód jak i wstecznie z poprzednimi publicznymi
wydaniami, wersjami 0.1pl2, 0.9.0 i 0.9.5 ale z małymi wyjątkami:
0.9.0 i wyższe potrafią poprawnie dekompresować wiele
skompresowanych plików złączonych w jeden. 0.1pl2 nie potrafi
tego; zatrzyma się już po dekompresji pierwszego pliku w strumieniu.
bzip2recover używa 32-bitowych liczb do reprezentacji pozycji bitu w
skompresowanym pliku, więc nie może przetwarzać skompresowanych
plików dłuższych niż 512 megabajtów. Można to
łatwo naprawić.
AUTOR¶
Julian Seward, jseward@acm.org.
http://www.muraroa.demon.co.uk http://sourceware.cygnus.com/bzip2
Idee zawarte w
bzip2 są podzielone (przynajmniej) pomiędzy
nastepujący ludzi: Michael Burrows i David Wheeler (transformacja
sortującą bloki), David Wheeler (znów, koder Huffmana), Peter
Fenwick (struktura kodowania modelu w oryginalnym
bzip2, i wiele
udoskonaleń), i Alistair Moffar, Radford Neal i Ian Witten (arytmetyczny
koder w oryginalnym
bzip2). Jestem im bardzo wdzięczny za ich
pomoc, wsparcie i porady. Zobacz stronę manuala w
źródłowej dystrybucji po wskaźniki do
źródeł dokumentacji. Christian von Roques zachęcił
mnie do wymyślenia szybszego algorytmu sortującego, po to żeby
przyspieszyć kompresję. Bela Lubkin zachęciła mnie do
polepszenia najgorszych wyników kompresji. Wiele ludzi
przysłało łatki, pomogło w różnych problemach,
pożyczyło komputerów, dało rady i było ogólnie
pomocnych.
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 1 bzip2
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.