Format tar jest popularnym sposobem na archiwizację danych w systemach operacyjnych typu Unix i Linux.
Nazwa „tar” wywodzi się od „Tape ARchive”, ponieważ początkowo narzędzie to służyło do zapisywania danych w sposób sekwencyjny na taśmach magnetycznych. Niekiedy archiwum tar określa się również mianem „tarball”.
Standardowo, tar tworzy archiwum bez kompresji, jednak z wykorzystaniem pewnych segmentów. Istnieje możliwość użycia różnorodnych metod kompresji, aby uzyskać pliki wynikowe o mniejszej objętości. Program tar jest zwykle instalowany domyślnie w większości dystrybucji Linuksa. Format ten jest również obsługiwany przez inne systemy operacyjne, w tym Windows i macOS, przy użyciu odpowiednich narzędzi.
W tym tekście przeanalizujemy kilka typowych zastosowań i przykładów użycia polecenia tar, jak również omówimy dostępne dla niego opcje.
Zacznijmy więc…
Tworzenie archiwum tar
Aby utworzyć proste, nieskompresowane archiwum, należy użyć polecenia tar o następującej składni:
$ tar cvf <nazwa-pliku-tar> <pliki-do-archiwizacji>
W tym zapisie litera „c” oznacza tworzenie, „v” włącza tryb szczegółowy (wyświetla informacje o procesie), a „f” definiuje nazwę tworzonego archiwum tar. Zgodnie z przyjętą konwencją, nazwa pliku tar powinna kończyć się rozszerzeniem .tar. Pliki do zarchiwizowania można podać za pomocą symboli wieloznacznych, pojedynczo lub jako listę nazw plików bądź ścieżek.
Przykładowo, w moim katalogu znajdują się trzy pliki:
$ 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 $
Jeśli chcemy utworzyć archiwum tar zawierające wszystkie te trzy pliki, wykonujemy to w następujący sposób:
$ 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 $
Możemy także wskazać jedynie wybrane pliki do zarchiwizowania, na przykład:
$ 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 $
Tworzenie skompresowanego archiwum (GZ)
Tar umożliwia nie tylko archiwizację, ale również kompresję plików, co pozwala na zaoszczędzenie miejsca na dysku. Popularnym formatem kompresji jest gunzip, zazwyczaj oznaczany rozszerzeniem .gz po .tar lub jako tgz. Aby określić, że pliki mają być skompresowane za pomocą gunzip, używamy opcji „z”. Poniżej znajduje się przykład:
$ 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 $
Można zauważyć, że rozmiary obu archiwów znacząco się różnią, mimo że oba zawierają te same trzy pliki. Jest to wynik zastosowania kompresji za pomocą flagi „z”.
Tworzenie skompresowanego archiwum (BZ2)
Narzędzie tar obsługuje również inne formaty kompresji, w tym bz2 lub bzip2, oznaczane rozszerzeniem tar.bz2 lub czasami tbz2. Ten format może dać mniejszy rozmiar archiwum, ale w zamian za to wymaga więcej mocy obliczeniowej procesora, co oznacza, że proces kompresji i dekompresji może być wolniejszy w porównaniu do archiwum gz.
Przykład:
$ 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 $
Rozpakowywanie wszystkich plików
Archiwa tar, zarówno skompresowane, jak i nieskompresowane, można rozpakować za pomocą opcji „x”. Poniższe przykłady wyjaśniają, jak to działa:
$ 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 $
Podobnie działa to dla skompresowanego archiwum gz:
$ 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 $
Oraz dla archiwum skompresowanego za pomocą bz2:
$ 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 $
Wyświetlanie zawartości archiwum tar
Aby wyświetlić listę plików znajdujących się w archiwum tar, należy użyć opcji „t”, jak w poniższym przykładzie:
$ 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 $
Rozpakowywanie określonych plików
Można rozpakować tylko wybrane pliki z archiwum tar, tar.gz lub tar.bz2, podając ich nazwy w poleceniu:
$ 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 $
Można też podać kilka nazw plików oddzielonych spacjami, aby wypakować je jednocześnie.
$ 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 $
Rozpakowywanie z użyciem symboli wieloznacznych
Aby wyodrębnić jeden lub więcej plików przy pomocy symbolu wieloznacznego, użyj opcji –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 $
Dodawanie plików do archiwum
Nowe pliki mogą być dodawane do istniejącego nieskompresowanego archiwum za pomocą opcji „r” lub –append, podając nowe nazwy plików lub używając symboli wieloznacznych. Należy pamiętać, że działa to tylko w przypadku nieskompresowanych plików .tar, a nie ze skompresowanymi formatami tar.gz lub 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 $
Jak widać, po ponownym wyświetleniu zawartości archive.tar, dwa nowo dodane pliki są uwzględnione.
Usuwanie plików z archiwum
Możliwe jest usunięcie określonych plików z archiwum tar, używając opcji –delete, jak pokazano poniżej. Porównaj listę plików w archiwum przed i po usunięciu plików:
$ 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 $
Podobnie jak w przypadku dodawania, również usuwanie działa tylko z nieskompresowanymi archiwami i nie zadziała dla skompresowanych formatów archiwów.
Tworzenie z weryfikacją
Podczas tworzenia nieskompresowanych plików tar, zawartość archiwum można zweryfikować za pomocą opcji „W”:
$ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $
Nie można użyć tej opcji w połączeniu z flagami kompresji, chociaż utworzony plik tar można później skompresować za pomocą gzip lub innych narzędzi.
Wypakowywanie archiwum tar do folderu
Jeżeli chcesz wyodrębnić zawartość archiwum tar do określonego folderu, a nie do bieżącego katalogu, użyj opcji „-C” wraz ze ścieżką do folderu:
$ 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 $
Używanie opcji diff
Możesz użyć opcji –diff lub „d”, aby porównać pliki w archiwum tar z plikami w systemie plików i wykryć ewentualne zmiany. Poniżej przykład, w którym porównanie zostało wykonane, gdy plik wewnątrz archiwum i na zewnątrz był taki sam. Po aktualizacji pliku, porównanie zostało wykonane ponownie, aby pokazać różnicę w wynikach:
$ 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 $
Wykluczanie plików
Podczas tworzenia archiwów tar może być konieczne wykluczenie pewnych plików. Można to zrobić za pomocą opcji –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 widać na powyższym przykładzie, opcję –exclude można podać wielokrotnie, aby określić wiele nazw plików lub wzorców w ramach warunku AND. Zauważ, że z sześciu plików w katalogu w powyższym przykładzie, tylko dwa pliki spełniły warunek, aby zostać dołączonymi do archive.at.gz.
Sprawdzanie rozmiaru zawartości archiwum tar
Możemy poznać rozmiar zawartości skompresowanego archiwum tar za pomocą następującego polecenia:
$ 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 $
Analogicznie dla archiwum 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 $
Zachowywanie uprawnień
Standardowo, polecenie tar zachowuje uprawnienia do plików i folderów, które archiwizuje. Można jednak jawnie określić, aby je zachowało, używając opcji „-p” lub –preserve-permissions, jak w poniższym przykładzie:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $
Podsumowanie 👨💻
tar jest użytecznym narzędziem w systemach Unix/Linux, służącym głównie do archiwizacji danych i tworzenia kopii zapasowych. Wraz z upływem czasu narzędzie to zostało rozbudowane o wiele opcji. Może być używane do prostych i złożonych zadań, pod warunkiem znajomości jego możliwości. W tym artykule omówiliśmy podstawowe operacje, które można wykonywać za pomocą polecenia tar i pokazaliśmy, jak może ono wspomagać codzienne zadania administracyjne.
Więcej szczegółów można znaleźć na stronie manuala polecenia, wpisując „man tar” lub używając poleceń „tar –help” lub „tar –usage”.
newsblog.pl