1. Home
  2. Cloud a servery
  3. Nástroje
  4. Archivace a komprese souborů v Linuxu

Archivace a komprese souborů v Linuxu

Desítky roků jsou tu s námi počítače, které prodkují stále více údajů. Ze začátku šlo o relativně malý počet souborů s malou velikostí. Na přenášení údajů tedy stačilo údaje jen kompaktněji seřadit do archivu. Často se tak soubory přenášely na páskových kazetách, které se v modernějším provedení využívají dodnes. Z pohledu softwaru se na takovéto přenášení údajů používal a stále se pužívá populární nástroj TAR (Tape ARchive), který z množství souborů a adresářů dokáže vytvořit soubor s koncovkou .tar (archiv).

Jak však počet údajů přibýval, bylo potřebné údaje nejen seřadit do archivu, ale též je ještě více zmenšit (stlačit, zabalit, zabalíčkovat, komprimovat), aby se jich na jednu páskovou kazetu vešlo více. Proto vznikli nástroje jako gzip, bzip2, xz, lzip, lzma, zstd nebo compress. Tyto nástroje dokáží archiv vytvořený pomocí nástroje TAR komprimovat tak, že výsledný soubor má menší velikost. Například archiv uložený v souboru archiv.tar s velikostí 1 GB bude mít po kompresi název archiv.tar.gz (použitý nástroj je gzip) a menší velikost 0,5 GB. Komprimováním pomocí nástroje gzip jsme v tomto případě ušetřili polovinu místa.

Archivujeme pomocí nástroje GNU TAR

Dnes se namísto páskových kazet běžně používají jiné offline či online uložiště, ale principy archivace a komprese platí dodnes. Ukážeme si, jako v Ubuntu 20.04 použijeme archivační nástroj GNU TAR ve verzi 1.30, který je předinstalovaný na většině linuxových distribucí.

V prvé řadě je potřebné zabezpečit aktuálnost větších balíčků. Nainstalujeme tedy updatovaný software s pomocí dvou příkazů v jedné dávce.

sudo apt update && sudo apt upgrade

Jakmile systém najde aktualizované balíčky, dotáže se, zda si je přejeme nainstalovat:

Do you want to continue? [Y/n]

Stiskem klávesy y potvrdíme, že chceme začít proces aktualizace nebo klávesou n, pokud aktualizovat nechceme. Následně potvrdíme klávesou Enter.

V domovském adresáři vytvoříme strukturu adresářů a do nich stáhneme soubory, které budeme archivovat a komprimovat:

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

Nyní uložíme celou strukturu adresářů spolu se soubory z adresáře archiv pomocí nástroje GNU TAR do archivu (souboru) s názvem archiv.tar (první řádek) a ověříme, zda soubor archiv.tar obsahuje opravdu všechny adresáře a soubory v nich (druhý řádek)- Nakonec necháme ještě vypsat velikost adresáře archiv.tar (čtvrtý řádek), abychom ji mohli poté porovnat s velikostí archiv (třetí řádek).

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

Po porovnání velikosti adresáře archiv a souboru archiv.tar jsme zjistili, že po archivaci jsme ušetřili jen zanedbatelně málo místa. Výhodou však je, že máme celou strukturu adresářů se soubory v jednom souboru (archiv.tar) a můžeme ho tak jednoduše kopírovat.

Vytvořili jsme archiv, porovnali jsme jeho velikost se soubory v adresáři, a nyní vytvořený archiv rozbalíme do adresáře archiv-tar (první řádek). Ověříme, že po rozbalení získáme stejnou strukturu adresářů se soubory (třetí a čtvrtý řádek):

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

Po rozbalení archivu do adresáře archiv jsme zjistili, že sme zjistili, že adresáře archiv a archiv-tar mají shodnou strukturu adresářů a souborů a jsou velikostí identické. Celý archivační proces (vytvoření, zobrazení obsahu a rozbalení) teda proběhl správně.

Komprimujeme pomocí nástroje GNU TAR

Už jsme si říkali, že výhoda archivu je v jednodušší manipulaci přenášení údajů. K této výhodě však pomocí komprimace můžeme přidat i další dvě výhody: zmenšení archivu (šetření úložného místa), což vede k rychlejšímu přenosu souborů. Vytvořený archiv.tar můžeme komprimovat (zmenšit, sbalit, zabalíčkovat) různými metodami. Nejpoužívanější jsou gzip, bzip2 a xz.

Vytvoříme archiv, který skomprimujeme metodou gzip (první řádek), potom metodou bzip2 (druhý řádek) a nakonec metodou xz (třetí řádek):

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

Vytvořené komprimované archivy si nyní porovnáme s nekomprimovaným archivem:

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

a zjistíme, že nekomprimovaný archiv (archiv.tar) má nejvštší velikost. Komprimační metody archiv zmenšili, přičemž nejméně úspěšná byla metoda bzip2 (archiv.tar.bz2), lépe to zvládla metoda gzip (archiv.tar.gz) a komprimačním vítězem se stala metoda xz (archiv.tar.xz). Kromě ušetřené velikosti bude třeba brát do úvahy i čas potřebný ke komprimaciZpravidla více ušetřeného místra znamená i více času, který je potřebný na vytvoření komprimovaného archivu.

V praxi se může archiv.tar.gz zkrátit na archiv.taz anebo archiv.tgz. V případě archiv.tar.bz2 ušetříme znaky krátkými formami archiv.tb2, archiv.tbz, archiv.tbz2 anebo archiv.tz2. No a archiv.tar.xz zase zjednodušíme na archiv.txz.

Tak jako u nekomprimovaném archívu, i u komprimovaných archivů je možné vypsat obsah archivu:

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

Také je možné obsah komprimovaného archivu rozbalit. Oproti nekomprimovanému archivu se však může komprimovaný archiv rozbalovat pomaleji:

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 pomocí nástrojů ZIP, RAR a 7-Zip

Velmi rozšírený komprimační formát je ZIP a ve stínu jeho úspěchu existují další poměrně oblíbené RAR a 7z. Tyto 3 formáty vytváříme, zobrazujeme a rozbalujeme pomocí nástrojů, které nejsou běžně předinstalované. Aby jsme je mohli začít použávat, musíme je instalovat:

sudo apt install zip rar p7zip-full

Systém se zeptá, zda si vybrané balíčky přejeme instalovat:

Do you want to continue? [Y/n]

Stiskem klávesy y potvrdíme, že chceme začít proces aktualizace nebo klávesou n, pokud aktualizovat nechceme. Následně potvrdíme klávesou Enter.

Zkomprimujeme adresář archiv do formátů ZIP, RAR a 7z:

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

Zobrazíme obsah komprimovaných archivů:

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

zjistili jsme, že celá struktura adresářů se soubory jsou v archivech přítomné, a tak ještě můžeme porovnat, který komprimační formát ušetří více místa:

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

Vyhrál formát 7z, následovaný formátem RAR a v těsném závěsu se drží ZIP.

No a takto komprimované archivy ještě rozbalíme:

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

Shrnutí

Ukázali jsme, jak v Linuxu zabalit strukturu adresářů spolu se soubory do jediného archivu pomocí nástroje GNU TAR ve verzi 1.30. Též jsme archiv komprimovali často používanými metodami gzip, bzip2 a xz. Do seznamu komprimačních nástrojů jsme zařadili i nástroje ZIP, RAR a 7Zip.

Aktualizováno: 21 července, 2022

Byl tento článek užitečný?

Related Articles

Zákaznická podpora
24 hodin denně, 7 dní v týdnu
KONTAKTOVAT PODPORU