Jak rozpakować plik Tar w Linuksie: Zaawansowany przewodnik dla zaawansowanych użytkowników
Ekstrahowanie .tar, .tar.gz, .tar.bz2 i innych formatów tarball to umiejętność fundamentalna w administracji systemami Linux, potokach DevOps i zarządzaniu serwerami. Chociaż polecenie tar wydaje się proste na pierwszy rzut oka, doświadczeni administratorzy mogą wykorzystać jego zaawansowane flagi, integracje skryptów i obsługę przypadków brzegowych, aby osiągnąć chirurgiczną precyzję w operacjach archiwów.
Ten kompleksowy przewodnik obejmuje wszystko, od podstawowej dekompresji do warunkowego ekstrahowania, weryfikacji integralności, benchmarkingu i automatyzacji przepływów pracy — wszystko, czego użytkownik zaawansowany potrzebuje, aby opanować tar na Linuxie.
Czym jest plik .tar?
Plik .tar — skrót od Tape Archive — to skonsolidowany format archiwum, który łączy wiele plików i katalogów w jeden plik, zachowując:
- Strukturę katalogów
- Uprawnienia plików
- Metadane własności
- Znaczniki czasu
Domyślnie archiwa .tar nie są kompresowane. Kompresja jest stosowana jako dodatkowa warstwa przy użyciu formatów takich jak .gz, .bz2, .xz lub .zst. Ten modułowy projekt daje administratorom precyzyjną kontrolę nad równowagą między szybkością kompresji a współczynnikiem.
| Format | Rozszerzenie | Narzędzie kompresji |
|---|---|---|
| Bez kompresji | .tar | — |
| Gzip | .tar.gz / .tgz | gzip |
| Bzip2 | .tar.bz2 | bzip2 |
| XZ | .tar.xz | xz |
| Zstandard | .tar.zst | zstd |
Podstawowe polecenia ekstrahowania
1. Ekstrahuj plik .tar (bez kompresji)
tar -xf archive.tar2. Ekstrahuj plik .tar.gz lub .tgz
tar -xzf archive.tar.gz3. Ekstrahuj plik .tar.bz2
tar -xjf archive.tar.bz24. Ekstrahuj plik .tar.xz
tar -xJf archive.tar.xz5. Ekstrahuj plik .tar.zst (Zstandard)
tar --use-compress-program=unzstd -xf archive.tar.zst> Uwaga: Zstandard (.zst) oferuje doskonały stosunek szybkości do kompresji i jest coraz bardziej powszechny w nowoczesnych dystrybucjach Linux i warstwach obrazów kontenerów.
Typowe flagi i ich funkcje
Zrozumienie flag tar jest niezbędne do pisania niezawodnych skryptów i obsługi złożonych scenariuszy ekstrahowania. Poniżej znajduje się tabela odniesienia najważniejszych opcji:
| Flaga | Funkcja |
|---|---|
-x | Ekstrahuj pliki z archiwum |
-f | Określ plik archiwum do użycia |
-v | Wyjście pełne — wyświetla pliki podczas ekstrahowania |
-z | Filtruj przez kompresję gzip |
-j | Filtruj przez kompresję bzip2 |
-J | Filtruj przez kompresję xz |
-C <dir> | Zmień katalog przed ekstrahowaniem |
--strip-components=N | Usuń N wiodących komponentów ścieżki z nazw plików |
--wildcards | Włącz dopasowanie wzorców wieloznacznych podczas ekstrahowania |
--no-same-owner | Nie przywracaj własności pliku (przydatne dla użytkowników spoza root) |
--overwrite | Nadpisz istniejące pliki bez pytania |
--exclude=PATTERN | Wyklucz pliki pasujące do określonego wzorca |
--ignore-zeros | Pomiń bloki wypełnione zerami (przydatne dla uszkodzonych archiwów) |
-t | Wyświetl zawartość archiwum bez ekstrahowania |
Zaawansowane przykłady ekstrahowania
Ekstrahuj do określonego katalogu
Skieruj wyekstrahowaną zawartość do ścieżki docelowej za pomocą flagi -C:
tar -xf archive.tar.gz -C /opt/myapp> Katalog docelowy musi istnieć przed uruchomieniem tego polecenia. W razie potrzeby użyj mkdir -p /opt/myapp.
Spłaszcz strukturę archiwum (usuń folder najwyższego poziomu)
Gdy archiwum zawija wszystko wewnątrz jednego katalogu najwyższego poziomu, użyj --strip-components aby go usunąć:
tar -xf archive.tar.gz --strip-components=1Jest to szczególnie przydatne podczas wdrażania aplikacji bezpośrednio do katalogu docelowego bez pośredniej warstwy folderu.
Ekstrahuj tylko określone pliki
Możesz wyekstrahować poszczególne pliki, określając ich ścieżki, tak jak pojawiają się w archiwum:
tar -xf archive.tar.gz path/to/file1 path/to/file2Ekstrahuj pliki pasujące do wzorca wieloznacznego
Użyj --wildcards do filtrowania ekstrahowania według wzorca:
tar -xf archive.tar.gz --wildcards '*.conf'To ekstrahuje tylko pliki konfiguracyjne .conf z archiwum — idealne do selektywnego przywracania konfiguracji bez dotykania innych danych.
Wyklucz pliki podczas ekstrahowania
Wyklucz określone pliki lub wzorce z ekstrahowania:
tar -xf archive.tar.gz --exclude='*.log'Możesz łączyć wiele flag --exclude aby filtrować kilka wzorców jednocześnie.
Benchmark czasu ekstrahowania
Użyj narzędzia time do pomiaru czasu ekstrahowania — przydatne przy porównywaniu formatów kompresji lub optymalizacji przepływów pracy kopii zapasowych:
time tar -xf archive.tar.gzObsługa przypadków brzegowych
🧱 Radzenie sobie z uszkodzonymi archiwami
Jeśli archiwum jest częściowo uszkodzone — na przykład z powodu przerwane pobierania lub błędu dysku — użyj --ignore-zeros aby pominąć uszkodzone bloki wypełnione zerami i odzyskać jak najwięcej danych:
tar -xzf broken.tar.gz --ignore-zerosTa flaga mówi tar aby kontynuować przetwarzanie nawet po napotkaniu nieoczekiwanego EOF lub bloków zerowych, maksymalizując odzyskiwanie danych.
🔍 Podgląd zawartości archiwum przed ekstrahowaniem
Zawsze sprawdzaj archiwum przed ekstrahowaniem, szczególnie podczas pracy z niezaufanymi źródłami lub w środowiskach produkcyjnych:
tar -tf archive.tar.gzTo wyświetla wszystkie pliki wewnątrz archiwum bez pisania czegokolwiek na dysk.
✅ Sprawdzenie integralności dla archiwów skompresowanych Gzip
Sprawdź, czy archiwum .tar.gz nie jest uszkodzone przed próbą ekstrahowania:
gzip -t archive.tar.gz && echo "Archive integrity OK"Dla archiwów .tar.xz:
xz --test archive.tar.xz && echo "Archive integrity OK"Włączenie sprawdzania integralności do zautomatyzowanych skryptów zapobiega nieudanym wdrożeniom spowodowanym uszkodzonymi plikami kopii zapasowych.
Wskazówki dotyczące skryptów dla administratorów systemów
Integracja tar w skryptach powłoki to jeden z najpotężniejszych sposobów automatyzacji kopii zapasowych, wdrażania i przywracania przepływów pracy na serwerach Linux.
Zautomatyzowany skrypt kopii zapasowej
#!/bin/bash
TARGET_DIR="/var/www"
ARCHIVE="/backups/site-$(date +%F).tar.gz"
tar -czf "$ARCHIVE" -C "$TARGET_DIR" . && echo "Backup saved to $ARCHIVE"Ten skrypt tworzy archiwum skompresowane z datą katalogu głównego sieci Web. Sparuj go z zadaniem cron dla w pełni zautomatyzowanych codziennych kopii zapasowych.
Zautomatyzowany skrypt rozpakowania i wdrożenia
#!/bin/bash
SRC="$1"
DEST="$2"
mkdir -p "$DEST"
tar -xzf "$SRC" -C "$DEST" --strip-components=1Przekaż ścieżkę archiwum i katalog docelowy jako argumenty. Flaga --strip-components=1 zapewnia usunięcie katalogu najwyższego poziomu, umieszczając pliki bezpośrednio w $DEST.
Równoległa ekstrakcja dla dużych archiwów
Na serwerach wielordzeniowych możesz przyspieszyć ekstrakcję archiwów .tar.gz za pomocą pigz (równoległy gzip):
tar -I pigz -xf large-archive.tar.gz -C /destinationJest to szczególnie cenne na hostingu VPS lub
