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

widgety

$ 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?
DigiZone.cz: Ultra HD v praxi a v Portugalsku

Ultra HD v praxi a v Portugalsku

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

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

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

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

Podnikatel.cz: ČSSZ posílá přehled o důchodovém kontě

ČSSZ posílá přehled o důchodovém kontě

Lupa.cz: Cimrman má hry na YouTube i vlastní doodle

Cimrman má hry na YouTube i vlastní doodle

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

DigiZone.cz: Numan Two: rozhlasový přijímač s CD

Numan Two: rozhlasový přijímač s CD

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko