Archivace a komprimace



Kvůli snadné manipulaci a přenášení dat z jedné části adresářové struktury do jiné, mezi různými médii, a také mezi různými počítači v síti byly vyvinuty rozličné prostředky pro archivaci a kompresi dat. Základním archivačním nástrojem v UNIXu je příkaz `tar'. Původní kompresní programy `compress' a `uncompress' jsou prakticky nahrazeny nástroji `gzip', `gunzip', `zcat'. Tyto dnes fakticky reprezentují _STANDARD_. V Linuxovém světě je stále oblíbenější silný kompresní program `bzip2' a související nástroje. Do prostředí Linuxu byly též portovány kompresní programy z DOSu. Například `zip' (kompatibilní s PKZIP), `rar', `lha' a další. Viz `man tar', `man gzip', `man bzip2'.

Rozšířenost "dvojice" targzip lze demonstrovat například na preprintovém archívu LANL, který používá právě `.tar.gz' kompresi. Předpokládáme, že uživatel prostuduje manuálové stránky příslušných programů a uvedeme pouze _základní_ příklad použití komprese a dekomprese (pokud by náhodou uživatel začal studovat předkládaný tutoriál od tohoto odstavce, upozorňujeme, že _nejde_ o literaturu pro potápěče).

Předpokládejme, že uživatel získal archív 0009093.tar.gz a zajímá ho jeho obsah...

  ls [ENTER]
  0009093.tar.gz

  file 0009093.tar.gz [ENTER]
  0009093.tar.gz: gzip compressed data, max compression, os: Unix

  gzip -d 0009093.tar.gz [ENTER]
  
  ls [ENTER]
  0009093.tar

  file 0009093.tar [ENTER]
  0009093.tar: GNU tar archive              # může se objevit též
                                            # POSIX tar archive
  
  tar xvf 0009093.tar [ENTER]
  ./article
  ./article/article.tex
  ./article/article.eps
  
  rm 0009093.tar [ENTER]
  
  ls -l [ENTER]
  drwxr-xr-x   1   user  group   1024  Jan 2 02:47   article

  tree article [ENTER]
  .article/
    |-- article.tex
    `-- article.eps
 
  file article/*
  article.tex: LaTeX 2e document text
  article.eps: PostScript document text conforming at level 2.0 - type EPS
  

Můžeme shrnout. Archív 0009093.tar.gz byl archivován programem `tar' a zkomprimovaný programem `gzip'. K jeho dekompresi jsme tudíž použili příkaz `gzip -d' a následné `tar xvf'. Pomlčka před parametry zde není nutná, viz man-stránky. Parametr `x' znamená dearchivaci (extract), `v' ukecaný režim práce (verbose) a `f' říká programu `tar', že vstupní data nemá brát z magnetické pásky, ale ze souboru, jehož jméno následuje za `f'. Poznamenejme, že místo `gzip -d 0009093.tar.gz' jsme mohli použít `gunzip 0009093.tar.gz'. Zkoumaný archív obsahoval jeden adresář, který dále obsahoval dva soubory. LaTeX-ovský dokument a EPS obrázek. Jméno a obsah archívu zřejmě nemusí mít nic společného.

Postupné použití příkazů `gzip -d' a `tar xvf' je sice funkční, ale nerespektuje filozofii operačního systému UNIX. Viz Základy shellu, elementy OS typu UNIX, konfigurace prostředí. Využijeme-li myšlenky řetězení jednoduchých jednoúčelových nástrojů do mocných specializovaných příkazů, můžeme nahradit posloupnost `gzip -d' a `tar xvf' jedním příkazem...

  gzip -dc 0009093.tar.gz | tar xvf -
  
nebo s využitím příkazu zcat...
  zcat 0009093.tar.gz | tar xvf -
  

Parametr `c' říká programu gzip, aby dekomprimovaná data posílal na standardní výstup místo do souboru. Naopak argument pomlčka (mínus) u programu `tar xvf' znamená, že vstupem bude standardní vstup. Roura `|' zajistí napojení standardního výstupu gzip na standardní vstup tar. Příkaz zcat je ekvivalentní příkazu `gzip -dc', respektive `gunzip -c'. Dekomprimuje tedy "gzipovaný" soubor na standardní výstup, implicitně na "obrazovku".

Samostatné nezávislé použití programu tar k archivaci části adresářové struktury do jediného souboru a naopak k dearchivaci z tohoto souboru a programu gzip ke kompresi respektive dekompresi jediného souboru je samozřejmě možné.
Chce-li uživatel...

  použije příkaz...
  

Zkomprimovat (bez ztrát zmenšit velikost) soubor article.ps v aktuálním adresáři...

  gzip -9 article.ps
  
Dekomprimovat komprimovaný soubor ./article.ps.gz zpět na soubor ./article.ps...
  gzip -d article.ps.gz
  
nebo...
  gunzip article.ps.gz
  
nebo...
  zcat article.ps.gz > article.ps
  
Dekomprimovat komprimovaný soubor /mnt/cdrom/data/gnuts.f.gz do souboru gnats.f v adresáři ./fortran...
  zcat /mnt/cdrom/data/gnuts.f.gz > fortran/gnats.f
  
Archivovat adresářovou strukturu začínající adresářem ./fortran do souboru ./archiv.tar...
  tar cf archiv.tar fortran
  
Vyjmout obsah archivu ./archiv.tar a umístit jej do aktuálního adresáře...
  tar xf archiv.tar
  


Kompresní program bzip2 se používá _stejně_ jako program gzip. Poskytuje však vyšší kompresní poměr za cenu vyššího zatížení systému. Formát `.bz2' může být také méně podporován na _NE_GNU_ a _NE_ Linuxových systémech. Detailní popis parametrů všech zmíněných programů lze najít v příslušných MAN a INFO stránkách. Viz Dokumentace, literatura, vyhledávání souborů.


Archivační program tar a komprimační program gzip jsou k dispozici též ve verzi pro operační systém M$ DOS a kompatibilní.

Soubor se uloží například pod jménem blah_tar.gz, dekomprimuje se příkazem `gzip -d blah_tar.gz', přejmenuje se `ren blah_tar blah.tar' a dearchivuje se příkazem `tar xf blah.tar'.