Hrátky z řádky: komprese a dekomprese

Petr Krčmář 22. 9. 2008

Komprese a dekomprese souborů patří téměř k dennímu chlebu uživatele (nejen) unixového operačního systému. Řada uživatelů se při tom bojí ovládání (de)kompresních utilit z řádky. Není na nich ale nic složitého a po krátkém zaškolení budete umět i vy tyto veledůležité programy využít.

Příkaz tar

Samotný tar sice komprimovat neumí, ale jeho použití je s linuxovou kompresí velmi úzce spjato, jak si vysvětlíme později. Název je vlastně zkratkou slov tape archiver a program byl původně vytvořen pro zjednodušení zálohy na pásky. Hlavní úlohou, kterou tar plní, je spojování souborů do jednoho archivu.

To se nám bude hodit později při používání komprese, ale nezřídka můžeme využít i tar jako takový. Pokud potřebujeme známému poslat hromadu fotek ve formátu JPEG, je naprosto zbytečné celý adresář komprimovat, protože takový úkon je zbytečně výpočetně náročný, pomalý a především zbytečný – kompresí takových souborů nic nezískáme.

Ideální je tedy skutečně jen fotografie spojit do jednoho souboru a ten pak již nekomprimovat. Právě k tomu se nám může hodit tar. Jeho použití není nijak složité a potřebujeme znát jen tři parametry:

  • create (-c) – vytvoř archiv
  • extract (-x) – rozbal archiv
  • file (-f) – cesta k archivu

Pokud tedy budeme chtít sbalit zmíněný adresář s fotografiemi včetně podadresářů, zvolíme parametry:

$ tar -cf fotky.tar FotoDovolena/

V aktuálním adresáři vznikne soubor fotky.tar, který bude mít přibližně velikost všech souborů v adresáři FotoDovolena. Kolega, který náš soubor stáhne, pak může velmi podobně vše zase rozbalit:

$ tar -xf fotky.tar

Gzip a Bzip2

Nejčastěji používanými linuxovými kompresními utilitami jsou gzip a bzip2. První jmenovaný je řekněme tradiční. Druhý je pak modernější a mladší a poskytuje obvykle lepší kompresní poměr. O historii a principu Bzip2 doporučuji přečíst samostatný článek ze seriálu Unixová komprese v praxi.

Obě utility se z uživatelského hlediska ovládají úplně stejně, což je velmi výhodné, protože je možno mezi nimi jednoduše přecházet a nemusíte se učit nic nového a duplicitního. Oba programy mají společnou i tu vlastnost, že umí komprimovat vždy jen jeden soubor. To vychází z unixové filosofie, která říká, že „program dělá jen jednu věc, ale dělá ji pořádně“.

Kompresi tedy vyvoláme jednoduše bez parametrů příkazem:

$ gzip obrazek.bmp

Případně použijeme místo gzip příkaz bzip2. Výsledkem této akce bude soubor obrazek.bmp.gz, který je komprimovanou podobou předchozího souboru. Stejně tak můžeme použít utility v rourách a zřetězit je tak s dalšími příkazy:

$ grep 2008 soubor.txt|gzip > data.txt.gz

V tomto příkladu jsme ze souboru vybrali řádky obsahující řetězec „2008“ a výsledek (tedy nový soubor) jsme rovnou zkomprimovali a uložili na disk do souboru data.txt.gz. Výsledek samozřejmě nemusíme ukládat, ale můžeme jej třeba předat poštovnímu klientu rovnou k odeslání e-mailem. Pro další využití si prostudujte články kombinace příkazů a kombinace příkazů podruhé.

Pro zpětnou dekompresi vytvořeného souboru pak můžeme využít buďto parametru -d (jako decompress) nebo přímo příkazů gunzip či  bunzip2.

$ gunzip data.txt.gz

Spojení a samotná komprese

Konečně se dostáváme k tomu hlavnímu, což je komprese většího množství souborů a adresářů do jednoho archivu. Využijeme k tomu právě propojení příkazů tar a gzip respektive bzip2. Jak už jsme si řekli, můžeme příkazy zřetězit do roury, použití je tedy jasné:

$ tar -c NejakaData/ | gzip > data.tar.gz

Nejprve pomocí taru vytvoříme archiv, který pak pošleme gzipu pro kompresi. Výsledný proud uložíme do souboru se zdvojenou příponou .tar.gz, aby bylo uživateli později jasné, jak a čím je tento soubor vytvořen. Velmi často je přípona zkracována na  .tgz.

Dekompresi pak provedeme reverzním postupem:

$ gunzip -c data.tar.gz |tar -x

Ke správné funkci jsme potřebovali ještě parametr -c, který zajistí, že dekomprimovaný proud se objeví na standardním výstupu. O ten se už postará tar, který archiv rovnou rozbalí.

Protože spojení tar a gzip, respektive bzip2, je velmi časté, vložili autoři GNU Tar do archivační utility možnost přímé spolupráce s kompresními programy. Pokud se tedy vrátíme na úplný začátek článku k parametrům taru, můžeme si k nim přidat ještě dva další:

  • gzip (-z) – použij rovnou gzip
  • bzip2 (-j) – použij rovnou bzip2

Můžeme tak podstatně jednodušeji sbalit a zkomprimovat celou adresářovou strukturu včetně souborů:

$ tar -czf zkomprimovano.tgz NejakeSoubory/

respektive

$ tar -xzf zkomprimovano.tgz

Vidíte, že jsme skutečně jen přidali parametr -z a sbalený archiv se přímo i komprimuje. V případě dekomprese a rozbalení je postup zcela totožný.

Manuálové stránky

Pokud vás zajímají další parametry, určitě si prostudujte manuálové stránky příslušných příkazů:

Našli jste v článku chybu?
Měšec.cz: Se stavebkem k soudu už (většinou) nemusíte

Se stavebkem k soudu už (většinou) nemusíte

Měšec.cz: MyUniCard: recenze předplacenky

MyUniCard: recenze předplacenky

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

120na80.cz: Bonbon si schovejte na přistání

Bonbon si schovejte na přistání

Lupa.cz: IT scéna po brexitu: přijde exodus vývojářů?

IT scéna po brexitu: přijde exodus vývojářů?

DigiZone.cz: Hra o trůny: natáčení 7. řady posunuto

Hra o trůny: natáčení 7. řady posunuto

Měšec.cz: Investice do drahých kovů - znáte základní chyby?

Investice do drahých kovů - znáte základní chyby?

Vitalia.cz: Jak na domácí zmrzlinu?

Jak na domácí zmrzlinu?

120na80.cz: Úpal vs. úžeh. Co dělat?

Úpal vs. úžeh. Co dělat?

DigiZone.cz: Sat novinky: pátý kanál maďarské televize

Sat novinky: pátý kanál maďarské televize

Měšec.cz: Platíme NFC mobilem. Konečně to funguje!

Platíme NFC mobilem. Konečně to funguje!

Podnikatel.cz: Fotogalerie: Jesenka už má skoro 50 let

Fotogalerie: Jesenka už má skoro 50 let

DigiZone.cz: Markíza HD a Dajto? U Digi TV asi minulost

Markíza HD a Dajto? U Digi TV asi minulost

Podnikatel.cz: Místa, kde hází podnikání klacky pod nohy

Místa, kde hází podnikání klacky pod nohy

Podnikatel.cz: Přerušil SVČ, nic nehlásil. Dál musí platit

Přerušil SVČ, nic nehlásil. Dál musí platit

Podnikatel.cz: Kanceláře jako kóje? Špatný vtip

Kanceláře jako kóje? Špatný vtip

Podnikatel.cz: Rozhodnuto! Pracující senior penzi nezdaní

Rozhodnuto! Pracující senior penzi nezdaní

Vitalia.cz: Petr Koukal: Až rakovina mi zkvalitnila život

Petr Koukal: Až rakovina mi zkvalitnila život

DigiZone.cz: Loewe Subwoofer 300 pro televizory

Loewe Subwoofer 300 pro televizory

Měšec.cz: Nový sazebník mBank radost nedělá

Nový sazebník mBank radost nedělá