Co je to bz2?
                                -=-=-=-=-=-=-=-

        Making files is easy under the UNIX operating system. Therefore,
        users tend to create numerous files using large amounts of file
      space. It has been said that the only standard thing about all UNIX
       systems is the message-of-the-day telling users to clean up their
                                     files.
                      -- System V.2 administrator's guide

                         Pavel Janík ml., 2. ledna 1998

          Možná  jste si už všimli, že na serverech  zrcadlících  zdrojové
      texty jádra z ftp.kernel.org se objevily nové soubory. Mají záhadnou
      příponu  .bz2 a  jsou  podstatně  kratší  než  soubory  s  klasickou
      příponou .gz. Jsou komprimovány  programem  bzip2,  jehož autorem je
      Julian Seward (jseward@acm.org).

          Program   bzip2   používá   při   komprimaci   Burrows-Wheelerův
      blokově-řadící   komprimační   algoritmus  a  Huffmanovo   kódování.
      Komprimace  je  obvykle  kvalitnější  než  při  použití   klasických
      algoritmů Lempel-Ziv (LZ77/LZ78), které používá např. program gzip.

          Parametry programu bzip2 jsou velice podobné parametrům programu
      gzip.

          Bzip2 očekává na příkazové řádce seznam jmen souborů doprovázený
      seznamem  parametrů.  Každý  soubor je stejně  jako u programu  gzip
      nahrazen  komprimovanou  verzí, jejíž  jméno obsahuje navíc  příponu
      .bz2. Každý  komprimovaný  soubor má stejná  přístupová  práva a čas
      modifikace  jako  původní  soubor a proto  mohou  být tyto  atributy
      souboru  při   dekomprimaci   korektně   nastaveny.   Pokud   nejsou
      specifikovány  žádné  vstupní  soubory, bude komprimován  standardní
      vstup.

          Bunzip2  (případně bzip2 -d) dekomprimuje všechny  specifikované
      soubory s příponou bz2. Soubory bez této přípony jsou ignorovány.

          Komprimace  je prováděna i tehdy,  bude-li  komprimovaný  soubor
      větší  než  originál.  Proto  soubory,  jejichž  délka je menší  než
      přibližně 100 bytů, nemá smysl  komprimovat (jen tak pro zajímavost:
      výsledný  soubor po komprimaci  souboru  nulové délky má velikost 14
      bytů).

          Bzip2  používá  32-bitový CRC pro kontrolu  integrity dat. Pokud
      kontrolní suma není správná,  musíte  použít místo programu  bunzip2
      program  bzip2recover,  který  umožňuje  obnovu  dat  z  poškozených
      komprimovaných souborů.

          Bzip2  komprimuje  velké  soubory  v  blocích.   Velikost  bloku
      ovlivňuje jak komprimační faktor, tak i množství potřebné paměti jak
      pro  komprimaci tak pro zpětnou  dekomprimaci.  Parametry  příkazové
      řádky -1-9 specifikují velikost bloku (od 100000 do implicitních
      900000  bajtů). Při dekomprimaci je velikost bloku  čtena z hlavičky
      komprimovaného  souboru  (nižší  čtyři bity  čtvrtého bytu souboru).
      Paměťová náročnost může být přibližně stanovena takto:

      komprimace   -- 400k + ( 7 x velikost bloku)
      dekomprimace -- 100k + ( 5 x velikost bloku), nebo
                      100k + ( 2.5 x velikost bloku)

          Pro soubory  komprimované se standardní  velikostí bloku (900000
      bytů)  bude bzip2  potřebovat  přibližně  4600  kilobytů  paměti pro
      dekomprimaci. Aby bylo možné  dekomprimovat  soubory i na počítačích
      se 4MB  paměti,  byla  přidána  volba -s, které na polovinu  snižuje
      paměťovou  náročnost a zvyšuje čas dekomprimace. Tato volba existuje
      z důvodů neexistence  virtuální  paměti na podporovaných  operačních
      systémech (unixové operační  systémy, Microsoft Windows 95 a Windows
      NT, DOS).

          Asi  nejčastější  otázka   pokládaná  na  různých   konferencích
      byla:  "Jak je na tom bzip2 v porovnání s gzipem?".  Tuto  otázku si
      pravděpodobně  položíte  také a proto  jsem pro  čtenáře  Linuxových
      noviny  připravil  takový  malý  test,  porovnání  obou  zmiňovaných
      programů.  Zaměřil  jsem  se  hlavně  na  dva  aspekty - na  kvalitu
      komprimace a na dobu komprimace a zpětné dekomprimace.

          Testy probíhaly pouze na jediném souboru - na zdrojových textech
      jádra 2.1.76 ve formátu tar. Původní  velikost  tohoto  souboru byla
      40867840  bytů. V  tabulce  jsou  znázorněny  hodnoty  komprimačního
      poměru v procentech  (poměr  délka  komprimovaného  souboru ku délce
      původního souboru) a čas potřebný k provedení komprimace. Testovacím
      počítačem  mi  byla  pracovní  stanice s  procesorem  Intel  Pentium
      133MHz, SCSI, 64MB RAM, Linux 2.0.33 a bzip2-0.1pl2.

       +----------+------------+------------+------------+---------------+
       |     opt  |komp. poměr |    čas     |komp. poměr |      čas      |
       +----------+------------+------------+------------+---------------+
       |     -1   |    22.29   |    277     |   29.21    |      48       |
       |     -2   |    21.06   |    283     |   27.90    |      54       |
       |     -3   |    20.52   |    292     |   26.96    |      60       |
       |     -4   |    20.11   |    296     |   25.23    |      68       |
       |     -5   |    19.87   |    301     |   24.28    |      80       |
       |     -6   |    19.67   |    306     |   23.91    |      98       |
       |     -7   |    19.46   |    325     |   23.83    |      120      |
       |     -8   |    19.40   |    320     |   23.75    |      154      |
       |     -9   |    19.22   |    327     |   23.74    |      198      |
       +----------+------------+------------+------------+---------------+

          Bližší  informace o programu  bzip2  naleznete na jeho  domovské
      stránce (http://www.muraroa.demon.co.uk/).

          protože  uživatelům  z DOSu asi srovnání UNIXOvých archiverů nic
      neřekne,  připravil  jsem  malé  srovnání z DOSovými archivery. Jako
      testovací  soubor  jsem  použil  rozbalené  články  z  výhně 8: (při
      testech jsem vždy použil maximální kompresi)

                   +----------------------+--------------+
                   |    Rozbalený soubor  |  1075330     |
                   |    Výheň             |  467602      |
                   |    arj               |  413550      |
                   |    ain               |  409128      |
                   |    zip               |  408337      |
                   |    gzip              |  407195      |
                   |    jar               |  401096      |
                   |    uc2               |  399268      |
                   |    rar               |  396557      |
                   |    bzip2             |  345900      |
                   |    szip              |  330343      |
                   +----------------------+--------------+

          Jak  je  vidět,  výsledky  bzipu na textovém souboru jsou dobré.
      Překonal ho jedině szip, který funguje stejně jako bzip, ale používá
      patentované   verze   algoritmů   a   proto  je  pro  free  software
      nepřijatelný.  Ne  na  všech  souborech  jsou  ale  výsledky stejné.
      Například při kompresi zvuku rar vede (asi kvůli jeho "multimediální
      kompresi").  Ve  smíšených  testech  je ale pořadí podobné jako to v
      tabulce.


            výheň