tar je jedním z oblíbených formátů archivace souborů dostupných v systémech založených na Unixu a Linuxu.
Samotný název je odvozen od Tape ARchive, protože byl vyvinut pro zápis sekvenčních dat na pásková zařízení. Někdy se také nazývá tarball.
Ve výchozím nastavení tar archivuje pouze soubory bez komprese, ale s použitím některých částí. Pro získání komprimovaného výstupu můžeme použít různé kompresní techniky. Nástroj tar je obvykle standardně součástí většiny distribucí Linuxu a samotný formát je podporován v jiných operačních systémech, včetně Windows a macOS, prostřednictvím různých nástrojů a utilit.
V tomto článku probereme některé běžné příklady a použití příkazu tar a jeho podporovaných příznaků.
Pojďme tedy začít…
Table of Contents
Vytvořit archiv tar
Chcete-li vytvořit jednoduchý nekomprimovaný archiv, syntaxe příkazu tar je:
$ tar cvf <tar-file-name> <files-to-archive>
Zde příznaky c znamenají vytvoření, v pro podrobný výstup a f pro specifikaci názvu souboru archivu tar. Podle konvence zadejte název souboru tar s příponou .tar. Soubory k archivaci lze zadat pomocí zástupných znaků nebo jako jeden nebo více názvů/cest k souborům.
Jako příklad mám ve svém adresáři tři soubory:
$ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
A chci vytvořit archiv tar obsahující všechny tři soubory, lze to provést takto:
$ tar cvf archive.tar * file1.txt file2.txt file3.txt $ ls -l archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar $
Mohu také určit pouze konkrétní soubory k archivaci, například:
$ tar cvf archive1.tar file1.txt file2.txt file1.txt file2.txt $ ls -l archive1.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar $
Vytvořit komprimovaný archiv (GZ)
tar umožňuje nejen archivaci souborů, ale také jejich komprimaci pro úsporu místa. Jedním z populárních kompresních formátů je gunzip, obvykle reprezentovaný příponou .gz za .tar nebo jako tgz. Můžeme použít příznak z k určení, že potřebujeme soubory komprimovat pomocí gunzip. Zde je příklad:
$ tar cvzf archive.tar.gz file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $
Můžete pozorovat, že velikost obou archivních souborů je podstatně odlišná, i když oba obsahují stejné tři soubory. To je způsobeno použitím komprese pomocí příznaku z.
Vytvořit komprimovaný archiv (BZ2)
tar podporuje několik dalších kompresních formátů. Jedním z nich je bz2 nebo bzip2, který je reprezentován příponou tar.bz2 nebo někdy jako tbz2. Může vám to poskytnout menší velikost archivu, ale zase spotřebovává více CPU, takže proces komprese/dekomprese může být pomalejší než archiv gz.
Příklad:
$ tar cvjf archive.tar.bz2 file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ file archive.tar* archive.tar: POSIX tar archive (GNU) archive.tar.bz2: bzip2 compressed data, block size = 900k archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $
Rozbalit všechny soubory
Archiv tar (ať už komprimovaný nebo nekomprimovaný) lze extrahovat jednoduše pomocí volby x. Níže uvedené příklady objasní jeho použití:
$ tar xvf archive.tar file1.txt file2.txt file3.txt $ ls -l total 24 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Toto funguje pro komprimovaný archiv gz jako:
$ tar xvf archive.tar.gz file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Nebo dokonce pro komprimovaný archiv bz2 jako:
$ tar xvf archive.tar.bz2 file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Seznam obsahu tar
Chcete-li zobrazit obsah archivu tar, můžete použít příznak t, jak je uvedeno níže:
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $
Untar Specific Files
Z archivu tar nebo tar.gz nebo tar.bz2 lze extrahovat pouze jeden soubor zadáním názvu souboru jako:
$ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt $
Podobně můžete zadat více názvů souborů oddělených mezerou a extrahovat je najednou.
$ tar xvf archive.tar.bz2 file1.txt file3.txt file1.txt file3.txt $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Untar pomocí zástupných znaků
Chcete-li extrahovat jeden nebo více souborů pomocí zástupného znaku PATTERN, použijte příznak –wildcards:
$ tar xvf archive.tar.bz2 --wildcards "file*" file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Přidat soubory do archivu
Nové soubory lze přidat/přidat k existujícím nekomprimovaným tarballům pomocí příznaku r nebo –append s novými názvy souborů nebo vzorem zástupných znaků (pamatujte, že to funguje pouze s nekomprimovanými soubory .tar a nikoli s komprimovanými formáty tar.gz nebo tar.bz2):
$ tar rvf archive.tar file-new* file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $
Můžete pozorovat, že výpis obsahu archive.tar opět ukazuje dva nově přidané soubory.
Odstraňte soubory z archivu
Odebrání konkrétních souborů z archivu tar je možné pomocí příznaku –delete, jak je znázorněno níže (srovnejte výpis tar před a po odstranění souborů):
$ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ tar --delete -f archive.tar file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $
Opět to funguje pouze pro nekomprimované tarbally a selže u komprimovaných archivních formátů.
Vytvořte pomocí Verify
Při vytváření nekomprimovaných souborů tar můžete ověřit obsah archivu pomocí W flag jako:
$ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $
Toto nelze použít s příznaky komprese, i když můžete vytvořený soubor tar komprimovat později pomocí gzip nebo jiných nástrojů.
Extrahujte tar do složky
Pokud chcete extrahovat obsah tarballu do konkrétní složky místo aktuálního adresáře, použijte příznak -C s cestou k adresáři, jak je uvedeno níže:
$ tar xvf archive.tar -C new-directory/ file1.txt file2.txt file3.txt file2.txt file4.txt $ ls -l new-directory/ total 16 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt -rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt $
Použít příznak rozdílu
K nalezení jakýchkoli změn mezi soubory v archivu tar a soubory v souborovém systému můžete použít příznak –diff nebo d. Zde je příklad, který spustí rozdíl jednou, když byl soubor uvnitř taru a vnějšku stejný. Po aktualizaci souboru byl soubor spuštěn znovu, aby se ukázal rozdíl ve výstupu.
$ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: Mod time differs file4.txt: Size differs $
Vyloučit soubory
Při vytváření archivů tar může být požadavkem vyloučení konkrétních souborů. Toho lze dosáhnout pomocí příznaku –exclude.
$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/ dir/ dir/file1.txt dir/file3.txt $ ls -l dir total 24 -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/ -rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt -rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt $
Jak si můžete všimnout z výše uvedeného výstupu, můžeme zadat příznak –exclude vícekrát, abychom specifikovali více názvů souborů nebo vzorů v podmínce AND. Všimněte si, že ze šesti souborů v adresáři ve výše uvedeném příkladu pouze dva soubory splnily podmínku pro zahrnutí do archive.at.gz.
Zobrazit velikost obsahu tar
Velikost obsahu komprimovaného archivu tar můžeme získat pomocí následujícího příkazu:
$ tar tvf archive.tar.gz -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xzf archive.tar.gz --to-stdout|wc -c 56 $
Podobně pro archiv bz2:
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xjf archive.tar.bz2 --to-stdout|wc -c 56 $
Zachovat oprávnění
Ve výchozím nastavení zachovává příkaz tar oprávnění souborů a adresářů, které archivuje, i když totéž můžete explicitně zadat pomocí parametru -p nebo –preserve-permissions, jak je uvedeno níže:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $
Shrnutí 👨💻
tar je užitečný nástroj na systémech Unix/Linux po dlouhou dobu a byl primárně používán v úlohách archivace a zálohování. Nástroj se postupem času vyvíjel s mnoha možnostmi. Pokud znáte funkce, které nabízí, lze jej použít pro jednoduché až složité úkoly. Tento článek popisuje některé základní operace, které můžete provádět s příkazem tar, a ukazuje, jak vám může pomoci při každodenních úlohách správy systému.
Chcete-li získat další podrobnosti, podívejte se na jeho manuálovou stránku man tar nebo použijte příkaz tar –help nebo tar –usage.