Pohodlnější komprimace; Jak slisovat tučňáka aneb Vše o kompresi pod Linuxem

Ovládání programů pro kompresi a dekompresi pomocí příkazové řádky je sice pro počítačové guru velmi pohodlné, ...


Ovládání programů pro kompresi a dekompresi pomocí příkazové řádky je sice pro
počítačové guru velmi pohodlné, leč ostatní ocení spíše nějaké intuitivnější
ovládání či přímo grafické rozhraní. To sice není samospasitelné, ale často
může řadu chyb odstranit a hlavně zjednodušit práci.
Programů, které toto umožňují, existuje i pod Linuxem skoro stejný počet jako
pod Windows. Samozřejmě i zde pak existují programy lepší a ty méně povedené. V
následujícím krátkém výčtu byste měli najít ty z té první skupiny, v každém
případě si však vyzkoušejte i některé další, existuje jich totiž tolik, že se
sem všechny dobré vejít prostě nemohly.
lMidnight Commander
(http://www.gnome.org/mc/ ) nejrozšířenější nadstavbou shellu, který je
součástí téměř všech linuxových distribucí včetně těch komerčních. Po grafické
stránce se jedná o klon populárního Norton Commanderu z DOSu, ale po stránce
funkční nabízí mnohem více. Nás bude zajímat hlavně práce s archivy. Midnight
Commander spustíte příkazem mc. Pak si najděte nějaký archiv, najeďte na něj a
zmáčkněte klávesu Enter. Archiv se otevře, jako by to byl adresář. Z archivu
pak můžete snadno prohlížet či kopírovat soubory. Bohužel není možné upravovat
obsah archivu tak, jak je to možné ve Windows Commanderu. Výhodou Midnightu je
jeho koncept VFS, pravděpodobně inspirovaný linuxovým jádrem. Díky němu si
můžete poměrně snadno přidat podporu libovolného kompresního programu. Viz
/usr/lib/mc/extfs.
lLnxZip
(http://visionary-hawk.webjump.com/
lnxzip.html) je zajímavým programem z projektu Gnome, který se svým rozhraním a
ovládáním podobá WinZipu. Podporuje vytváření nových archivů typu zip, tar,
tar.gz, tar.bz2, umí do nich přidat další soubory, případně je i mazat. Dokáže
rozbalovat arj.
lGnoZip (http://www.geocities.com/SiliconValley/9757/gnozip.html ) také program
inspirovaný rozhraním utility WinZip, který je stejně jako LnxZip určen
primárně pro Gnome. V současné době sice existuje pouze verze 0.1.1, ale ta již
naznačuje kvalitu produktu. Zajímavostí je podpora osmi formátů včetně rar a
lha.
lGnomeRAR (http://gnomerar.ehnet.org ) velice graficky vyvedený program, který
zvládne vše, co budete potřebovat. Musíte ale vlastnit komerční rar, protože
GnomeRAR je jen grafickým rozhraním nad tímto příkazem. lLinZip
(http://www.softism.com ) na rozdíl od předchozích 3 programů, které jsou
šířeny pod licencí GPL, se jedná o jeden z mála sharewarových produktů pro
Linux (cena je 22 dolarů). Za tuto cenu nabízí plnou podporu tar, tar.gz,
tar.bz2, lzh a zip, u arj zvládá jen dekompresi. lCool Zippi Tool
(http://home.metroweb.co.za/~r0cknr0l/index.html ) nabízí strohé, leč
jednoduché prostředí a navíc podporuje opět větší počet formátů.o



Jak slisovat tučňáka aneb Vše o kompresi pod Linuxem

V době disků o kapacitě desítek gigabajtů se může zdát komprese dat zbytečná.
Jenže žádný disk není nevyčerpatelný a velice brzy se zaplní soubory, které
opravdu potřebujete a nemůžete je smazat. Další významnou aplikací komprimace
je přenos dat, a to jak na výměnných médiích, tak i po síti. A zde již na
velikosti záleží. Podstatně. Volba kvalitního komprimačního nástroje vám může
ušetřit desítky procent nákladů za přenos.
Podívejme se však nejprve, co to komprese (zabalení, pakování) vlastně je.
Jedná se o proces, při kterém se převádějí data do úspornější podoby, která
obvykle zabírá méně prostoru. Tato procedura většinou bývá náročná na výkon
procesoru a často i na operační paměť počítače. Na světě je známo několik
desítek nejrůznějších kompresních algoritmů, které se liší svou rychlostí i
účinností. Čím je výsledný produkt menší, tím je algoritmus účinnější. Bohužel
ty nejúčinnější algoritmy bývají i nejnáročnější, a proto se obvykle v praxi
nepoužívají. Pro zajímavost asi nejlepším neztrátovým algoritmem je metoda
konečného kontextu (PPM).
Pod Linuxem najdeme několik komprimačních programů, a to compress, gzip a
bzip2. Tyto nástroje ale nejsou specifické pro Linux, najdete je na většině
operačních systémů unixového typu. Zvláště pak program compress platí za
standard, který se používá snad všude. Vyjmenované balicí programy se ale
podstatně liší od svých protějšků ze světa DOSu, jakými jsou arj, rar či zip.
Unixové programy jsou totiž jednoúčelové a umějí zkomprimovat pouze jeden
soubor. Pomocí nich není možné zabalit například celý adresář do jediného
archivu, což dosovské produkty v pohodě zvládají. Situace ale zdaleka není tak
černá, jak se snad může jevit. Řešením je totiž standardní příkaz tar.

Základem je příkazová řádka aneb Jak na tar
Tar se původně používal pro zálohování dat na pásku. Jeho jedinou schopností je
vytvořit ze zvolených souborů jeden kompaktní archiv. V tomto archivu jsou
uchována nejen data souborů, ale i jejich názvy a atributy. Tar stejně jako
kompresní utility compress, gzip a bzip2 ctí filozofii UNIXu soustřeď se na
jediný úkol a dělej jej perfektně. Právě proto je UNIX, a tedy i Linux tak
modulární a přizpůsobitelný.
Základní použití taru je jednoduché. Příkazem tar cf archiv.tar *.txt vytvoříte
soubor archiv.tar, který bude obsahovat všechny soubory z aktuálního adresáře,
jejichž název končí na .txt. Písmenko c (Create) je příznak, který přikazuje
taru vytvořit nový archiv. Druhým parametrem je f (File) a ten určuje, že
vytvořený archiv se bude ukládat jako soubor. Pokud byste tento parametr
vynechali, veškerá data by šla na standardní výstup. Toho se využívá například
při zřetězování příkazů či přesměrování do souboru. Jenže pokud ani jedno
neprovedete, data se zapíší na terminál, což není úplně dobrý nápad.
Po bloku příznaků obvykle následuje název archivu, se kterým pracujete. Pokud
zadáte příznak f, další parametr na příkazové řádce bude sloužit jako archiv.
Všechny zbylé parametry určují soubory, které chcete vložit do souboru. K
dispozici máte regulérní výrazy, takže není problém přesně vybrat soubory,
které chcete sbalit. Například tar cf ../homepage.tar *.html *.gif *jpg uloží
do nadřazeného adresáře archiv homepage.tar, který bude obsahovat všechny html
stránky včetně obrázků typu gif a jpg. Případně příkaz tar cf ../homepage.tar .
uloží do stejného archivu všechny soubory v aktuálním adresáři včetně všech
podadresářů.
Když už tedy umíme vytvořit archiv, můžeme si jej třeba prohlédnout. To nám
umožní příznak t (lisT): tar tf archiv.tar zobrazí názvy všech souborů
uložených do souboru archiv.tar. Posledním krokem taru je rozbalení archivu,
pro které použijeme příznak x (eXtract): tar xf archiv.tar rozbalí soubor
archiv. tar do aktuálního adresáře.
Pokud jste si výše uvedené příkazy vyzkoušeli, možná jste zpozorovali, že
výsledná velikost je větší než prostý součet velikostí balených souborů. To je
v pořádku. Nezapomeňte totiž na to, že tar ukládá spoustu informací o
zpracovaných souborech. Tyto údaje pak používá při extrakci, aby mohl vytvořit
soubor naprosto identický originálu. Více informací najdete v manuálové stránce
(příkazem man tar).

Kompresní programy
Nejstarším dodnes používaným příkazem pro kompresi je compress. Jedná se o
jednoduchý a nenáročný program s nízkou účinností (mezi 50-60 % u textu).
Používá upravený Lempel-Ziv algoritmus. Produkuje soubory s příponou .Z. Archiv
vytvoříte příkazem compress soubor.txt a rozbalíte příkazem compress -d
soubor.txt.Z či uncompress soubor.txt.Z. Dá se snadno kombinovat s tarem: tar
cZf archiv. tar.Z texty/ zabalí a zkomprimuje adresář texty do souboru
archiv.tar.Z. Podobně příkaz tar xZf archiv.tar.Z rovnou rozbalí komprimovaný
tar. Použitím příznaku Z si ušetříte psaní dvou příkazů uncompress archiv.tar.Z
a tar xf archiv.tar.
O něco novějším kompresním programem je gzip. Gzip je opět málo náročný na
systémové prostředky, ale dosahuje lepších výsledků než compress. Jeho účinnost
se na textech pohybuje od 60 % do 70 %. Používá Lempel--Ziv algoritmus z roku
1977 (LZ77). Výsledkem jeho práce jsou soubory s příponou .gz. Veškerá syntaxe
a přepínače jsou přejaty z compressu. Takže gzip soubor.txt vytvoří archiv
soubor.txt, který rozbalíte příkazem gunzip soubor.txt.gz či gzip d soubor.
txt.gz. Zkratka pro tar je příznak z: tar czf archiv.tar.gz texty/. Většina
lidí zkracuje příponu tar.gz na .tgz. Zajímavostí je, že gzip dokáže
automaticky rozbalit archivy komprimované příkazem compress.
Následníkem gzipu je bzip2. Jedná se o mimořádně účinný kompresní nástroj,
jehož výsledky se blíží algoritmům třídy PPM. Této účinnosti bohužel dosahuje
za cenu vysokých nároků na hardware počítače. Zvláště komprese je velmi pomalá.
Bzip2 používá blokový Burrows-Wheeler algoritmus. Bzip2 produkuje soubory s
příponou .bz2. Syntaxe je opět stejná jako u předešlých příkazů: bzip2
soubor.txt, bunzip2 soubor.txt.bz2 a bzip2 d soubor. txt.bz2. Pro tar se
používá příznak I: tar cIf archiv.tar.bz2 texty/. Bzip2 pomalu nahrazuje gzip.
Často se jím komprimují zdrojové kódy jádra Linuxu, protože úspora oproti
běžnému gzipu jde do megabajtů. A to již stojí za to, ne?
Mimo tyto příkazy existují pro Linux i jiné produkty. Jedná se hlavně o portace
programů z prostředí DOSu. Existují zdarma šířené unarj, unrar a unzip, které
pouze dekomprimují patřičné formáty. K dispozici je zdarma šířený zip, který
zvládá i kompresi. Použijete jej hlavně při výměně dat s uživateli
používajícími DOS (Windows). Dále existují také sharewarové portace raru a
pkzipu. Na Internetu zmíněné programy najdete na LinuxBergu
(http://cesnet.linuxberg.com/conhtml/fil_compression.html ).
Někdy se vám stane, že nemůžete otevřít nějaký archiv. Tar či kompresní utilita
si stěžují, že nemohou rozpoznat formát souboru. Pokud pomineme variantu
poškození souboru, může se také jednat o špatně pojmenovaný soubor. Už jsem
viděl CD nejmenovaného výrobce zvukových karet, na kterém byl ovladač pro Linux
ve formátu tar.gz, ale soubor se jmenoval linux.tar! Pokud tedy narazíte na
nečekanou chybu, použijte příkaz file. Tento zajímavý program zná hlavičky
tisíců nejrůznějších formátů včetně kompresí typu gzip, bzip2, tar, arj, zip a
rar. Takže příkaz file linux.tar by vypsal řádek obsahující "gzip compressed
data". Proto byste soubor nejdříve dekomprimovali gunzipem či použili příznak z
u taru.

Lepší řešení
Samozřejmě i Linux již postoupil a ne vše se musí řešit z příkazové řádky.
Existuje celá řada projektů, jež vám dovolí přistupovat k archivům podobně
komfortně jako to nabízejí známé Windows programy typu WinZip nebo WinRar.
Bohužel tyto programy mají jednu velkou nevýhodu musejí se nainstalovat. Což
často znamená, že je nutné nejprve připravený program stáhnout, rozbalit a
nainstalovat (tedy pokud nejde o RPM). Dostáváme se tak do svízelné situace
máme sice nástroj, který nám umožní vše rozpakovat, ale protože si neporadíme s
příkazovou řádkou, tak tento nový nástroj nemůžeme nainstalovat!
Dalším příkladem, kdy se bez příkazové řádky neobejdete, je vzdálený přístup
pomocí telnetu či ssh, kdy také žádné grafické prostředí k dispozici není a
často není vhodné ani používat nástroje typu Midnight Commander, který
potřebuje volné místo v dočasných souborech. Vidíte tedy, že se vyplatí
kompresi a dekompresi z příkazové řádky alespoň trochu naučit.

Porovnání účinnosti některých produktů
Pozn.: Test byl proveden na adresáři s česky psanými články. Adresář obsahoval
238 souborů o souhrnné délce 542 042 bajtů.
Komp. programVel. v bajtechPoměrVelikost v bajtechPoměr
Compress278 33351,3 % xx
Gzip245 14145,2 %244 27445,1 %
Bzip2185 71934,3 %185 71934,3 %
Arj320 89559,2 %xx
Zip325 67260,1 %325 50760,1 %
Rar329 38060,8 %218 46640,3 %

0 3228 / wep









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.