Na Unix/Linux platformě je program tar základním archivačním nástrojem a zároveň jedním ze základních programů, nacházejících se v každé distribuci. Tento článek nám pomůže porozumět různým volbám a způsobům využití programu tar a tím zvládnout práci s archivy na této platformě.
V tomto článku si popíšeme na několika příkladech, jak vytvořit tar archivy (s gzip nebo bzip kompresí), jak extrahovat soubor nebo adresář. Dále si ukážeme, jak prohlížet obsah tar archivu, jak ověřit integritu tar archivů, jak najít rozdíly mezi tar archivy atd.
1. Vytvoření archivu pomocí programu tar
Vytvoření dekomprimovaného tar archivu
Toto je základní příkaz k vytvoření archivu.
$ tar cvf jmeno_archivu.tar adresar/
Popis voleb příkazu:
- c – vytvoří nový archiv
- v – při zpracování vypisuje seznam souborů
- f – následuje jméno archiv souboru
Vytvoření tar archivu komprimovaného pomocí programu gzip
V předchozím příkazu použité nastavení cvf neprovede žádnou kompresi archivovaných souborů. Pro použití programu gzip je nutné přidat do nastavení další parametr.
$ tar cvzf jmeno_archivu.tar.gz adresar/
Popis voleb příkazu:
- z – při archivování použij gzip
Poznámka: .tgz je totéž jako .tar.gz
Vytvoření tar archivu komprimovaného pomocí programu bzip
Pro vytvoření bzip2 archivu postupujte následovně.
$ tar cvfj jmeno_archivu.tar.bz2 adresar/
Popis voleb příkazu:
- j – při archivování použij gzip
gzip x bzip2: bzip2 komprimuje a dekomprimuje soubory delší dobu než gzip. Velikost souborů archivovaných bzip2 je menší než při použití gzip.
Poznámka: .tbz a .tb2 je totéž jako .tar.bz2
2. Extrahování archivu pomocí programu tar
Rozbalení *.tar souboru
Pro rozbalení tar souboru použijeme nastavení x, jak je ukázáno níže.
$ tar xvf jmeno_archivu.tar
Popis nastavení příkazu:
- x – rozbalí (extrahuje) soubory z archivu
Rozbalení gzipovaného tar archivu (*.tar.gz)
Pro rozbalení tar archivu, který je komprimovaný pomocí gzip, použijeme následující příkaz.
$ tar xvfz jmeno_archivu.tar.gz
Rozbalení bzipovaného tar archivu (*.tar.bz2)
Pro rozbalení tar archivu, který je komprimovaný pomocí bzip2, použijeme následující příkaz.
$ tar xvfj jmeno_archivu.tar.bz2
3. Výpis archivu pomocí programu tar
Zobrazení obsahu tar archivu bez jeho rozbalování
Pomocí tar příkazu si můžeme zobrazit obsah *.tar souboru, aniž bychom provedli jeho rozbalení.
$ tar tvf jmeno_archivu.tar
Zobrazení obsahu *.tar.gz archivu bez jeho rozbalení
Níže je příklad, jak zobrazit obsah *.tar.gz souboru bez jeho rozbalení.
$ tar tvfz jmeno_archivu.tar.gz
Zobrazení obsahu *.tar.bz2 archivu bez jeho rozbalení
Níže je příklad, jak zobrazit obsah *.tar.bz2 souboru bez jeho rozbalení.
$ tar tvfj jmeno_archivu.tar.bz2
4. Zobrazení obsahu archivu v příkazu less
Pokud je počet archivovaných souborů veliký, je možné nasměrovat výstup zobrazovacího příkazu do programu less.
5. Extrahování jediného souboru z tar, tar.gz a tar.bz2 archivu
Pro extrahování určitého souboru z tar archivu, je nutné určit jméno souboru na konci rozbalovacího příkazu, jak je ukázáno níže.
Následující příkaz extrahuje pouze určitý soubor z velkého tar archivu.
$ tar xvf jmeno_archivu.tar /cesta/k/souboru/jmeno
Totéž lze použít i v případě archivů kompresovaných pomocí gzip a bzip2.
$ tar xvfz jmeno_archivu.tar.gz /cesta/k/souboru/jmeno $ tar xvfj jmeno_archivu.tar.bz2 /cesta/k/souboru/jmeno
6. Extrahování jediného adresáře z tar, tar.gz a tar.bz2 archivu
Pro extrahování samotného adresáře (společně s jeho podadresáři a soubory) z velikého tar archivu, je nutné určit jméno tohoto adresáře na konci rozbalovacího příkazu, jak je ukázáno níže.
Následující příkaz extrahuje pouze určitý adresář.
$ tar xvf jmeno_archivu.tar /cesta/k/adresari
Pro extrahování více adresářů vypadá příkaz následovně.
$ tar xvf jmeno_archivu.tar /cesta/k/adresari1 /cesta/k/adresari2
Totéž lze použít i u archivů kompresovaných pomocí gzip a bzip2.
$ tar xvfz jmeno_archivu.tar.gz /cesta/k/adresari $ tar xvfj jmeno_archivu.tar.bz2 /cesta/k/adresari
7. Extrahování skupiny souborů z tar, tar.gz a tar.bz2 archivu pomocí regulárního výrazu
Můžeme použít regulární výraz pro extrahování souborů, které vyhovují určité šabloně.
V následujícím příkazu, budou extrahovány soubory s koncovkou py.
$ tar xvf jmeno_archivu.tar --wildcards '*.py'
Popis voleb příkazu:
- -wildcards *.py – soubory s příponou py
8. Přidání souboru nebo adresáře do existujícího archivu
Do existujícího archivu můžeme přidat další soubory nebo adresáře. Pro přidání dalšího souboru do existujícího *.tar archivu slouží následující příkaz.
$ tar rvf jmeno_archivu.tar novy_soubor
Totéž v případě nového adresáře.
$ tar rvf jmeno_archivu.tar /novy_adresar
Poznámka: Není možné přidat soubor nebo adresář do archivu, který je kompresovaný pomocí gzip nebo bzip2.
9. Ověření dostupnosti souborů v tar
Jako součást vytváření tar souboru můžeme přiřadit ověření archivovaných souborů, a to přidáním volby W, jak je ukázáno níže.
$ tar cvfW jmeno_souboru.tar /adresar
Pokud plánujeme odebrání adresáře/souboru z archivního souboru nebo z filesystému, měli bychom chtít ověřit archivní soubor před provedením požadavku, jak je ukázáno níže.
$ tar tvfW jmeno_archivu.tar Verify 1/file1 1/file1: Mod time differs 1/file1: Size differs Verify 1/file2 Verify 1/file3
Pokud výstup začíná slovem Verify a nejsou zde žádné rozdíly, je soubor/adresář OK. Pokud ne, měli bychom hledat řešení.
Poznámka: Pro soubory kompresované pomocí gzip nebo bzip2 není možné provést ověřování.
Hledání rozdílů mezi archivem a filesystémem lze provádět i pro komprimované archivy. Následující příklady ukáží stejný výstup jako příklad výše, kromě řádek slovem Verify.
Vyhledání rozdílů mezi archivem komprimovaným pomocí gzip a filesystémem.
$ tar dfz jmeno_souboru.tgz
Vyhledání rozdílů mezi archivem komprimovaným pomocí bzip2 a filesystémem.
$ tar dfj jmeno_souboru.tar.bz2
10. Odhad velikost tar archivu
Následující příkaz odhadne velikost tar souboru (v kilobajtech), před tím, než soubor vytvoříme.
$ tar -cf - /adresar/k/archivaci/ | wc -c 22778
Následující příkaz odhadne velikost komprimovaného tar souboru (v kilobajtech), před jeho vytvořením za použití gzip a bzip2.
$ tar -czf - /adresar/k/archivaci/ | wc -c 868 $ tar -cjf - /adresar/k/archivaci/ | wc -c 543Michal Šika