Provided by: manpages-pl_0.7-2_all 

NAZWA
bzip2, bunzip2 - sortujący bloki kompresor/dekompresor plików, v1.0.6
bzcat - dekompresuje pliki na standardowe wyjście
bzip2recover - odzyskuje dane z uszkodzonych plików bzip2
SKŁADNIA
bzip2 [-cdfkqstvzVL123456789] [nazwy_plików...]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [nazwy_plików...]
bunzip2 [ -h|--help ]
bzcat [ -s ] [nazwy_plików...]
bzcat [ -h|--help ]
bzip2recover nazwa_pliku
OPIS
bzip2 kompresuje pliki przy użyciu 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 wiersza 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 wiersza 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, takich jak np. MS-DOS.
bzip2 i bunzip2 standardowo nie nadpisują istniejących już plików. Aby to robiły, trzeba użyć parametru
-f.
Jeśli nie podano żadnej nazwy pliku, bzip2 kompresuje ze standardowego wejścia na standardowe wyjście.
Odmawia wówczas wypisywania skompresowanego wyjścia 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 w przypadku kompresji, niepodanie żadnych nazw plików powoduje dekompresję ze standardowego
wejścia na standardowe wyjście.
bunzip2 poprawnie zdekompresuje plik, który jest połączeniem dwóch lub więcej skompresowanych plików.
Rezultatem jest połączenie odpowiednich nieskompresowanych plików. Obsługiwane jest również sprawdzanie
spójności (-t) połączonych skompresowanych plików.
Można 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 zdekompresowaniu
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 nieco większy od pliku oryginalnego.
Pliki mniejsze niż około sto bajtów stają się większe, ponieważ mechanizm kompresji ma stały nagłówek
wynoszący mniej więcej 50 bajtów. Przypadkowe dane (włączając wyjście większości kompresorów plików) są
kodowane na mniej więcej 8,05 bitów na bajt, zwiększając plik o około 0,5%.
Jako dodatkowe zabezpieczenie bzip2 używa 32-bitowych 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 miliardy dla każdego pliku. Trzeba jednak uważać, gdyż
sprawdzenie jest dokonywane przed dekompresją, więc program poinformuje tylko o tym, że coś jest nie w
porządku. Nie pomoże to odzyskać oryginalnych nieskompresowanych danych. Można 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 nieznaleziony,
niewłaściwy parametr, błąd wejś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 o
tym, jakie akcje będą wykonane, jest podejmowana 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/plikó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. Flaga ta wymusza również na bzip2 łamanie dowiązań twardych, czego normalnie nie
robi.
bzip2 normalnie odmawia dekompresji plików, które nie mają poprawnych magicznych bajtów nagłówka.
Jeśli jednak nastąpi wymuszenie (opcja -f), przetworzy takie pliki niezmodyfikowane. Jest to
zachowanie typowe dla GNU gzip.
-k --keep
Zatrzymuje (nie kasuje) pliki wejściowe przy kompresji lub dekompresji.
-s --small
Redukuje 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 bajta na blok bajtów.
Oznacza to, że każdy plik może być zdekompresowany przy użyciu około 2300 k pamięci, jednak przy
szybkości o około połowę mniejszej niż normalnie.
Podczas kompresji -s wybiera bloki wielkości 200 k, których limity pamięci wynoszą mniej więcej
tyle samo, w zamian za jakość kompresji. W skrócie, jeśli komputer ma mało pamięci (8 megabajtów
lub mniej), należy używać 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 szczegółowy -- pokazuje stopień kompresji dla każdego pliku. Następne -v zwiększają stopień
szczegółowości, powodując wyświetlanie dużej ilości informacji, przydatnych głównie przy
diagnostyce.
-h, --help
Wyświetla krótki komunikat pomocy.
-L --license -V --version
Wyświetla wersję programu i warunki licencji.
-1 (lub --fast) do -9 (lub --best)
Ustawia wielkość bloku podczas kompresji na 100 k, 200 k... 900 k. Nie ma żadnego znaczenia przy
dekompresji. Zobacz ZARZĄDZANIE PAMIĘCIĄ poniżej. Aliasy --fast i --best zostały dodane głównie
dla zgodności z GNU gzip. W szczególności --fast niczego znacząco nie przyspiesza. Natomiast
--best zaledwie powoduje wybór zachowania domyślnego.
-- Traktuje wszystkie następujące po nim argumenty jako nazwy plików, nawet jeśli zaczynają się one
od łącznika. Możesz więc kompresować i dekompresować pliki, których nazwa zaczyna się od łącznika,
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
i 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łówka pliku skompresowanego, następnie 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) można oszacować następująco:
Kompresja: 400 k + (8 * rozmiar bloku)
Dekompresja: 100 k + (4 * rozmiar bloku) lub
100 k + (2,5 * 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 900 k 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 zmniejszona, więc należy używać tej opcji tylko wtedy, kiedy
jest to konieczne. Tym parametrem jest -s.
Generalnie należy próbować i używać największych rozmiarów bloków, jeśli ilość pamię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 pojedynczym bloku - czyli większości plików, na
które się można natknąć, używając dużych bloków. Rozmiar realny zabieranej pamięci jest proporcjonalny
do wielkości pliku, ponieważ 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 400 k + 20000
* 8 = 560 kilobajtów z tego. Podobnie, dekompresor odnajdzie 3700 k, ale zajmie tylko 100 k + 20000 * 4 =
180 kilobajtów.
Oto 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 Compression 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.
Wartości te zaniżają jednak korzyści wynikające z użycia większych bloków dla większych plików, ponieważ
"Corpus" jest zdominowany przez mniejsze pliki.
Użycie Użycie Użycie Rozmiar
Parametr kompresji dekompresji dekompresji -s "Corpusu"
-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 przetwarzany niezależnie.
Jeśli błędy transmisji lub nośnika uszkodzą wieloblokowy plik .bz2, możliwe jest odtworzenie danych
zawartych w niezniszczonych blokach pliku.
Skompresowana reprezentacja każdego bloku jest oznaczona przez 48-bitowy wzorzec, który umożliwia
znajdowanie granic 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 odróżnione 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żna potem użyć bzip2 -t, aby sprawdzić spójność wyjściowych
plików 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ących odzyskane bloki. Wyjściowe nazwy plików są
tworzone tak, by łatwo było potem używać ich razem za pomocą gwiazdek - na przykład "bzip2 -dc
rec*plik.bz2 > odzyskany_plik" przetworzy pliki we właściwej kolejności.
bzip2recover powinien być używany najczęściej z dużymi plikami .bz2, jako iż właśnie one zawierają
najczęściej dużo bloków. Jest czystym bezsensem używać go na uszkodzonym jednoblokowym pliku, ponieważ
uszkodzony blok nie może być odzyskany. W celu zminimalizowania jakichkolwiek możliwych strat danych
poprzez nośnik lub transmisję należy zastanowić się nad użyciem mniejszych bloków.
UWAGI DOTYCZĄCE WYDAJNOŚCI
Etap sortujący kompresji gromadzi 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 a najlepszym przypadkiem kompresji wynosi około
10:1. Dla wcześniejszych wersji było to nawet około 100:1. Aby monitorować postępy bardzo szczegółowo,
można użyć parametru -vvvv.
Szybkość dekompresji nie jest zmieniana przez te zjawiska.
bzip2 zazwyczaj rezerwuje kilka megabajtów pamięci do działania, a potem wykorzystuje ją w dość
przypadkowy sposób. Oznacza to, że szybkość zarówno kompresji, jak i dekompresji jest w dużej części
zależna od szybkości, z jaką komputer użytkownika może obsłużyć chybienia bufora podręcznego. Z tego
powodu wprowadzone zostały małe zmiany kodu, aby zmniejszyć współczynnik chybień, które dały
nieproporcjonalnie duży wzrost osiągnięć. bzip2 prawdopodobnie będzie działał najlepiej na komputerach z
bardzo dużymi buforami podręcznymi.
ZASTRZEŻENIA
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.6 programu bzip2. Skompresowane pliki utworzone przez tę
wersję są kompatybilne zarówno w przód, jak i wstecznie z poprzednimi publicznymi wydaniami, wersjami
0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 i wyższymi, ale z jednym wyjątkiem: 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 w wersjach niższych od 1.0.2 używał 32-bitowych liczb do reprezentacji pozycji bitu w
skompresowanym pliku, więc nie mógł przetwarzać skompresowanych plików dłuższych niż 512 megabajtów.
Wersja 1.0.2 i wyższe używają 64-bitowych liczb na niektórych obsługujących je platformach (zgodne z GNU
oraz Windows). Aby sprawdzić, czy bzip2recover został zbudowany z takim ograniczeniem, należy uruchomić
go bez żadnych argumentów. Zawsze istnieje możliwość zbudowania własnej wersji nieposiadającej tego
ograniczenia - należy w tym celu skompilować program ze zmienną MaybeUInt64 zdefiniowaną jako 64-bitowa
liczba całkowita.
AUTOR
Julian Seward, jseward@acm.org.
http://www.bzip.org
Idee zawarte w bzip2 są zasługą (przynajmniej) następujących osób: Michael Burrows i David Wheeler
(transformacja sortująca bloki), David Wheeler (znów, koder Huffmana), Peter Fenwick (struktura kodowania
modelu w oryginalnym bzip2 i wiele udoskonaleń) oraz Alistair Moffar, Radford Neal i Ian Witten
(arytmetyczny koder w oryginalnym bzip2). Jestem im bardzo wdzięczny za ich pomoc, wsparcie i porady. Na
stronie podręcznika w dystrybucji źródłowej znajdują się odsyłacze do źródeł dokumentacji. Christian von
Roques zachęcił mnie do wymyślenia szybszego algorytmu sortującego po to, by przyspieszyć kompresję. Bela
Lubkin zachęciła mnie do polepszenia wyników kompresji w najgorszych przypadkach. Donna Robinson
przekonwertowała dokumentację do formatu XML. Skrypty bz* są oparte o skrypty z GNU gzip. Wiele osób
przysłało łatki, pomogło w różnych problemach, pożyczyło komputery, udzieliło porad i było ogólnie
pomocnych.
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Maciej Wojciechowski (PTM)
<wojciech@staszic.waw.pl> i Michał Górny <zrchos+manpagespl@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 1.0.6 oryginału.
bzip2(1)