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?
Lupa.cz: Vydavatelé jsou v háji, ale neumí si to připustit

Vydavatelé jsou v háji, ale neumí si to připustit

DigiZone.cz: Nova stahuje bonus díl „Tvoje tvář má...“

Nova stahuje bonus díl „Tvoje tvář má...“

120na80.cz: Cestovní nevolnost. Co pomůže?

Cestovní nevolnost. Co pomůže?

DigiZone.cz: Kritické poznámky k DVB-T2

Kritické poznámky k DVB-T2

DigiZone.cz: Recenze: TechniSat DigitRadio 2GO

Recenze: TechniSat DigitRadio 2GO

Vitalia.cz: Epidemie: Klíšťová encefalitida po ovčím sýru

Epidemie: Klíšťová encefalitida po ovčím sýru

120na80.cz: Krémy, nebo spreje na opalování?

Krémy, nebo spreje na opalování?

Podnikatel.cz: Takhle si Babiš představuje nové daně

Takhle si Babiš představuje nové daně

Podnikatel.cz: Chce s trdelníky ovládnout Asii. Poznejte ho

Chce s trdelníky ovládnout Asii. Poznejte ho

Podnikatel.cz: 10 citátů Billa Gatese: tesat do kamene

10 citátů Billa Gatese: tesat do kamene

DigiZone.cz: Soud zakázal šíření TV Markíza v ČR

Soud zakázal šíření TV Markíza v ČR

Root.cz: Quake slaví 20 let novou epizodou zdarma

Quake slaví 20 let novou epizodou zdarma

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Měšec.cz: Ceny PHM v Evropě. Finty na úspory

Ceny PHM v Evropě. Finty na úspory

DigiZone.cz: Mobilní aplikace pro DVTV je tady

Mobilní aplikace pro DVTV je tady

DigiZone.cz: Náhrada za nevrácená zařízení?

Náhrada za nevrácená zařízení?

Vitalia.cz: Máte chutě? Nejezděte do světa, ale do Dobřichovic

Máte chutě? Nejezděte do světa, ale do Dobřichovic

Lupa.cz: Nej aplikace? Vodafone, Mozkovna, Záchranka

Nej aplikace? Vodafone, Mozkovna, Záchranka

DigiZone.cz: HbbTV KinoSvět: už jede na dalších TV

HbbTV KinoSvět: už jede na dalších TV

Lupa.cz: Jaké IoT tarify nabízejí mobilní operátoři?

Jaké IoT tarify nabízejí mobilní operátoři?