Hlavní navigace

Unixová komprese v praxi: Compress

Petr Krčmář 14. 4. 2003

V dnešním dílu si konečně povíme o prvním, skutečně kompresním programu. A začneme rovnou tou největší klasikou, kterou je compress.

Jsem rád, že jste se prokousali až sem, a jsem si jist, že se už těšíte na první „mačkání“ dat. Nebudeme kolem toho nějak dlouho chodit a jdeme na to.

Compress je program s velmi dlouhou minulostí a existuje už od dob klasických Unixů. Jeho poslední verze je 4.2. Compress používá kompresní algoritmus LZW (Lampel-Ziv-Welch kódování), který vnitřně využívají například také obrázkové formáty GIF, TIFF, ale používá jej také zip, arj a lharc. Algoritmus byl poprvé představen veřejnosti v roce 1984. Je účinnější než klasické Huffmanovo kódování a je velmi nenáročný na čas. Účinnost při kompresi anglického textu nebo zdrojových kódů (tzn. nebinárních dat) se typicky pohybuje okolo 50 – 60%.

Compress používá standardně příponu .Z, se kterou se můžeme ještě stále setkat v některých archivech a na některých starších systémech. Compress byl postupně vytlačen gzipem, který se ve většině případů vyznačuje vyšším kompresním poměrem a větší možností nastavení. Compress však stále zůstává unixovou klasikou, hlavně díky stabilitě jeho formátu, který se nemění.

Předpokládám, že jej najdete v každé distribuci, balíček se nejspíš jmenuje ncompress. Program lze samozřejmě nainstalovat i ze zdrojových kódů. V balíčku se v podstatě nacházejí pouze dva spustitelné soubory: compress a uncompress.

Compress je, jak již název napovídá, samostatným kompresním programem. Základní použití je velmi jednoduché, stačí použít

compress soubor

a tím nám původní soubor zmizí a na jeho místě se objeví soubor s názvem soubor.Z, který je již komprimován. Všimněte si, že se neobjevila žádná hláška. Unixové příkazy standardně, pokud vše proběhlo hladce, nic nevypisují. Compress lze však použít také v rourách tak, jak jsme si to ukázali minule. Můžeme tak třeba zkomprimovat tento článek:

cat komprese3.txt | compress > komprese3.txt.Z

Compress může pracovat také s větším množstvím souborů najednou s tím, že všechny postupně zkomprimuje a orginály smaže. Toho můžeme docílit použitím klasických „nahrazovacích“ znaků jako * a ?. Takže po použití příkazu

compress komprese*

mi na disku zbydou soubory komprese1.txt.Z, komprese2.txt.Z a komprese3.txt.Z. Každý soubor je tedy komprimován zvlášť! Nevznikne jeden soubor, ale dostaneme stejný počet souborů, jako bylo původních. Chceme-li, aby compress procházel podadresáře a komprimoval soubory i v nich, použijeme parametr -r (recursively). Pokud potřebujeme vytvořit jeden archiv, použijeme náš známý tar, a to buď takto:

tar -c komprese* | compress > komprese_vsecky.tar.Z

nebo

tar -cZf komprese_vsecky.tar.Z komprese*

Parametr velké Z u taru totiž způsobí, že je archiv při vytváření automaticky komprimován compressem.

Uncompress je samozřejmě reverzní utilitka, která umí získat zpět soubory poté, co je komprimujeme compressem. Použití je opět velmi jednoduché:

uncompress soubor.Z

Tím nám zmizí přípona a soubor je rozbalen. Z taru ho dostaneme

cat soubor.tar.Z | uncompress | tar -x

Compress už dávno nestojí na špici žebříčku nejpoužívanějších komprimačních programů, a přestože může u některých specifických druhů souborů dosáhnout o malinko vyšších kompresních poměrů, drtivá většina uživatelů dnes používá gzip a je také znát postupný přechod k bzip2. Dokonce padl návrh na kernel.org, aby celý archiv plně přešel na bzip2. Zatím byl ale tento přechod odložen.

Pro nás jako uživatele je velmi příznivé také to, že se soubory vytvořenými compressem umí pracovat i gzip, což znamená, že máme k práci se .Z soubory celý balík velmi jednoduchých, ale mocných utilitek. Ale o gzipu až příště.

Našli jste v článku chybu?

16. 4. 2003 8:18

Petr Krčmář (neregistrovaný)

Právě kvůli problémům s licencí a tím, že compress není úplně free, vznikl gzip. Přesně z důvodů, jaké popisuješ.

Peter



16. 4. 2003 0:10

AnalProbe (neregistrovaný)

Gzip (stejne jako ZIP) je zalozen na free metode deflate, ktera je v zasade zretezenim LZ77 a Huffmana. LZW je patentovana metoda, kterou modifikaci puvodni metody LZ77 vyvinul Welch v Unisysu. Zajimalo by me, jak je to s licenci na kompresni metodu LZW u programu compress. Ze by si Unisys nechal ujit nejaky prachy?

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

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

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

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

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

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

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

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

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

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie