Jak rozpakować plik .tar.gz w Linux: Kompletny przewodnik z zaawansowanymi wskazówkami
Praca z plikami skompresowanymi to codzienność w każdym środowisku Linux. Wśród najczęściej używanych formatów jest .tar.gz, format dwuetapowy, który łączy tar do archiwizacji i gzip do kompresji. Niezależnie od tego, czy rozpakujesz kod źródłowy oprogramowania, przywrócisz kopie zapasowe, czy wdrożysz pliki konfiguracyjne na serwerze VPS Hosting, umiejętność efektywnego i bezpiecznego obsługiwania archiwów .tar.gz jest fundamentalną umiejętnością Linux.
Ten przewodnik obejmuje wszystko, od podstawowego polecenia ekstrakcji po zaawansowane techniki dla dużych archiwów, wzmacnianie bezpieczeństwa i najlepsze praktyki skryptowania.
Czym jest plik .tar.gz?
Plik .tar.gz — często zwany tarball — jest tworzony w dwóch krokach:
- tar łączy wiele plików i katalogów w jedno archiwum (
.tar) - gzip kompresuje to archiwum, aby zmniejszyć jego rozmiar (
.tar.gzlub.tgz)
Typowe przypadki użycia
- Dystrybucja kodu źródłowego oprogramowania
- Pakowanie plików konfiguracyjnych i kopii zapasowych
- Archiwizacja plików dziennika do długoterminowego przechowywania
- Przesyłanie dużych drzew katalogów między serwerami
Przykładowa nazwa pliku: project-files.tar.gz
Podstawowe polecenie ekstrakcji
Standardowe polecenie do rozpakowania pliku .tar.gz to:
tar -xvzf file.tar.gzRozbicie flag
| Flaga | Znaczenie |
|---|---|
-x | Rozpakuj pliki z archiwum |
-v | Tryb szczegółowy — wyświetla każdy plik podczas rozpakowania |
-z | Dekompresuj za pomocą gzip |
-f | Określa nazwę pliku do operacji |
To jedno polecenie obsługuje zdecydowaną większość codziennych zadań ekstrakcji.
Ekstrakcja do określonego katalogu
Domyślnie tar rozpakuje pliki do bieżącego katalogu roboczego. Aby przekierować dane wyjściowe do określonej lokalizacji, użyj flagi -C:
tar -xvzf file.tar.gz -C /path/to/target-directory> Uwaga: Katalog docelowy musi już istnieć. Utwórz go najpierw za pomocą mkdir -p /path/to/target-directory jeśli jest to konieczne.
To podejście jest szczególnie przydatne w zautomatyzowanych skryptach wdrażania lub podczas organizowania wielu archiwów na serwerze produkcyjnym.
Podgląd zawartości archiwum przed ekstrakcją
Przed rozpakowaniem archiwum — szczególnie z nieznanego źródła — dobrą praktyką jest najpierw sprawdzenie jego zawartości:
tar -tvzf file.tar.gzFlaga -t wyświetla listę wszystkich plików i katalogów wewnątrz archiwum bez rozpakowania czegokolwiek. To pomaga Ci:
- Zrozumieć wewnętrzną strukturę katalogów
- Uniknąć przypadkowego nadpisania istniejących plików
- Wykryć podejrzane lub nieoczekiwane ścieżki
Ekstrakcja określonych plików lub katalogów
Nie zawsze musisz rozpakować całe archiwum. Aby wyciągnąć jeden plik lub folder, określ jego ścieżkę dokładnie tak, jak pojawia się wewnątrz archiwum:
tar -xvzf file.tar.gz path/to/specific-file.txtAby znaleźć dokładną ścieżkę wewnętrzną, uruchom najpierw polecenie --list:
tar -tvzf file.tar.gz | grep filename> Ważne: Użyj ścieżki względnej pokazanej w wykazie archiwum, a nie ścieżki bezwzględnej zaczynającej się od /.
Zagadnienia bezpieczeństwa przy rozpakowywaniu niezaufanych archiwów
Rozpakowanie plików .tar.gz z nieznanych lub niezaufanych źródeł może stwarzać poważne zagrożenia bezpieczeństwa, w tym ataki path traversal, w których złośliwe archiwa nadpisują krytyczne pliki systemowe. Zastosuj te zabezpieczenia:
Zapobiegaj nadpisywaniu katalogów
tar --no-overwrite-dir -xvzf file.tar.gzUsuń wiodące komponenty ścieżki
Flaga --strip-components usuwa wiodące poziomy katalogów z rozpakowanych ścieżek, co neutralizuje próby wstrzyknięcia ścieżki bezwzględnej:
tar --strip-components=1 -xvzf untrusted-archive.tar.gzEkstrakcja do izolowanego katalogu
Zawsze rozpakuj niezaufane archiwa do dedykowanego katalogu piaskownicy i sprawdź zawartość przed przeniesieniem plików do ich ostatecznej lokalizacji:
mkdir /tmp/sandbox && tar -xvzf untrusted-archive.tar.gz -C /tmp/sandboxTe praktyki są szczególnie krytyczne w infrastrukturze współdzielonej. Jeśli zarządzasz wieloma witrynami lub klientami, rozważ użycie środowisk Shared Web Hosting z ścisłymi granicami uprawnień.
Efektywna obsługa dużych archiwów
W przypadku archiwów obejmujących kilka gigabajtów standardowa ekstrakcja może wydawać się czarną skrzynką. Te techniki poprawiają widoczność i wydajność.
Monitoruj postęp za pomocą pv
pv (pipe viewer) wyświetla pasek postępu w czasie rzeczywistym i prędkość transferu:
pv file.tar.gz | tar xzvf -Zainstaluj pv jeśli nie jest jeszcze dostępny:
# Debian/Ubuntu
sudo apt install pv
# CentOS/RHEL/AlmaLinux
sudo dnf install pvWyłącz tryb szczegółowy dla szybszej ekstrakcji
Przy rozpakowywaniu bardzo dużych archiwów flaga -v może spowolnić proces, drukując tysiące nazw plików do terminala. Pomiń ją dla lepszej wydajności:
tar -xzf file.tar.gzUżyj równoległej dekompresji z pigz
W przypadku serwerów wielordzeniowych pigz zastępuje gzip implementacją równoległą i może dramatycznie zmniejszyć czas dekompresji:
tar -I pigz -xf file.tar.gzDekompresja w dwóch oddzielnych krokach
Czasami potrzebujesz bardziej precyzyjnej kontroli — na przykład podczas integracji z potokiem lub sprawdzania pośredniego pliku .tar przed rozpakowaniem. Możesz podzielić proces na dwa polecenia:
# Step 1: Decompress gzip to get a plain .tar archive
gunzip file.tar.gz
# Step 2: Extract the .tar archive
tar -xvf file.tarTo podejście jest przydatne, gdy:
- Chcesz sprawdzić surowy plik
.tarprzed ekstrakcją - Twój potok przetwarza etapy
.tari.gzoddzielnie - Musisz przekazać plik
.tardo innego narzędzia
Utwórz archiwum .tar.gz
Umiejętność tworzenia archiwów jest równie ważna jak ich rozpakowanie. Składnia odzwierciedla ekstrakcję, ale używa -c (create) zamiast -x:
tar -czvf archive-name.tar.gz /path/to/directory/Wyklucz określone pliki lub katalogi
tar -czvf archive.tar.gz /path/to/directory/ --exclude='*.log' --exclude='node_modules'Jest to nieocenione przy tworzeniu czystych pakietów wdrażania lub kopii zapasowych bez niepotrzebnego balastu.
Automatyzacja operacji .tar.gz w skryptach
Na serwerach produkcyjnych — niezależnie od tego, czy prowadzisz Dedicated Server czy zarządzany VPS — automatyzacja operacji na archiwach oszczędza czas i zmniejsza błędy człowieka.
Przykład: Zautomatyzowany skrypt kopii zapasowej
#!/bin/bash
BACKUP_DIR="/var/backups"
SOURCE_DIR="/var/www/html"
DATE=$(date +%Y-%m-%d)
ARCHIVE="$BACKUP_DIR/website-backup-$DATE.tar.gz"
mkdir -p "$BACKUP_DIR"
tar -czf "$ARCHIVE" --exclude='*.tmp' "$SOURCE_DIR"
echo "Backup created: $ARCHIVE"Zaplanuj to za pomocą zadania cron dla w pełni zautomatyzowanych codziennych kopii zapasowych:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Korzystanie z menedżerów archiwów GUI (opcjonalnie)
Jeśli pracujesz w środowisku pulpitu Linux, narzędzia graficzne zapewniają alternatywę typu drag-and-drop:
| Środowisko pulpitu | Menedżer archiwów |
|---|---|
| GNOME | File Roller |
| KDE Plasma | Ark |
| Xfce | Thunar Archive Plugin |
