bzip2(1) General Commands Manual bzip2(1) NAZWA bzip2, bunzip2 - sortujacy bloki kompresor/dekompresor plikow, v1.0.8 bzcat - dekompresuje pliki na standardowe wyjscie bzip2recover - odzyskuje dane z uszkodzonych plikow bzip2 SKLADNIA bzip2 [-cdfkqstvzVL123456789] [nazwy_plikow...] bunzip2 [ -fkvsVL ] [nazwy_plikow...] bzcat [ -s ] [nazwy_plikow...] bzip2recover nazwa_pliku OPIS bzip2 kompresuje pliki przy uzyciu algorytmu sortowania blokow Burrowsa-Wheelera i kodu Huffmana. Kompresja jest generalnie sporo lepsza od konwencjonalnych kompresorow opartych o metode LZ77/LZ78 i jest porownywalna z osiagnieciami statystycznych kompresorow z rodziny PPM. Opcje wiersza polecen sa w wiekszosci bardzo podobne do tych z GNU gzip, ale nie sa identyczne. bzip2 oczekuje listy plikow towarzyszacych parametrom wiersza polecen. Kazdy plik jest zastepowany przez swoja skompresowana wersje, z nazwa "oryginalny_plik.bz2". Kazdy skompresowany plik ma ten sam czas modyfikacji, uprawnienia i, jesli to mozliwe, wlasciciela, co oryginal, po to, aby te ustawienia mogly zostac odtworzone podczas dekompresji. Utrzymywanie nazwy plikow nie jest do konca dokladne w tym sensie, ze nie ma mozliwosci przetrzymywania daty, uprawnien, wlasciciela i nazw plikow na systemach, na ktorych brakuje tych mozliwosci lub maja ograniczenia co do dlugosci nazwy, takich jak np. MS-DOS. bzip2 i bunzip2 standardowo nie nadpisuja istniejacych juz plikow. Aby to robily, trzeba uzyc parametru -f. Jesli nie podano zadnej nazwy pliku, bzip2 kompresuje ze standardowego wejscia na standardowe wyjscie. Odmawia wowczas wypisywania skompresowanego wyjscia na terminal, gdyz byloby to calkiem niezrozumiale i przez to bez wiekszego sensu. bunzip2 (lub bzip2 -d) dekompresuje wszystkie podane pliki. Pliki, ktore nie byly utworzone przez bzip2, zostana wykryte i zignorowane, a na ekranie pojawi sie komunikat ostrzegawczy. bzip2 probuje zgadnac nazwe dla dekompresowanego pliku w nastepujacy sposob: nazwa_pliku.bz2 staje sie nazwa_pliku nazwa_pliku.bz staje sie nazwa_pliku nazwa_pliku.tbz2 staje sie nazwa_pliku.tar nazwa_pliku.tbz staje sie nazwa_pliku.tar inna_nazwa staje sie inna_nazwa.out Jesli plik nie ma jednego z nastepujacych rozpoznawalnych rozszerzen: .bz2, .bz, .tbz2 lub .tbz, to bzip2 napisze, ze nie moze zgadnac nazwy pierwotnego pliku, i uzyje oryginalnej nazwy z dodanym rozszerzeniem .out. Tak jak w przypadku kompresji, niepodanie zadnych nazw plikow powoduje dekompresje ze standardowego wejscia na standardowe wyjscie. bunzip2 poprawnie zdekompresuje plik, ktory jest polaczeniem dwoch lub wiecej skompresowanych plikow. Rezultatem jest polaczenie odpowiednich nieskompresowanych plikow. Obslugiwane jest rowniez sprawdzanie spojnosci (-t) polaczonych skompresowanych plikow. Mozna rowniez kompresowac lub dekompresowac pliki na standardowe wyjscie uzywajac parametru -c. W ten wlasnie sposob mozna przeprowadzac kompresje wielu plikow rownoczesnie. Powstale wyniki sa przesylane sekwencyjnie na standardowe wyjscie. W ten sposob kompresja wielu plikow generuje strumien zawierajacy reprezentacje kilku skompresowanych plikow. Taki strumien moze byc zdekompresowany poprawnie tylko przez bzip2 w wersji 0.9.0 lub pozniejszej. Wczesniejsze wersje bzip2 zatrzymaja sie po zdekompresowaniu pierwszego pliku w strumieniu. bzcat (lub bzip2 -dc) dekompresuje wszystkie wybrane pliki na standardowe wyjscie. bzip2 czyta argumenty ze zmiennych srodowiskowych BZIP2 i BZIP, w podanej kolejnosci, i przetwarza je przed jakimikolwiek argumentami przeczytanymi z linii polecen. To dobra metoda na specyfikowanie standardowych ustawien. Kompresja stosowana jest zawsze, nawet jesli skompresowany plik jest nieco wiekszy od pliku oryginalnego. Pliki mniejsze niz okolo sto bajtow staja sie wieksze, poniewaz mechanizm kompresji ma staly naglowek wynoszacy mniej wiecej 50 bajtow. Przypadkowe dane (wlaczajac wyjscie wiekszosci kompresorow plikow) sa kodowane na mniej wiecej 8,05 bitow na bajt, zwiekszajac plik o okolo 0,5%. Jako dodatkowe zabezpieczenie bzip2 uzywa 32-bitowych CRC, aby upewnic sie, ze zdekompresowana wersja pliku jest identyczna z oryginalna. To strzeze przed stratami w skompresowanych danych i przed niewykrytymi bledami w bzip2 (na szczescie bardzo rzadkich). Mozliwosc niewykrycia utraty danych jest mikroskopijna, mniej wiecej jedna szansa na cztery miliardy dla kazdego pliku. Trzeba jednak uwazac, gdyz sprawdzenie jest dokonywane przed dekompresja, wiec program poinformuje tylko o tym, ze cos jest nie w porzadku. Nie pomoze to odzyskac oryginalnych nieskompresowanych danych. Mozna uzyc bzip2recover, aby sprobowac odzyskac dane z uszkodzonych plikow. Zwracane wartosci: 0 dla normalnego wyjscia, 1 dla problemow technicznych (plik nieznaleziony, niewlasciwy parametr, blad wejscia/wyjscia itp.), 2 dla zasygnalizowania bledu skompresowanego pliku, 3 dla wewnetrznego bledu (np. bug), ktory zmusil bzip2 do przerwania. OPCJE -c --stdout Kompresuje lub dekompresuje na standardowe wyjscie. -d --decompress Wymusza dekompresje. bzip2, bunzip2 i bzcat sa tak naprawde tymi samymi programami i decyzja o tym, jakie akcje beda wykonane, jest podejmowana na podstawie nazwy, jaka zostala uzyta. Ten parametr ma wyzszy priorytet i wymusza na bzip2 dekompresje. -z --compress Podobne do -d: wymusza kompresje, bez wzgledu na sposob wywolania. -t --test Sprawdza integralnosc wybranego pliku/plikow, ale nie dekompresuje ich. Wymusza to probna dekompresje i mowi, jaki jest rezultat. -f --force Wymusza zastepowanie plikow wyjsciowych. Normalnie bzip2 nie zastepuje istniejacych plikow wyjsciowych. Flaga ta wymusza rowniez na bzip2 lamanie dowiazan twardych, czego normalnie nie robi. bzip2 normalnie odmawia dekompresji plikow, ktore nie maja poprawnych magicznych bajtow naglowka. Jesli jednak nastapi wymuszenie (opcja -f), przetworzy takie pliki niezmodyfikowane. Jest to zachowanie typowe dla GNU gzip. -k --keep Zachowuje (nie usuwa) pliki wejsciowe przy kompresji lub dekompresji. -s --small Redukuje uzycie pamieci na kompresje, dekompresje i testowanie. Pliki sa dekompresowane i testowane przy uzyciu zmodyfikowanego algorytmu, ktory potrzebuje tylko 2,5 bajta na blok bajtow. Oznacza to, ze kazdy plik moze byc zdekompresowany przy uzyciu okolo 2300k pamieci, jednak przy szybkosci o okolo polowe mniejszej niz normalnie. Podczas kompresji -s wybiera bloki wielkosci 200k, ktorych limity pamieci wynosza mniej wiecej tyle samo, w zamian za jakosc kompresji. W skrocie, jesli komputer ma malo pamieci (8 megabajtow lub mniej), nalezy uzywac opcji -s do wszystkiego. Zobacz ZARZADZANIE PAMIECIA ponizej. -q --quiet Wylacza wszystkie nieistotne komunikaty ostrzegawcze. Nie sa eliminowane komunikaty dotyczace bledow wejscia/wyjscia i innych zdarzen krytycznych. -v --verbose Tryb szczegolowy -- pokazuje stopien kompresji dla kazdego pliku. Nastepne -v zwiekszaja stopien szczegolowosci, powodujac wyswietlanie duzej ilosci informacji, przydatnych glownie przy diagnostyce. -L --license -V --version Wyswietla wersje programu i warunki licencji. -1 (lub --fast) do -9 (lub --best) Ustawia wielkosc bloku podczas kompresji na 100 k, 200 k .. 900 k. Nie ma zadnego znaczenia przy dekompresji. Zobacz ZARZADZANIE PAMIECIA ponizej. Aliasy --fast i --best zostaly dodane glownie dla zgodnosci z GNU gzip. W szczegolnosci --fast niczego znaczaco nie przyspiesza. Natomiast --best zaledwie powoduje wybor zachowania domyslnego. -- Traktuje wszystkie nastepujace po nim argumenty jako nazwy plikow, nawet jesli zaczynaja sie one od lacznika. Mozesz wiec kompresowac i dekompresowac pliki, ktorych nazwa zaczyna sie od lacznika, na przyklad: bzip2 -- -moj_plik. --repetitive-fast --repetitive-best Te parametry nie maja znaczenia w wersjach 0.9.5 i wyzszych. Umozliwialy one pewna infantylna kontrole nad zachowaniem algorytmu sortujacego we wczesniejszych wersjach, co bylo czasami uzyteczne. Wersje 0.9.5 i wyzsze maja usprawniony algorytm, ktory powoduje bezuzytecznosc tej funkcji. ZARZADZANIE PAMIECIA bzip2 kompresuje duze pliki w blokach. Rozmiar bloku ma wplyw zarowno na stopien osiaganej kompresji, jak i na ilosc pamieci potrzebnej do kompresji i dekompresji. Parametry od -1 do -9 wybieraja rozmiar bloku odpowiednio od 100.000 bajtow az do 900.000 bajtow (standardowo). W czasie dekompresji rozmiar bloku uzytego do kompresji jest odczytywany z naglowka pliku skompresowanego, nastepnie bunzip2 sam zajmuje odpowiednia do dekompresji ilosc pamieci. Poniewaz rozmiar blokow jest przetrzymywany w pliku skompresowanym, parametry od -1 do -9 nie maja przy dekompresji zadnego znaczenia. Wymagania kompresji i dekompresji (w bajtach) mozna oszacowac nastepujaco: Kompresja: 400k + (8 * rozmiar bloku) Dekompresja: 100k + (4 * rozmiar bloku) lub 100k + (2,5 * rozmiar bloku) Wieksze bloki daja duze zmniejszenie zwrotow marginalnych. Wiekszosc kompresji pochodzi z pierwszych stu lub dwustu kilobajtow rozmiaru bloku. Warto o tym pamietac, uzywajac bzip2 na wolnych komputerach. Warto rowniez podkreslic, ze rozmiar pamieci potrzebnej do dekompresji jest wybierany poprzez ustawienie odpowiedniej wielkosci bloku przy kompresji. Dla plikow skompresowanych standardowym blokiem wielkosci 900k bunzip2 bedzie wymagal okolo 3700 kilobajtow do dekompresji. Aby umozliwic dekompresje na komputerze wyposazonym jedynie w 4 megabajty pamieci, bunzip2 ma opcje, ktora moze zmniejszyc wymagania prawie do polowy, tzn. okolo 2300 kilobajtow. Predkosc dekompresji jest rowniez bardzo zmniejszona, wiec nalezy uzywac tej opcji tylko wtedy, kiedy jest to konieczne. Tym parametrem jest -s. Generalnie nalezy probowac i uzywac najwiekszych rozmiarow blokow, jesli ilosc pamieci na to pozwala. Predkosc kompresji i dekompresji w zasadzie nie zalezy od wielkosci uzytego bloku. Inna wazna rzecz dotyczy plikow, ktore mieszcza sie w pojedynczym bloku - czyli wiekszosci plikow, na ktore sie mozna natknac, uzywajac duzych blokow. Rozmiar realny zabieranej pamieci jest proporcjonalny do wielkosci pliku, poniewaz plik jest mniejszy niz blok. Na przyklad kompresja pliku o wielkosci 20.000 bajtow z parametrem -9 wymusi na kompresorze odnalezienie 7600k pamieci, ale zajecie tylko 400k + 20000 * 8 = 560 kilobajtow z tego. Podobnie, dekompresor odnajdzie 3700k, ale zajmie tylko 100k + 20000 * 4 = 180 kilobajtow. Oto tabela, ktora podsumowuje maksymalne uzycie pamieci dla roznych rozmiarow blokow. Podano tez calkowity rozmiar skompresowanych 14 plikow tekstowych ("Calgary Text Compression Corpus") zajmujacych razem 3.141.622 bajtow. Ta kolumna daje pewne pojecie o tym, jaki wplyw na kompresje ma wielkosc blokow. Wartosci te zanizaja jednak korzysci wynikajace z uzycia wiekszych blokow dla wiekszych plikow, poniewaz "Corpus" jest zdominowany przez mniejsze pliki. Uzycie Uzycie Uzycie 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 PLIKOW BZIP2 bzip2 kompresuje pliki w blokach, zazwyczaj 900-kilobajtowych. Kazdy blok jest przetwarzany niezaleznie. Jesli bledy transmisji lub nosnika uszkodza wieloblokowy plik .bz2, mozliwe jest odtworzenie danych zawartych w niezniszczonych blokach pliku. Skompresowana reprezentacja kazdego bloku jest oznaczona przez 48-bitowy wzorzec, ktory umozliwia znajdowanie granic blokow z rozsadna pewnoscia. Kazdy blok ma rowniez swoj 32-bitowy CRC, wiec bloki uszkodzone moga byc latwo odroznione od poprawnych. bzip2recover jest oddzielnym programem, ktorego zadaniem jest poszukiwanie blokow w plikach .bz2 i zapisywanie ich do wlasnego pliku .bz2. Mozna potem uzyc bzip2 -t, aby sprawdzic spojnosc wyjsciowych plikow i zdekompresowac te, ktore nie sa uszkodzone. bzip2recover pobiera pojedynczy argument - nazwe uszkodzonego pliku, i tworzy pewna liczbe plikow "rec0001plik.bz2", "rec0002plik.bz2" itd., przetrzymujacych odzyskane bloki. Wyjsciowe nazwy plikow sa tworzone tak, by latwo bylo potem uzywac ich razem za pomoca gwiazdek - na przyklad "bzip2 -dc rec*plik.bz2 > odzyskany_plik" przetworzy pliki we wlasciwej kolejnosci. bzip2recover powinien byc uzywany najczesciej z duzymi plikami .bz2, jako iz wlasnie one zawieraja najczesciej duzo blokow. Jest czystym bezsensem uzywac go na uszkodzonym jednoblokowym pliku, poniewaz uszkodzony blok nie moze byc odzyskany. W celu zminimalizowania jakichkolwiek mozliwych strat danych poprzez nosnik lub transmisje nalezy zastanowic sie nad uzyciem mniejszych blokow. UWAGI DOTYCZACE WYDAJNOSCI Etap sortujacy kompresji gromadzi podobne ciagi znakow w pliku. Przez to pliki zawierajace bardzo dlugie ciagi powtarzajacych sie symboli, jak "aabaabaabaab..." (powtorzone kilkaset razy), moga byc kompresowane wolniej niz normalnie. Wersje 0.9.5 i wyzsze zachowuja sie duzo lepiej w tej sytuacji niz wersje poprzednie. Roznica stopnia kompresji pomiedzy najgorszym a najlepszym przypadkiem kompresji wynosi okolo 10:1. Dla wczesniejszych wersji bylo to nawet okolo 100:1. Aby monitorowac postepy bardzo szczegolowo, mozna uzyc parametru -vvvv. Szybkosc dekompresji nie jest zmieniana przez te zjawiska. bzip2 zazwyczaj rezerwuje kilka megabajtow pamieci do dzialania, a potem wykorzystuje ja w dosc przypadkowy sposob. Oznacza to, ze szybkosc zarowno kompresji, jak i dekompresji jest w duzej czesci zalezna od szybkosci, z jaka komputer uzytkownika moze obsluzyc chybienia bufora podrecznego. Z tego powodu wprowadzone zostaly male zmiany kodu, aby zmniejszyc wspolczynnik chybien, ktore daly nieproporcjonalnie duzy wzrost osiagniec. bzip2 prawdopodobnie bedzie dzialal najlepiej na komputerach z bardzo duzymi buforami podrecznymi. ZASTRZEZENIA Wiadomosci o bledach wejscia/wyjscia nie sa az tak pomocne, jak moglyby byc. bzip2 stara sie wykryc blad wejscia/wyjscia i wyjsc "czysto", ale szczegoly tego, jaki to problem, moga byc czasami bardzo mylace. Ta strona podrecznika odnosi sie do wersji 1.0.8 programu bzip2. Skompresowane pliki utworzone przez te wersje sa kompatybilne zarowno w przod, 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 wyzszymi, ale z jednym wyjatkiem: 0.9.0 i wyzsze potrafia poprawnie dekompresowac wiele skompresowanych plikow zlaczonych w jeden. 0.1pl2 nie potrafi tego; zatrzyma sie juz po dekompresji pierwszego pliku w strumieniu. bzip2recover w wersjach nizszych od 1.0.2 uzywal 32-bitowych liczb do reprezentacji pozycji bitu w skompresowanym pliku, wiec nie mogl przetwarzac skompresowanych plikow dluzszych niz 512 megabajtow. Wersja 1.0.2 i wyzsze uzywaja 64-bitowych liczb na niektorych obslugujacych je platformach (zgodne z GNU oraz Windows). Aby sprawdzic, czy bzip2recover zostal zbudowany z takim ograniczeniem, nalezy uruchomic go bez zadnych argumentow. Zawsze istnieje mozliwosc zbudowania wlasnej wersji nieposiadajacej tego ograniczenia - nalezy w tym celu skompilowac program ze zmienna MaybeUInt64 zdefiniowana jako 64-bitowa liczba calkowita. AUTOR Julian Seward, jseward@acm.org. https://sourceware.org/bzip2/ Idee zawarte w bzip2 sa zasluga (przynajmniej) nastepujacych osob: Michael Burrows i David Wheeler (transformacja sortujaca bloki), David Wheeler (znow, koder Huffmana), Peter Fenwick (struktura kodowania modelu w oryginalnym bzip2 i wiele udoskonalen) oraz Alistair Moffar, Radford Neal i Ian Witten (arytmetyczny koder w oryginalnym bzip2). Jestem im bardzo wdzieczny za ich pomoc, wsparcie i porady. Na stronie podrecznika w dystrybucji zrodlowej znajduja sie odsylacze do zrodel dokumentacji. Christian von Roques zachecil mnie do wymyslenia szybszego algorytmu sortujacego po to, by przyspieszyc kompresje. Bela Lubkin zachecila mnie do polepszenia wynikow kompresji w najgorszych przypadkach. Donna Robinson przekonwertowala dokumentacje do formatu XML. Skrypty bz* sa oparte o skrypty z GNU gzip. Wiele osob przyslalo latki, pomoglo w roznych problemach, pozyczylo komputery, udzielilo porad i bylo ogolnie pomocnych. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Maciej Wojciechowski , Michal Gorny i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . bzip2(1)