Hlavní navigace

Unixová komprese v praxi: Compress

14. 4. 2003
Doba čtení: 3 minuty

Sdílet

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

DT24

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ě.

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.