Hlavní navigace

Hrátky z řádky: komprese a dekomprese

Petr Krčmář

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?

22. 9. 2008 13:10

Myslim, ze je to dobre napsane, pro zacatecniky idealni. Pamatujete si, kdyz jste poprve potreboval v linux/unix neco zabalit? Neprislo Vam divne, proc treba dva programy, tolik parametru? Tohle jsou veci, na ktere se i me zacatecnici casto ptaji. Ja ho hodnotim kladne. Ze Vam clanek nic neprinesl, neznamena, ze je spatny.

22. 9. 2008 6:45

pht (neregistrovaný)
no, myslim ze by clanek zaslouzil ponekud rozsirit. dokumentace trech zakladnich prikazu ma k hratkam dost daleko. co treba moznost nastaveni urovne komprese, tucet dalsich prepinacu taru, a to nemluvim o dalsich programech, jako je cpio, zip, rar, 7zip, a kdovico jeste :-)

jinak co se tyce gnu tar, tak ten umi prijimat volby i bez prvni pomlcky (tar xf misto tar -xf, neco jako ps ax misto ps -ax), a novejsi verze umi automaticky rozpoznat kompresi, tudiz staci 'xf' misto 'xzf' …

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy