1. Home
  2. Cloud a servery
  3. Archivace a komprese souborů v Linuxu

Archivace a komprese souborů v Linuxu

Desítky let jsou tu s námi počítače, které produkují stále více údajů. Ze začátku šlo o relativně malý počet souborů s relativně malou velikostí. Na přenášení údajů tehdy stačilo údaje pouze 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í používají dodnes. Z pohledu softwaru se na takové přenášení údajů používal a stále se používá populární nástroj TAR (Tape ARchive), který z množství souborů a složek dokáže vytvořit jeden soubor s koncovkou .tar (archiv).


Jak ale množství údajů přibývalo, bylo potřeba údaje nejen seřadit do archivu, ale také je ještě více zmenšit (stlačit, sbalit, komprimovat), aby se jich na jednu páskovou kazetu vešlo víc. Proto vznikly nástroje jako gzip, bzip2, xz, lzip, lzma, zstd nebo compress. Tyto nástroje dokážou archiv vytvořený pomocí nástroje TAR komprimovat tak, že výsledný soubor má menší velikost. Například archív uložený v souboru archiv.tar s velikostí 1 GB bude mít po kompresi název souboru archiv.tar.gz (použili jsme nástroj gzip) a menší velikost 0,5 GB. Komprimováním pomocí nástroje gzip jsme tedy v tomto příkladu ušetřili až 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 úložiště, ale principy archivace a komprese platí dodnes. Ukážeme si, jak 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 první řadě je potřebné zabezpečit aktuálnost všech balíků. Nainstalujeme tedy všechen updatovaný software pomocí dvou příkazů v jedné dávce:

sudo apt update && sudo apt upgrade

Když systém najde aktualizovatelné balíčky, takto se optá, jestli je chcete začít instalovat:

Do you want to continue? [Y/n]

Stlačíme klávesu y když chceme začít aktualizační proces nebo klávesu n, když aktualizovat nechceme. Následně stlačíme klávesu Enter.

V domovské složce vytvoříme strukturu složek a do nich stáhneme soubory, které budeme archivovat a komprimovat:

mkdir -p ~/archiv/video ~/archiv/audio ~/archiv/obrazky ~/archiv/ostatni
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/obrazek.jpg https://file-examples-com.github.io/uploads/2017/10/file_example_JPG_2500kB.jpg
curl -o ~/archiv/obrazky/obrazek.png https://file-examples-com.github.io/uploads/2017/10/file_example_PNG_3MB.png
curl -o ~/archiv/obrazky/obrazek.svg https://file-examples-com.github.io/uploads/2020/03/file_example_SVG_30kB.svg
curl -o ~/archiv/ostatni/dokument.docx https://file-examples-com.github.io/uploads/2017/02/file-sample_1MB.docx
curl -o ~/archiv/ostatni/tabulka.xlsx https://file-examples-com.github.io/uploads/2017/02/file_example_XLSX_5000.xlsx
curl -o ~/archiv/ostatni/prezentace.pptx https://file-examples-com.github.io/uploads/2017/08/file_example_PPT_1MB.ppt

Teď uložíme celou strukturu složek spolu se soubory ze složky archiv pomocí nástroje GNU TAR do archivu (souboru) s názvem archiv.tar (první řádek) a ověříme, jestli soubor archiv.tar obsahuje doopravdy všechny složky a soubory v nich (druhý řádek). Nakonec ještě necháme vypsat velikost souboru archiv.tar (čtvrtý řádek), abychom ji mohli porovnat s velikostí složky archiv (třetí řádek).

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

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

Vytvořili jsme archiv, porovnali jsme jeho velikost se soubory ve složce, a teď vytvořený archiv rozbalíme do složky archiv-tar (první řádek). Ověříme, jestli po rozbalení získáme stejnou strukturu složek se soubory (druhý a třetí řádek):

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

Po rozbalení archívu do složky archiv jsme zjistili, že složky archiv a archiv-tar jsou stejné strukturou složek se soubory, a také jsou identické velikostí. Celý archivační proces (vytvoření, zobrazení obsahu a rozbalení) tedy proběhl správně.

Komprimujeme pomocí nástroje GNU TAR

Už jsme zmínili, že výhoda archivu spočívá v jednodušší manipulaci při 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řenášení údajů. Vytvořený archiv.tar můžeme komprimovat (zmenšit, stlačit, sbalit, spakovat) různými metodami. Nejpoužívanější jsou gzip, bzip2 a xz.

Vytvoříme archiv, který zkomprimujeme 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 teď 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ý archív (archiv.tar) má největší velikost. Komprimační metody archív zmenšily, 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 je třeba brát do úvahy i čas potřebný na komprimaci. Zpravidla více ušetřeného místa znamená i více času, který je potřebný na vytvoření komprimovaného archívu.

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

Tak jako u nekomprimovaného 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

Stejně tak je možné obsah komprimovaného archívu rozbalit. Oproti nekomprimovanému archívu se však komprimovaný archív může rozbalovat více či méně 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šířený komprimační formát je ZIP a ve stínu jeho úspěchu existují též poměrně oblíbené RAR a 7z. Tyto 3 formáty vytváříme, prohlížíme a rozbalujeme pomocí nástrojů, které běžně nejsou předinstalované. Abychom je tedy mohli začít používat, musíme je nejdřív nainstalovat:

sudo apt install zip rar p7zip-full

Takto se systém optá, jestli vybrané balíčky chcete začít instalovat:

Do you want to continue? [Y/n]

Stlačíme klávesu y když chceme začít aktualizační proces nebo klávesu n, pokud aktualizovat nechceme. Následně stlačíme klávesu Enter.

Zkomprimujeme složku 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 složek spolu 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é archívy 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 sbalit strukturu složek spolu se soubory do jednoho 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: 24 června, 2021

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

Related Articles

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