1. Báza znalostí
  2. Cloud a servery
  3. Archivácia a kompresia súborov v Linuxe

Archivácia a kompresia súborov v Linuxe

Desiatky rokov sú tu s nami počítače, ktoré produkujú stále viac údajov. Zo začiatku išlo o relatívne malý počet súborov s relatívne malou veľkosťou. Na prenášanie údajov vtedy stačilo údaje iba kompaktnejšie zoradiť do archívu. Často sa tak súbory prenášali na páskových kazetách, ktoré sa v modernejšom prevedení používajú dodnes. Z pohľadu softvéru sa na takéto prenášanie údajov používal a stále sa používa populárny nástroj TAR (Tape ARchive), ktorý z množstva súborov a priečinkov dokáže vytvoriť jeden súbor s koncovkou .tar (archív).


Ako však množstvo údajov pribúdalo, bolo potrebné údaje nie len zoradiť do archívu, ale tiež ich ešte viac zmenšiť (stlačiť, zbaliť, spakovať, komprimovať), aby sa ich na jednu páskovú kazetu zmestilo viac. Preto vznikli nástroje ako gzip, bzip2, xz, lzip, lzma, zstd alebo compress. Tieto nástroje dokážu archív vytvorený pomocou nástroja TAR komprimovať tak, že výsledný súbor má menšiu veľkosť. Napríklad archív uložený v súbore archiv.tar s veľkosťou 1 GB bude mať po kompresii názov súboru archiv.tar.gz (použili sme nástroj gzip) a menšiu veľkosť 0,5 GB. Komprimovaním pomocou nástroja gzip sme teda v tomto príklade ušetrili až polovicu miesta.

Archivujeme pomocou nástroja GNU TAR

Dnes sa namiesto páskových kaziet bežne používajú iné offline či online úložiská, ale princípy archivácie a kompresie platia doteraz. Ukážeme si, ako v Ubuntu 20.04 použijeme archivačný nástroj GNU TAR vo verzii 1.30, ktorý je predinštalovaný na väčšine linuxových distribúcií.

V prvom rade je potrebné zabezpečiť aktuálnosť všetkých balíkov. Nainštalujeme teda všetok updatovaný softvér pomocou dvoch príkazov v jednej dávke:

sudo apt update && sudo apt upgrade

Ak systém nájde aktualizovateľné balíčky, takto sa opýta, či ich chcete začať inštalovať:

Do you want to continue? [Y/n]

Stlačíme kláves y ak chceme začať aktualizačný proces alebo kláves n, ak aktualizovať nechceme. Následne stlačíme kláves Enter.

V domovskom priečinku vytvoríme štruktúru priečinkov a do nich stiahneme súbory, ktoré budeme archivovať a komprimovať:

mkdir -p ~/archiv/video ~/archiv/audio ~/archiv/obrazky ~/archiv/ostatne
curl -o ~/archiv/video/video.mp4 https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_1920_18MG.mp4
curl -o ~/archiv/audio/audio.mp3 https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_5MG.mp3
curl -o ~/archiv/obrazky/obrazok.jpg https://file-examples-com.github.io/uploads/2017/10/file_example_JPG_2500kB.jpg
curl -o ~/archiv/obrazky/obrazok.png https://file-examples-com.github.io/uploads/2017/10/file_example_PNG_3MB.png
curl -o ~/archiv/obrazky/obrazok.svg https://file-examples-com.github.io/uploads/2020/03/file_example_SVG_30kB.svg
curl -o ~/archiv/ostatne/dokument.docx https://file-examples-com.github.io/uploads/2017/02/file-sample_1MB.docx
curl -o ~/archiv/ostatne/tabulka.xlsx https://file-examples-com.github.io/uploads/2017/02/file_example_XLSX_5000.xlsx
curl -o ~/archiv/ostatne/prezentacia.pptx https://file-examples-com.github.io/uploads/2017/08/file_example_PPT_1MB.ppt

Teraz uložíme celú štruktúru priečinkov spolu so súbormi z priečinka archiv pomocou nástroja GNU TAR do archívu (súboru) s názvom archiv.tar (prvý riadok) a overíme, či súbor archiv.tar obsahuje naozaj všetky priečinky a súbory v nich (druhý riadok). Nakoniec ešte necháme vypísať veľkosť súboru archiv.tar (štvrtý riadok), aby sme ju mohli porovnať s veľkosťou priečinka archiv (tretí riadok).

tar cf ~/archiv.tar ~/archiv
tar tf ~/archiv.tar
du -s ~/archiv
du -s ~/archiv.tar

Po porovnaní veľkosti priečinka archiv a súboru archiv.tar sme zistili, že sme po archivácii ušetrili zanedbateľne málo miesta. Výhoda však je, že máme celú štruktúru priečinkov so súbormi v jednom súbore (archiv.tar) a môžeme ho tak jednoduchšie kopírovať.

Vytvorili sme archív, porovnali sme jeho veľkosť so súbormi v priečinku, a teraz vytvorený archív rozbalíme do priečinka archiv-tar (prvý riadok). Overíme, či po rozbalení získame rovnakú štruktúru priečinkov so súbormi (druhý a tretí riadok):

tar xf ~/archiv.tar --one-top-level=archiv-tar
du ~/archiv
du ~/archiv-tar

Po rozbalení archívu do priečinku archiv sme zistili, že priečinky archiv a archiv-tar sú rovnaké štruktúrou priečinkov so súbormi, a tiež sú identické veľkosťou. Celý archivačný proces (vytvorenie, zobrazenie obsahu a rozbalenie) teda prebehol správne.

Komprimujeme pomocou nástroja GNU TAR

Už sme spomínali, že vyhoda archívu spočíva v jednoduchšej manipulácii pri prenášaní údajov. K tejto výhode však pomocou komprimácie môžeme pridať aj ďalšie dve výhody: zmenšenie archívu (šetrenie úložného miesta), čo vedie k rýchlejšiemu prenášaniu údajov. Vytvorený archiv.tar môžeme komprimovať (zmenšiť, stlačiť, zbaliť, spakovať) rôznymi metódami. Najpoužívanejšie sú gzip, bzip2 a xz.

Vytvoríme archív, ktorý skomprimujeme metódou gzip (prvý riadok), potom metódou bzip2 (druhý riadok) a nakoniec metódou xz (tretí riadok):

tar cfz ~/archiv.tar.gz ~/archiv
tar cfj ~/archiv.tar.bz2 ~/archiv
tar cfJ ~/archiv.tar.xz ~/archiv

Vytvorené komprimované archívy si teraz porovnáme s nekomprimovaným archívom:

du -s ~/archiv.tar && du -s ~/archiv.tar.bz2 && du -s ~/archiv.tar.gz && du -s ~/archiv.tar.xz

a zistíme, že nekomprimovaný archív (archiv.tar) má najväčšiu veľkosť. Komprimačné metódy archív zmenšili, pričom najmenej úspešná bola metóda bzip2 (archiv.tar.bz2), lepšie to zvládla metóda gzip (archiv.tar.gz) a komprimačným víťazom sa stala metóda xz (archiv.tar.xz). Okrem ušetrenej veľkosť treba brať do úvahy aj čas potrebný na komprimáciu. Spravidla viac ušetreného miesta znamená aj viac času, ktorý je potrebný na vytvorenie komprimovaného archívu.

V praxi sa môže archiv.tar.gz skrátiť na archiv.taz alebo archiv.tgz. V prípade archiv.tar.bz2 ušetríme znaky krátkymi formami archiv.tb2, archiv.tbz, archiv.tbz2 aleob archiv.tz2. No a archiv.tar.xz zase zjednodušíme na archiv.txz.

Tak ako pri nekomprimovanom archíve, aj pri komprimovaných archívoch je možné vypísať obsah archívu:

tar tfz ~/archiv.tar.gz
tar tfj ~/archiv.tar.bz2
tar tfJ ~/archiv.tar.xz

Rovnako je možné obsah komprimovaného archívu rozbaliť. Oproti nekomprimovanému archívu sa však komprimovaný archív môže rozbalovať viac či menej pomalšie:

tar xf ~/archiv.tar.gz --one-top-level=archiv-gzip
tar xf ~/archiv.tar.bz2 --one-top-level=archiv-bzip2
tar xf ~/archiv.tar.xz --one-top-level=archiv-xz

Komprimujeme pomocou nástrojov ZIP, RAR a 7-Zip

Veľmi rozšírený komprimačný formát je ZIP a v tieni jeho úspechu existujú tiež pomerne obľúbené RAR a 7z. Tieto 3 formáty vytvárame, prezeráme a rozbaľujeme pomocou nástrojov, ktoré bežne nie sú predinštalované. Aby sme ich teda mohli začať používať, musíme ich najskôr nainštalovať:

sudo apt install zip rar p7zip-full

Takto sa systém opýta, či ich vybraté balíčky chcete začať inštalovať:

Do you want to continue? [Y/n]

Stlačíme kláves y ak chceme začať aktualizačný proces alebo kláves n, ak aktualizovať nechceme. Následne stlačíme kláves Enter.

Skomprimujeme priečinok archiv do formátov ZIP, RAR a 7z:

zip -r ~/archiv.zip ~/archiv
rar a ~/archiv.rar ~/archiv
7z a ~/archiv.7z ~/archiv

Zobrazíme obsah komprimovaných archívov:

unzip -l ~/archiv.zip
rar l ~/archiv.rar
7z l ~/archiv.7z

Zistili sme, že celá štruktúra priečinkov spolu so súbormi sú v archívoch prítomné, a tak ešte môžeme porovnať, ktorý komprimačný formát ušetrí viac miesta:

du -s ~/archiv.7z && du -s ~/archiv.rar && du -s ~/archiv.zip

Vyhral formát 7z, nasledovaný formátom RAR a v tesnom závese sa drží ZIP.

No a takto komprimované archívy ešte rozbalíme:

unzip ~/archiv.zip -d ~/archiv-zip
rar x ~/archiv.rar ~/archiv-rar/
7z x ~/archiv.7z -oarchiv-7z

Zhrnutie

Ukázali sme, ako v Linuxe zbaliť štruktúru priečinkov spolu so súbormi do jedného archívu pomocou nástroja GNU TAR vo verzii 1.30. Tiež sme archív komprimovali často používanými metódami gzip, bzip2 a xz. Do zoznamu komprimačných nástrojov sme zaradili aj nástroje ZIP, RAR a 7Zip.

Aktualizované 22. januára 2021

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu