bzip2(1)

NAZWA
bzip2, bunzip2 - a block-sorting file compressor, v1.0.8
bzcat - dekompresuje pliki na standardowe wyjście
bzip2recover - odzyskuje dane z uszkodzonych plików bzip2

SKŁADNIA
bzip2 [-cdfkqstvzVL123456789] [nazwy_plików...]
bunzip2 [ -fkvsVL ] [nazwy_plików...]
bzcat [ -s ] [nazwy_plików...]
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
    Zachowuje (nie usuwa) pliki wejściowe przy kompresji lub dekompresji.

-s --small
    Reduce memory usage, for compression, decompression and testing. Files are decompressed and tested using a modified algorithm which only requires 2.5 bytes per block byte. This means any file can be decompressed in 2300k of memory, albeit at about half the normal speed. During compression, -s selects a block size of 200k, which limits memory use to around the same figure, at the expense of your compression ratio. In short, if your machine is low on memory (8 megabytes or less), use -s for everything. See MEMORY MANAGEMENT below.

-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.

-L --license -V --version
    Wyświetla wersję programu i warunki licencji.

-1 (lub --fast) do -9 (lub --best)
    Set the block size to 100 k, 200 k .. 900 k when compressing. Has no effect when decompressing. See MEMORY MANAGEMENT below. The --fast and --best aliases are primarily for GNU gzip compatibility. In particular, --fast doesn't make things significantly faster. And --best merely selects the default behaviour.

--  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:
       Compression: 400k + ( 8 x block size )
       Decompression: 100k + ( 4 x block size ), or
                      100k + ( 2.5 x block size ) 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. For files compressed with the default 900k block size, bunzip2 will require about 3700 kbytes to decompress. To support decompression of any file on a 4 megabyte machine, bunzip2 has an option to decompress using approximately half this amount of memory, about 2300 kbytes. Decompression speed is also halved, so you should use this option only where necessary. The relevant flag is -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. Another significant point applies to files which fit in a single block -- that means most files you'd encounter using a large block size. The amount of real memory touched is proportional to the size of the file, since the file is smaller than a block. For example, compressing a file 20,000 bytes long with the flag -9 will cause the compressor to allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 kbytes of it. Similarly, the decompressor will allocate 3700k but only touch 100k + 20000 * 4 = 180 kbytes. 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 compresses files in blocks, usually 900kbytes long. Each block is handled independently. If a media or transmission error causes a multi-block .bz2 file to become damaged, it may be possible to recover data from the undamaged blocks in the file. 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 takes a single argument, the name of the damaged file, and writes a number of files "rec00001file.bz2", "rec00002file.bz2", etc, containing the extracted blocks. The output filenames are designed so that the use of wildcards in subsequent processing -- for example, "bzip2 -dc rec*file.bz2 > recovered_data" -- processes the files in the correct order. 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
The sorting phase of compression gathers together similar strings in the file. Because of this, files containing very long runs of repeated symbols, like "aabaabaabaab ..." (repeated several hundred times) may compress more slowly than normal. Versions 0.9.5 and above fare much better than previous versions in this respect. The ratio between worst-case and average-case compression time is in the region of 10:1. For previous versions, this figure was more like 100:1. You can use the -vvvv option to monitor progress in great detail, if you want. 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. This manual page pertains to version 1.0.8 of bzip2. Compressed data created by this version is entirely forwards and backwards compatible with the previous public releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and above, but with the following exception: 0.9.0 and above can correctly decompress multiple concatenated compressed files. 0.1pl2 cannot do this; it will stop after decompressing just the first file in the stream. 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. https://sourceware.org/bzip2/ 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 są: Maciej Wojciechowski <wojciech@staszic.waw.pl> i Michał Górny <zrchos+manpagespl@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.