Balení a rozbalování pod Linuxem



Komprimačních programů máme pro Linux spoustu. Ale mezi ty nejběžnější a nejpoužívanější patří bezesporu programy tar, gzip a bzip2. Každý, kdo pracuje se soubory pod Linuxem (tj. každý, kdo nečte tento článek omylem), by měl umět zacházet s těmito programy.

tar

tar je GNU verze archivační utility tar.
tar v podstatě ani nekomprimuje, jen soubory "sepíše" do jednoho spolu s nějakými jinými informacemi. A právě tohle spojení do jednoho souboru je jeho největší výhoda a kvůli tomu se vlastně používá.
Zažitá přípona tar archivu je .tar.

Balení (komprimace):

tar cf jmeno_tar_souboru maska

parametry:

c (--create) - vytvoření archivu
f (--file) - říká, že tar má zapisovat do souboru. tar je primárně určen pro archivaci na magnetickou pásku, proto je tento parametr velmi důležitý
maska - jméno souboru nebo jména více souborů oddělená mezerou nebo souborová maska (př. * = všechny soubory v adresáři) nebo adresář nebo více adresářů oddělených mezerou (tar automaticky balí adresáře rekurzivně)

Rozbalování (dekomprimace):

tar xf jmeno_tar_souboru

parametry:

x (--extract) - vybalení souborů z archivu

Další parametry:

- - za vstup/výstup se považuje standardní vstup/výstup
t (--list) - vypíše obsah archivu
u (--update) - přidá do archivu jen soubory novější než ty v archivu
r (--append) - přidá soubor na konec archivu
O (--to-stdout) - rozbaluje na standardní výstup
v (--verbose) - "ukecanost" (otázky, potvrzování, apod.)
z (--gzip, --ungzip) - prožene archiv ještě gzipem

gzip

gzip používá pro kompresi kompresní metodu LZ77.
Defaultní přípona gzip archivu je .gz.

Balení (komprimace):

gzip jmeno_souboru ...

Pokud není jmeno_souboru uvedeno, gzip předpokládá vstup ze standardního vstupu.

gzip umí zabalit jen jeden soubor (když je mu zadáno více souborů, zabalí každý zvlášť do archivu) a navíc tento soubor po sbalení smaže (nahradí ho archivem). Ne že by to nějak zvlášť vadilo, ale nemusel by to dělat, pokud se mu to neřekne. No, nezbývá než se s tím smířit (anebo taky ne ...).

U komprese je možné nastavit "kvalitu" komprese číslem 1 až 9, defaultně je 6. Čím vyšší kvalita, tím menší rychlost, to dá rozum. A protože na kvalitě komprese dnes záleží mnohem více než na rychlosti, je rozumné balit takto:

gzip -# jmeno_souboru ...

parametry:

# - číslo vyjadřující kvalitu komprese, 1 = --fast, 9 = --best

Rozbalování (dekomprimace):

gzip -d jmeno_gzip_archivu ...

parametry:

d (--decompress) - dekomprimace

Pokud není jmeno_gzip_archivu uvedeno, gzip přesměruje výstup na standardní výstup.

Soubor archivu se smaže (nahradí vybaleným souborem).

Další parametry:

c (--stdout) - výstup přesměruje na standardní výstup, nedělá nic s originálními soubory
l (--list) - vypíše obsah archivu spolu s nějakými informacemi o každém souboru (kompresní poměr apod.)
r (--recursive) - rekurzivně balí soubory v adresáři (jmeno_souboru je adresář)
v (--verbose) - "ukecanost" (otázky, potvrzování, apod.)
h (--help)

Jak zabalit více souborů do jednoho souboru archivu?

Například takto:

gzip -c soubor1 > archiv.gz
gzip -c soubor2 >> archiv.gz

nebo lépe:

gzip -c soubor1 soubor2 > archiv.gz

anebo vůbec nejlépe (lepší komprese):

cat soubor1 soubor2 | gzip > archiv.gz

Z posledního příkladu je však vidět jeden (vážný a ne jediný) nedostatek, který platí pro všechny uvedené i neuvedené možnosti - totiž, že po rozbalení dostaneme jeden soubor archiv, který je spojením všech souborů v archivu, což není žádoucí (většinou) a proto se gzip pro balení více souborů do jednoho souboru archivu nepoužívá!

bzip2

bzip2 komprimuje pomocí Burrows-Wheeler block sorting text compression algorithm (uf, ...) a Huffmanova kódování. Komprese je zřetelně lepší než ta u metod LZ77/LZ78.
Defaultní přípona bzip2 archivu je .bz2.
V použití se velice podobá programu gzip.

Balení (komprimace):

bzip2 jmeno_souboru ...

Pokud není jmeno_souboru uvedeno, bzip2 předpokládá vstup ze standardního vstupu, stejně jako gzip.

bzip2, opět stejně jako gzip, umí zabalit jen jeden soubor a po zabalení ho smaže (defaultně).

Též je možné nastavit "kvalitu" komprese číslem 1 až 9, zde už je však defaultní hodnota 9 (čili maximální komprese).

Rozbalování (dekomprimace):

bzip2 -d jmeno_bzip2_archivu ...

parametry:

d (--decompress) - dekomprimace

Pokud není jmeno_bzip2_archivu uvedeno, bzip2 přesměruje výstup na standardní výstup.

Soubor archivu se též (defaultně) smaže (nahradí vybaleným souborem).

Další parametry:

c (--stdout) - výstup přesměruje na standardní výstup, nedělá nic s originálními soubory
k (--keep) - nemaže originální soubory při komprimaci/dekomprimaci
v (--verbose) - "ukecanost" (otázky, potvrzování, apod.)
h (--help)

bzip2 se ze stejných důvodů jako gzip nepoužívá ke komprimaci více souborů do jednoho souboru archivu.

Tak si to teď shrňme.

tar jako jediný umí balit více souborů do jednoho souboru archivu, ale jeho "komprese" je více než mizerná (soubor ještě prodlužuje!).
gzip a bzip2 více souborů balit neumí, ale zato jejich koprese je přijatelná (gzip) a více než výborná (!) (bzip2).

Což takhle využít jejich výhody a používat je společně?!!

Nejdříve zabalíme soubory tarem do jednoho archivu a potom ten archiv znova zabalíme gzipem nebo pomocí bzip2.

Každý notorický závislák na jedněch nejmenovaných systémech jednoho nejmenovaného boháče a tudíž politováníhodný ztroskotanec si náhle pomyslí "A mám vyhráno !" a napíše:

Pro komprimaci:

tar cf archiv.tar soubory
bzip2 archiv.tar

a pro dekomprimaci:

bzip2 -d archiv.tar.bz2
tar xf archiv.tar

(pro gzip podobně)

Ale skutečně vyhráno zde má jen správný uživatel systému typu UNIX (př. Linux) !!!. Využije (skutečného) multitaskingu (skutečného) systému a napíše:

Pro komprimaci:

tar cf - soubory | bzip2 > archiv.tar.bz2

a pro dekomprimaci:

bzip2 -cd archiv.tar.bz2 | tar xf -

(a pro gzip podobně)

Pozorný čtenář si zde určitě vzpomene na parametr taru z a proto jej využije k ještě kratšímu zápisu:

Pro komprimaci:

tar cfz archiv.tar.gz soubory

a pro dekomprimaci:

tar xfz archiv.tar.gz

Pozn.:

Pro ty, co si přivykli na souborový manažer Midnight Commander ještě dodám, že tento zvládá rozbalování archivů tar, gz, bz2, tar.gz, tar.bz2 a ještě nějakých dalších. Na takovém archivu jen stačí zmáčknout [enter], tím se z archivu stane readonly adresář a zabalené soubory lze prohlížet a vybalovat (kopírovat z archivu).

A to je vše. Přeji vám veselé a úspěšné balení a rozbalování !



--- JOHNY.5 ---