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ů:

Ohodnoťte jako ve škole:

Průměrná známka 3,17

Našli jste v článku chybu?
Zasílat nově přidané názory e-mailem
DigiZone.cz: Deset let od 1. kulatého stolu DigiZone.cz

Deset let od 1. kulatého stolu DigiZone.cz

Podnikatel.cz: Podání k DPH jinak než online jsou neúčinná

Podání k DPH jinak než online jsou neúčinná

DigiZone.cz: UPC umí televizi sedm dní nazpět

UPC umí televizi sedm dní nazpět

120na80.cz: Tady se vaří padělané léky

Tady se vaří padělané léky

DigiZone.cz: Konec geoblokace online médií?

Konec geoblokace online médií?

Vitalia.cz: Taky ji kupujete? Je šizená

Taky ji kupujete? Je šizená

120na80.cz: Jak si udržet zdravou vaginu

Jak si udržet zdravou vaginu

Podnikatel.cz: Přechod z OSVČ na firmu? Totální šok!

Přechod z OSVČ na firmu? Totální šok!

Vitalia.cz: Ministerstvo: tyto příbory jsou nebezpečné

Ministerstvo: tyto příbory jsou nebezpečné

Lupa.cz: Jak EET vidí ajťák aneb Drahá vražda UX

Jak EET vidí ajťák aneb Drahá vražda UX

Vitalia.cz: Syndrom počítačového vidění: stačí dvě hodiny denně

Syndrom počítačového vidění: stačí dvě hodiny denně

Lupa.cz: Nová podoba Instagramu? Katastrofa

Nová podoba Instagramu? Katastrofa

120na80.cz: Co jí dělá? Sklerotizaci

Co jí dělá? Sklerotizaci

Lupa.cz: Babiš: nevím o návodu, jak obejít blokování webů

Babiš: nevím o návodu, jak obejít blokování webů

120na80.cz: 10 dezinfekcí: Vede „starý dobrý“ peroxid

10 dezinfekcí: Vede „starý dobrý“ peroxid

DigiZone.cz: Šlágr TV: pokuta 100 tisíc za on-line

Šlágr TV: pokuta 100 tisíc za on-line

Vitalia.cz: Mražené ryby z Makra byly falšované

Mražené ryby z Makra byly falšované

120na80.cz: Zjistěte, zda je vaše klíště infikované

Zjistěte, zda je vaše klíště infikované

Podnikatel.cz: Když už je sexy, tak ať taky funguje

Když už je sexy, tak ať taky funguje

Podnikatel.cz: Konečně vývar. Skoro jako od Steva Jobse

Konečně vývar. Skoro jako od Steva Jobse