13. diel - Linuxový terminál (Bash) - archivácia a kopresia
V minulej lekcii, Linuxový terminál (Bash) - Správa skupín a ACL , sme sa naučili vytvárať a spravovať skupiny. Ďalej sme si vysvetlili, akým spôsobom môžeme prideľovať práva jednotlivým užívateľom pomocou ACL.
V tejto lekcii sa naučíme ako vytvárať a pracovať s archívom dát. Inými slovami, naučíme sa zlúčiť niekoľko súborov alebo adresárov v jeden balíček. Archivácia je dôležitá a často používaná zručnosť napr. pri zálohovaní dát alebo manipulácii s viacerými súbormi naraz (napr. preposielanie po sieti). Následne si ukážeme ako čo najviac zmenšiť veľkosť takého archívu.
Kompresia
Kompresiou (tiež komprimáciou) sa snažíme spracovať dáta tak, aby sa
zmenšila ich veľkosť. Môžeme sa stretnúť s pojmom
kompresní poměr
. Ide o pomer veľkosti skomprimovaného súboru k
pôvodnému súboru. Čím vyšší pomer, tým viac sa komprimovaný súbor
zmenší oproti pôvodnému súboru. V tejto lekcii sa budeme zaoberať hlavne
bezstratovou kompresiou. To znamená, že pri dekompresii sa
súbor či adresár rekonštruuje do pôvodnej veľkosti bez straty dát. V
praxi sa využíva aj stratová kompresia. Používa sa napr. pri kompresii
zvuku či videa, kde si straty dát nemusíme ani všimnúť. Výhodou je
výrazne vyšší pomer kompresie (zmenšenie veľkosti súboru) ako pri
bezstratovej.
Archivácia v grafickom prostredí
Najprv si ukážeme, ako archivovať súbor v grafickom prostredí
(Nautilus). Na tieto účely si najskôr vytvoríme adresár
Soubory/
do adresára Documents/
.
mkdir /home/David/Documents/Soubory
Ďalej budeme potrebovať súbory, ktoré budeme archivovať. Tie môžeme
vytvoriť priamo v Nautiluse alebo pomocou príkazu touch
.
touch index.html style.css script.js
Otvoríme si adresár Soubory/
a vidíme tu naše tri vytvorené
súbory. V grafickom prostredí prebieha archivácia podobne ako na iných
operačných systémoch. Klikneme pravým tlačidlom na požadovaný súbor,
zvolíme možnosť Compress…
a vyberieme druh kompresie.
Archivovať je možné aj viac súborov naraz. Stačí označiť všetky požadované a ďalej pokračovať rovnakým spôsobom. Archivovať je možné samozrejme aj celé adresáre či adresárovú štruktúru.
Dekompresia v Nautile
Pre dekompresiu súboru, pravým tlačidlom klikneme na archív a zvolíme
extrahovat
.
Archivácia v Termináli
Tar
Najpoužívanejší nástroj pre archiváciu súborov v textovom rozhraní
Linuxu je program tar
. Jeho výhodou je, že archivácia sa vykoná
vrátane nastavenia vlastníctva a oprávnenia súborov a adresárov a býva
súčasťou väčšiny distribúcií.
Archivácia programom tar
Najprv v termináli prejdeme do adresára Soubory/
vytvorenom v
predchádzajúcej časti. Príkazom ls
si overíme, že tu máme
tri súbory. Ak nie, vytvoríme ich. Archiváciu vykonáme pomocou príkazu
tar
s prepínačom -cf
(create file). Za ním
nasleduje názov archívu a nakoniec archivovaný súbor alebo adresár. Celý
príkaz teda vyzerá takto:
tar -cf archiv.tar index.html
Súbor s názvom index.html
je teraz archivovaný v súbore
archiv.tar
.
Rovnako ako v Nautile aj v termináli je možné archivovať niekoľko súborov naraz.
tar -cf archiv.tar index.html style.css script.js
Možno samozrejme použiť aj regulárne výrazy na uľahčenie zápisu. Ak
chceme napr. archivovať iba súbory s príponou .html
, príkaz
bude vyzerať nasledovne:
tar -cf archiv.tar *.html
Ak vytvoríme v rovnakom adresári znova súbor s názvom
archiv.tar
, prepíšeme ten pôvodný.
Ignorovanie masky
Pridaním prepínača -p
sa pri následnom rozbalení ignorujú
masky. To znamená, že sa zachovajú pôvodné užívateľské oprávnenia bez
ohľadu na to, kam sa archív rozbaľuje.
tar -cpf archiv.tar *.html
Odporúčam prepínač -f
umiestniť vždy na
koniec radu. V niektorých prípadoch by inak proces nemusel fungovať.
Zobrazenie obsahu archívu
Sú dve varianty, ako zobraziť obsah archívu. Prvá je pomocou prepínača
-tf
.
david@david:~/Documents/Soubory$ tar -tf archiv.tar
index.html
script.js
style.css
Druhý variant je pomocou 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
Odstránenie súboru z archívu
Súbory obsiahnuté v archíve môžeme jednotlivo vymazať. Pokiaľ sa
rozhodneme, že z nášho archívu chceme vyradiť súbor
script.js
, použijeme voľbu --delete -f
.
tar --delete -f archiv.tar script.js
Po výpise obsahu archívu zistíme, že tento súbor v ňom už nie je.
Pridanie súboru do existujúceho archívu
Pokiaľ nastane situácia, že potrebujeme zahrnúť nový súbor do už
existujúceho archívu, využijeme prepínač -rf
. Súbor
script.js
teraz vložíme späť do nášho archívu.
tar -rf archiv.tar script.js
Vypísaním obsahu archívu si opäť overíme, či akcia prebehla úspešne.
Extrahovanie archívu
Pre extrahovanie archívu slúži prepínač -xf
.
tar -xf archiv.tar
Treba dať pozor, kam archív extrahujeme. Ak bude cieľový adresár obsahovať súbory alebo adresáre s rovnakým názvom ako v archíve, extrahovaním sa prepíšu. To naopak môže byť žiaduce, ak obnovujeme dáta zo zálohy.
Ak chceme určiť iný adresár na rozbalenie archívu ako ten, v ktorom sa
nachádzame, pridáme prepínač -C
, potom zadáme relatívnu či
absolútnu cestu.
tar -xf archiv.tar -C /home/David/Desktop
Kompresia programom tar
Program tar obsahuje niekoľko nástrojov na kompresiu. Všetky sú k
nájdeniu v manuáli v sekcii Compression option
.
Najpoužívanejšie nástroje sú gzip
a bzip2
.
Gzip
Kompresia gzip
umožňuje cca o 15% menší pomer kompresie ako
bzip2
. Na druhej strane spotrebuje výrazne menej operačnej
pamäte v priebehu kompresie a je rýchlejšia. Je teda vhodná tam, kde je
potrebná vysoká rýchlosť a nižšie nároky na operačnú pamäť. Archívy
komprimované pomocou gzip
majú väčšinou príponu
.tar.gz
alebo .tgz
.
Kompresiu vykonáme použitím prepínača -z
.
tar -czf archiv.tar.gz index.html style.css script.js
Linux si všeobecne, na rozdiel od Windows, na prípony súborov nepotrpí. Môžeme teoreticky zvoliť akúkoľvek príponu chceme, prípadne nepoužiť žiadnu. Identifikovanie súboru potom ale bude veľmi zložité. Je teda dobré zachovať konvencie.
Dekompresiu gzip archívu docielime zámenou prepínača -c
za
-x
.
tar -xzf archiv.tar.gz
Bzip2
Kompresia pomocou bzip2
je náročnejšia na operačnú pamäť
a doba kompresie je dlhšia ako u gzip
. Pokiaľ toto nie je na
prekážku, výsledný archív bude cca o 15 % menší. Súbor komprimovaný
pomocou bzip2
spoznáme podľa prípony .bz2
.
Kompresiu docielime prepínačom -j
.
tar -cjf archiv.tar.bz2 index.html
Dekompresiu opäť vykonáme prepínačom -x
.
tar -xjf archiv.tar.bz2
Kompresia programom zip
Zip je najpoužívanejší formát archívneho súboru pre kompresiu dát. Na
rozdiel od nástrojov programu tar
, zip
je
multiplatformný. Je vhodný, ak plánujeme preniesť a použiť archív na
Windows alebo MAC a naopak. Archívy zip
nepodporujú informácie o
vlastníctve a oprávnení v štýle Linuxu. Vlastníctvo je vždy nastavené
užívateľovi, ktorý spúšťa príkaz. Pokiaľ však nemáme v pláne
použiť archív na inej platforme, nástrojom gzip
dosiahneme
oveľa lepší pomer kompresie.
Ubuntu štandardne program zips obsahuje. Ak terminál vráti chybu:
bash: /usr/bin/zip: No such file or directory
je potrebné ho najskôr nainštalovať.
sudo apt install zip
Vytvorenie archívu zip
Príkaz pre kompresiu je podobný ako pri tar
, len nie sú
potrebné prepínače.
zip archiv.zip *
Regulárnym výrazom *
sme si uľahčili prácu a
označili všetko čo sa nachádza v danom adresári.
Pokiaľ zabudneme na príponu .zip
, pridá sa k archívu
automaticky.
Zobrazenie obsahu archívu zip
Pre zobrazenie obsahu archívu môžeme využiť 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ý variant je príkaz unzip
s prepínačom -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
Rekurzívna kompresia
Často potrebujeme komprimovať adresár vrátane všetkých podadresárov.
Zatiaľ čo pri tar
toto nemusíme riešiť, pri zip
to docielime prepínačom -r
(recursive). Skúsime takto
archivovať celý adresár Documents/
vrátane podadresára
Soubory/
.
zip -r archiv.zip Documents/
Zobrazením obsahu archívu si overíme úspešnosť operácie.
Zaheslování archívu zip
Ďalšou výhodou tejto archivácie je, že je možné nastaviť heslo. Heslo
nezabráni napr. zmazaniu súboru z archívu, iba bude vyžadované pri
extrahovaní súborov. Heslo nastavíme prepínačom -e
(encript)
pri vytváraní archívu. Presunieme sa späť do adresára
Soubory/
a vytvoríme archív s heslom.
zip -e zaheslovaný_archiv.zip index.html
Po zadaní príkazu nás terminál vyzve na zadanie hesla.
Odstránenie súboru z archívu zip
Rovnako ako pri kompresii tar
aj v tomto prípade môžeme
odstrániť jednotlivé súbory z archívu. Na odstránenie súboru
script.js
z nášho archívu archiv.zip
pridáme
prepínač -d
(delete).
zip -d archiv.zip script.js
Overíme si, že súbor v archíve už nie je.
Pridanie súboru do archívu zip
Pre pridanie nového súboru do existujúceho archívu slúži prepínač
-u
(update).
zip -u archiv.zip script.js
Opäť si overíme výpisom obsahu, že operácia prebehla úspešne.
Oprava poškodeného archívu zip
Môže sa stať, že sa súbory v archíve poškodia. Po pridaní prepínača
-F
(fix) sa program zip
pokúsi archív opraviť a
opravené súbory uložia do nového archívu. Nový archív definujeme
--out opravený_archiv.zip
.
zip -F archiv.zip --out opravený_archiv.zip
Po vypísaní obsahu adresára uvidíme, že vedľa pôvodného archívu sa
vytvoril nový s názvom opravený_archiv.zip
.
Dekompresia archívu zips
Súbory z archívu extrahujeme pomocou príkazu unzip
.
unzip archiv.zip
V prípade zaheslovaného archívu nás terminál vyzve na zadanie hesla.
V ďalšej lekcii sa pozrieme detailnejšie na aplikácie. Vysvetlíme si, ako sa program v Linuxe distribuuje, kde je uložený, ako sa k nemu dostať a ako s ním pracovať.