IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 13 - Linuxový terminál (Bash) - Archivace a komprese

V minulé lekci, Linuxový terminál (Bash) - Správa skupin a ACL, jsme se naučili vytvářet a spravovat skupiny. Dále jsme si vysvětlili, jakým způsobem můžeme přidělovat práva jednotlivým uživatelům pomocí ACL.

V dnešením Linux tutoriálu se naučíme, jak vytvářet a pracovat s archivem dat. Jinými slovy, naučíme se sloučit několik souborů či adresářů v jeden balíček. Archivace je důležitá a často používaná dovednost např. při zálohování dat nebo manipulaci s více soubory naráz (např. přeposílání po síti). Následně si ukážeme, jak pomocí komprese co nejvíce zmenšit velikost takového archivu.

Komprese

Kompresí (také komprimací) se snažíme zpracovat data tak, aby se zmenšila jejich velikost. Můžeme se setkat s pojmem kompresní poměr. Jedná se o poměr velikosti zkomprimovaného souboru k původnímu souboru. Čím vyšší poměr, tím více se komprimovaný soubor zmenší oproti původnímu souboru. V této lekci se budeme zabývat hlavně bezeztrátovou kompresí. To znamená, že při dekompresi se soubor či adresář rekonstruuje do původní velikosti bez ztráty dat. V praxi se využívá i ztrátová komprese. Používá se např. při kompresi zvuku či videa, kde si ztráty dat nemusíme ani všimnout. Výhodou je výrazně vyšší poměr komprese (zmenšení velikosti souboru), než u bezeztrátové.

Archivace v grafickém prostředí

Nejprve si ukážeme, jak archivovat soubor v grafickém prostředí (Nautilus). Pro tyto účely si nejprve vytvoříme adresář Soubory/ do adresáře Documents/:

mkdir /home/David/Documents/Soubory

Dále budeme potřebovat soubory, které budeme archivovat. Ty můžeme vytvořit přímo v Nautilusu nebo pomocí příkazu touch:

touch index.html style.css script.js

Otevřeme si adresář Soubory/ a vidíme zde naše tři vytvořené soubory. V grafickém prostředí probíhá archivace podobně, jako na jiných operačních systémech. Klikneme pravým tlačítkem na požadovaný soubor, zvolíme možnost Compress… a vybereme druh komprese:

komprimace v Nautilusu - Základy Linuxu

Archivovat lze i více souborů najednou. Stačí označit všechny požadované a dál pokračovat stejným způsobem. Archivovat lze samozřejmě i celé adresáře či adresářovou strukturu.

Dekomprese v Nautilu

Pro dekompresi souboru klikneme pravým tlačítkem na archiv a zvolíme extrahovat.

Archivace v Terminálu

tar

Nejpoužívanější nástroj pro archivaci souborů v textovém rozhraní Linuxu je program tar. Jeho výhodou je, že archivace se provede včetně nastavení vlastnictví, oprávnění souborů a adresářů a bývá součástí většiny distribucí.

Archivace programem tar

Nejprve v terminálu přejdeme do adresáře Soubory/ vytvořeném v předchozí části. Příkazem ls si ověříme, že zde máme tři soubory. Pokud ne, vytvoříme je. Archivaci provedeme pomocí příkazu tar s přepínačem -cf (create file). Za ním následuje název archivu a nakonec archivovaný soubor nebo adresář. Celý příkaz tedy vypadá takto:

tar -cf archiv.tar index.html

Soubor s názvem index.html je nyní archivovaný v souboru archiv.tar.

Stejně jako v Nautilu i v terminálu lze archivovat několik souborů současně:

tar -cf archiv.tar index.html style.css script.js

Lze samozřejmě použít i regulární výrazy pro usnadnění zápisu. Chceme-li např. archivovat pouze soubory s příponou .html, příkaz bude vypadat následovně:

tar -cf archiv.tar *.html

Vytvoříme-li ve stejném adresáři znovu soubor s názvem archiv.tar, přepíšeme ten původní.

Ignorování masky

Přidáním přepínače -p se při následném rozbalení ignorují masky. To znamená, že se zachovají původní uživatelské oprávnění bez ohledu na to, kam se archiv rozbaluje:

tar -cpf archiv.tar *.html

Přepínač -f bychom měli umístit vždy na konec řady. V některých případech by jinak proces nemusel fungovat.

Zobrazení obsahu archivu

Jsou dvě varianty, jak zobrazit obsah archivu. První je pomocí přepínače -tf:

david@david:~/Documents/Soubory$ tar -tf archiv.tar

index.html
script.js
style.css

Druhá varianta je pomocí less:

david@david:~/Documents/Soubory$ less archiv.tar

-rw-rw-r-- vf/vf             0 2022-09-01 11:58 index.html
-rw-rw-r-- vf/vf             0 2022-09-01 11:58 script.js
-rw-rw-r-- vf/vf             0 2022-09-01 11:58 style.css

Odstranění souboru z archivu

Soubory obsažené v archivu můžeme jednotlivě vymazat. Pokud se rozhodneme, že z našeho archivu chceme vyřadit soubor script.js, použijeme volbu --delete -f:

tar --delete -f archiv.tar script.js

Po výpisu obsahu archivu zjistíme, že tento soubor v něm již není.

Přidání souboru do existujícího archivu

Pokud nastane situace, že potřebujeme zahrnout nový soubor do již existujícího archivu, využijeme k tomu přepínač -rf. Soubor script.js nyní vložíme zpět do našeho archivu:

tar -rf archiv.tar script.js

Vypsáním obsahu archivu si opět ověříme, zda akce proběhla úspěšně.

Extrahování archivu

Pro extrahování archivu slouží přepínač -xf:

tar -xf archiv.tar

Je třeba dát pozor, kam archiv extrahujeme. Pokud bude cílový adresář obsahovat soubory nebo adresáře se stejným názvem, jako v archivu, extrahováním se přepíší. To naopak může být žádoucí, pokud obnovujeme data ze zálohy.

Chceme-li určit jiný adresář pro rozbalení archivu než ten, ve kterém se nacházíme, přidáme přepínač -C, Poté zadáme relativní či absolutní cestu:

tar -xf archiv.tar -C /home/David/Desktop

Komprese programem tar

Program tar obsahuje několik nástrojů pro kompresi. Všechny jsou k nalezení v manuálu v sekci Compression option. Nejpoužívanější nástroje jsou gzip a bzip2.

gzip

Komprese gzip umožňuje cca o 15 % menší poměr komprese než bzip2. Na druhou stranu spotřebuje výrazně méně operační paměti v průběhu komprese a je rychlejší. Je tedy vhodná tam, kde je zapotřebí vysoká rychlost a nižší nároky na operační paměť. Archivy komprimované pomocí gzip mají většinou příponu .tar.gz nebo .tgz.

Kompresi provedeme použitím přepínače -z:

tar -czf archiv.tar.gz index.html style.css script.js

Linux si obecně, na rozdíl od Windows, na přípony souborů nepotrpí. Můžeme teoreticky zvolit jakoukoliv příponu chceme, případně nepoužít žádnou. Identifikování souboru pak ale bude velmi složité. Je tedy dobré zachovat konvence.

Dekomprese gzip archivu docílíme záměnou přepínače -c za -x:

tar -xzf archiv.tar.gz

bzip2

Komprese pomocí bzip2 je náročnější na operační paměť a doba komprese je delší než u gzip. Pokud toto není na překážku, výsledný archiv bude cca o 15 % menší. Soubor komprimovaný pomocí bzip2 poznáme podle přípony .bz2. Kompresi docílíme přepínačem -j:

tar -cjf archiv.tar.bz2 index.html

Dekompresi opět provedeme přepínačem -x:

tar -xjf archiv.tar.bz2

Komprese programem zip

Zip je nejpoužívanější formát archivního souboru pro kompresi dat. Na rozdíl od nástrojů programu tar, zip je multiplatformní. Je vhodný, plánujeme-li přenést a použít archiv na Windows nebo MAC a naopak. Archivy zip nepodporují informace o vlastnictví a oprávnění ve stylu Linuxu. Vlastnictví je vždy nastaveno uživateli, který spouští příkaz. Pokud ovšem nemáme v plánu použít archiv na jiné platformě, nástrojem gzip dosáhneme daleko lepšího poměru komprese.

Ubuntu standardně program zip obsahuje. Pokud terminál vrátí chybu:

bash: /usr/bin/zip: No such file or directory

Je nutné jej nejprve nainstalovat:

sudo apt install zip

Vytvoření archivu zip

Příkaz pro kompresi je podobný jako u tar, jen není zapotřebí přepínačů:

zip archiv.zip *

Regulárním výrazem * jsme si usnadnili práci a označili všechno, co se nachází v daném adresáři.

Pokud zapomeneme na příponu .zip, přidá se k archivu automaticky.

Zobrazení obsahu archivu zip

Pro zobrazení obsahu archivu můžeme využít less:

david@david:~/Documents/Soubory$ less archiv.zip

Archive:  archiv.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 2022-09-01 11:58 00000000  index.html
       0  Stored        0   0% 2022-09-01 11:58 00000000  script.js
       0  Stored        0   0% 2022-09-01 11:58 00000000  style.css
--------          -------  ---                            -------
       0                0   0%                            3 files

Druhá varianta je příkaz unzip s přepínačem -l (list):

david@david:~/Documents/Soubory$ unzip -l archive.zip

Archive:  archiv.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2022-09-01 11:58   index.html
        0  2022-09-01 11:58   script.js
        0  2022-09-01 11:58   style.css
---------                     -------
        0                     3 files

Rekurzivní komprese

Často potřebujeme komprimovat adresář včetně všech podadresářů. Zatímco u tar toto nemusíme řešit, u zip toho docílíme přepínačem -r (recursive). Zkusíme takto archivovat celý adresář Documents/ včetně podadresáře Soubory/:

zip -r archiv.zip Documents/

Zobrazením obsahu archivu si ověříme úspěšnost operace.

Zaheslování archivu zip

Další výhodou tohoto způsobu archivace je, že lze nastavit heslo. Heslo nezabrání např. smazání souboru z archivu, pouze bude vyžadováno při extrahování souborů. Heslo nastavíme přepínačem -e (encript) při vytváření archivu. Přesuneme se zpět do adresáře Soubory/ a vytvoříme archiv s heslem:

zip -e zaheslovaný_archiv.zip index.html

Po zadání příkazu nás terminál vyzve k zadání hesla.

Odstranění souboru z archivu zip

Stejně, jako u kompresi tar, i v tomto případě můžeme odstranit jednotlivé soubory z archivu. Pro odstranění souboru script.js z našeho archivu archiv.zip přidáme přepínač -d (delete):

zip -d archiv.zip script.js

Ověříme si, že soubor v archivu již není.

Přidání souboru do archivu zip

Pro přidání nového souboru do existujícího archivu slouží přepínač -u (update):

zip -u archiv.zip script.js

Opět si ověříme výpisem obsahu, že operace proběhla úspěšně.

Oprava poškozeného archivu zip

Může se stát, že se soubory v archivu poškodí. Po přidání přepínače -F (fix) se program zip pokusí archiv opravit a opravené soubory uloží do nového archivu. Nový archiv definujeme --out opravený_archiv.zip:

zip -F archiv.zip --out opravený_archiv.zip

Po vypsání obsahu adresáře uvidíme, že vedle původního archivu se vytvořil nový s názvem opravený_archiv.zip.

Dekomprese archivu zip

Soubory z archivu extrahujeme pomocí příkazu unzip:

unzip archiv.zip

V případě zaheslovaného archivu nás terminál vyzve k zadání hesla.

V další lekci, Linuxový terminál (Bash) - Správa aplikací, se podíváme detailněji na aplikace. Vysvětlíme si, jak se program v Linuxu distribuuje, kde je uložený, jak se k němu dostat a jak s ním pracovat.


 

Předchozí článek
Linuxový terminál (Bash) - Správa skupin a ACL
Všechny články v sekci
Základy Linuxu
Přeskočit článek
(nedoporučujeme)
Linuxový terminál (Bash) - Správa aplikací
Článek pro vás napsal Václav Franz
Avatar
Uživatelské hodnocení:
46 hlasů
Aktivity