Wie man .tar.gz-Dateien über die Linux-Befehlszeile entpackt
Eine .tar.gz-Datei ist ein komprimiertes Archiv, das durch die Kombination zweier verschiedener Operationen erstellt wird: tar (Tape Archive), das mehrere Dateien und Verzeichnisse in einem einzigen Archiv bündelt, und gzip, das dieses Archiv komprimiert, um seine Größe zu reduzieren. Das Ergebnis ist ein portables, platzsparendes Paketformat, das der De-facto-Standard für die Verteilung von Software, Konfigurationspaketen und System-Backups in nahezu jeder Linux- und Unix-ähnlichen Umgebung ist.
Der kanonische Befehl zum Entpacken eines .tar.gz-Archivs ist `tar -xzvf archive-name.tar.gz`. Zu verstehen, was jedes Flag bewirkt – und wann man von diesem Standard abweichen sollte – ist das, was einen kompetenten Sysadmin von jemandem unterscheidet, der blind Befehle aus dem Internet kopiert.
Das .tar.gz-Format verstehen
Bevor Sie einen Befehl ausführen, ist es hilfreich zu verstehen, womit Sie es eigentlich zu tun haben. Das `.tar.gz`-Format (auch als `.tgz` geschrieben) ist ein zweistufiger Prozess:
- `tar` sammelt Dateien, bewahrt Verzeichnisstruktur, Berechtigungen, Eigentümerschaft und symbolische Links in einer einzigen flachen Datei.
- `gzip` komprimiert diese flache Datei mit dem DEFLATE-Algorithmus und erreicht typischerweise eine Größenreduzierung von 60–70 % bei textlastigen Inhalten.
Diese zweistufige Architektur ist der Grund, warum die Flags `-z` (gzip) und `-x` (Entpacken) beide erforderlich sind. Kein einzelnes Tool erledigt die gesamte Aufgabe allein. Auf modernen Linux-Systemen ist `tar` intelligent genug, um den Komprimierungstyp automatisch über `–auto-compress` oder einfach durch Lesen der Magic Bytes der Datei zu erkennen, aber die explizite Angabe von Flags ist in Skripten und Automatisierungs-Pipelines immer die sicherere Praxis.
Kernsyntax und Flag-Referenz
“`bash
tar -xzvf archive-name.tar.gz
“`
| Flag | Lange Form | Funktion |
|---|
| —— | ———– | ———- |
|---|
| `-x` | `–extract` | Dateien aus dem Archiv entpacken |
|---|
| `-z` | `–gzip` | Das Archiv durch gzip-Dekomprimierung filtern |
|---|
| `-v` | `–verbose` | Jeden Dateinamen bei der Verarbeitung ausgeben |
|---|
| `-f` | `–file=ARCHIVE` | Den Archivdateinamen angeben (muss unmittelbar vor dem Dateinamen stehen) |
|---|
| `-C` | `–directory=DIR` | In ein bestimmtes Zielverzeichnis entpacken |
|---|
| `-t` | `–list` | Archivinhalt auflisten ohne zu entpacken |
|---|
| `-p` | `–preserve-permissions` | Originale Dateiberechtigungen exakt wiederherstellen |
|---|
| `–strip-components=N` | — | N führende Pfadkomponenten aus Dateinamen entfernen |
|---|
Wichtiges Detail: Das `-f`-Flag muss immer das letzte Flag vor dem Dateinamen sein. `tar -xvzf` und `tar -xzvf` zu schreiben ist beides gültig, aber `tar -fxzv archive.tar.gz` schlägt fehl, weil `-f` erwartet, dass das unmittelbar nächste Argument der Archivpfad ist.
Schritt-für-Schritt-Anleitung zum Entpacken
1. Ein Terminal öffnen
Bei den meisten Desktop-Linux-Distributionen drücken Sie `Ctrl + Alt + T`. Auf einem headless Server, auf den über SSH zugegriffen wird, befinden Sie sich bereits in einer Terminal-Sitzung.
2. Ihr Archiv finden
“`bash
ls -lh /path/to/directory
“`
Bestätigen Sie, dass die Datei vorhanden ist, und notieren Sie ihre Größe. Das `-h`-Flag gibt Größen in menschenlesbarem Format aus (KB, MB, GB).
3. An Ort und Stelle entpacken
Navigieren Sie zu dem Verzeichnis, das das Archiv enthält, und entpacken Sie es dann:
“`bash
cd /path/to/directory
tar -xzvf archive-name.tar.gz
“`
Die entpackten Dateien erscheinen im aktuellen Arbeitsverzeichnis, typischerweise in einem Unterverzeichnis, das die interne Struktur des Archivs widerspiegelt.
4. In ein bestimmtes Verzeichnis entpacken
Verwenden Sie das `-C`-Flag, um die Ausgabe in einen beliebigen Zielpfad umzuleiten. Wenn das Ziel nicht existiert, erstellen Sie es zuerst:
“`bash
mkdir -p /opt/myapp
tar -xzvf archive-name.tar.gz -C /opt/myapp
“`
Das `-p`-Flag bei `mkdir` verhindert Fehler, wenn das Verzeichnis bereits existiert – eine gute Gewohnheit in Skripten.
Beispiel – Bereitstellung eines Webanwendungsarchivs:
“`bash
mkdir -p ~/deployments/webapp-v2
tar -xzvf webapp-v2.tar.gz -C ~/deployments/webapp-v2
“`
5. Ohne ausführliche Ausgabe entpacken
In automatisierten Skripten, Cron-Jobs oder CI/CD-Pipelines erzeugt die ausführliche Ausgabe Rauschen in Protokollen. Lassen Sie das `-v`-Flag weg:
“`bash
tar -xzf archive-name.tar.gz -C /opt/myapp
“`
Dies ist die bevorzugte Form in der Produktionsautomatisierung. Der ausführliche Modus ist interaktiv nützlich, wenn Sie bestätigen müssen, welche Dateien geschrieben werden.
Archivinhalt auflisten ohne zu entpacken
Bevor Sie ein unbekanntes Archiv entpacken – insbesondere eines, das von einer externen Quelle heruntergeladen wurde – überprüfen Sie immer zuerst seinen Inhalt. Einige Archive enthalten Dateien mit absoluten Pfaden oder ohne Verzeichnis auf oberster Ebene, was Dateien unerwartet über Ihr Dateisystem verteilen kann.
“`bash
tar -tzvf archive-name.tar.gz
“`
Wenn die Ausgabe Pfade zeigt, die mit `/` oder `..` beginnen, entpacken Sie mit Vorsicht oder verwenden Sie `–strip-components`, um die Pfade zu bereinigen.
Um nach einem Wrapper-Verzeichnis auf oberster Ebene zu suchen:
“`bash
tar -tzf archive-name.tar.gz | head -20
“`
Wenn alle Pfade ein gemeinsames Präfix teilen (z. B. `myapp-1.0/`), ist das Entpacken sauber. Wenn nicht, erstellen Sie ein dediziertes Verzeichnis und entpacken Sie mit `-C` hinein.
Umgang mit Strip-Komponenten
Ein häufiges Szenario in der Praxis: Sie laden einen GitHub-Quell-Tarball herunter, der alles in `project-main/` einschließt, aber Sie möchten den Inhalt direkt in `/opt/project/` ohne diese zusätzliche Verschachtelungsebene.
“`bash
tar -xzvf project-main.tar.gz -C /opt/project –strip-components=1
“`
`–strip-components=1` entfernt das erste Pfadsegment von jeder entpackten Datei und „entpackt” damit effektiv das Verzeichnis auf oberster Ebene. Dies wird häufig in Deployment-Skripten und Dockerfiles verwendet.
Eine einzelne Datei oder ein Verzeichnis aus einem Archiv entpacken
Sie müssen nicht immer alles entpacken. Um eine bestimmte Datei zu extrahieren:
“`bash
tar -xzvf archive-name.tar.gz path/to/specific-file.conf
“`
Um ein bestimmtes Verzeichnis und seinen gesamten Inhalt zu entpacken:
“`bash
tar -xzvf archive-name.tar.gz path/to/specific-directory/
“`
Der Pfad muss genau dem entsprechen, was `tar -tzf` meldet. Diese Technik ist unschätzbar wertvoll, wenn eine einzelne Konfigurationsdatei aus einem großen Backup-Archiv wiederhergestellt werden soll, ohne Gigabytes an Daten zu entpacken.
.tar-Dateien ohne gzip-Komprimierung entpacken
Eine einfache `.tar`-Datei hat keine Komprimierungsschicht. Entfernen Sie das `-z`-Flag vollständig:
“`bash
tar -xvf archive-name.tar
“`
Vergleich: .tar.gz vs. andere gängige Archivformate
| Format | Erweiterung | Komprimierungsalgorithmus | Komprimierungsverhältnis | Geschwindigkeit | Tar erforderlich |
|---|
| ——– | ———– | ———————– | ——————- | ——- | ————– |
|---|
| Gzip-Tarball | `.tar.gz` / `.tgz` | DEFLATE (gzip) | Mittel | Schnell | Ja |
|---|
| Bzip2-Tarball | `.tar.bz2` | Burrows-Wheeler (bzip2) | Hoch | Langsam | Ja |
|---|
| XZ-Tarball | `.tar.xz` | LZMA2 (xz) | Sehr hoch | Sehr langsam | Ja |
|---|
| Zstandard-Tarball | `.tar.zst` | Zstandard | Hoch | Sehr schnell | Ja |
|---|
| ZIP-Archiv | `.zip` | DEFLATE | Mittel | Schnell | Nein |
|---|
| Einfaches tar | `.tar` | Keine | Keine | Am schnellsten | Ja |
|---|
Wichtige Erkenntnis: `.tar.xz` ist mittlerweile das bevorzugte Format für Linux-Distributionspakete (Kernel-Quellcode, RPM/DEB-Quell-Tarballs) aufgrund seines überlegenen Komprimierungsverhältnisses. `.tar.gz` bleibt jedoch für die allgemeine Verteilung dominant aufgrund seiner universellen Toolchain-Unterstützung und Entpackgeschwindigkeit. `.tar.zst` (Zstandard) gewinnt in modernen Distributionen wie Arch Linux an Bedeutung aufgrund seiner außergewöhnlichen Balance zwischen Komprimierungsverhältnis und Geschwindigkeit.
Um diese alternativen Formate zu entpacken, ersetzen Sie `-z` durch das entsprechende Flag:
“`bash
tar -xjvf archive.tar.bz2 # bzip2
tar -xJvf archive.tar.xz # xz/lzma
tar -x –zstd -vf archive.tar.zst # zstandard (GNU tar 1.31+)
“`
Dateiberechtigungen und Eigentümerschaft bewahren
Beim Entpacken von Archiven, die Systemdateien, Skripte oder Anwendungs-Binärdateien enthalten, ist die Beibehaltung der Berechtigungen wichtig:
“`bash
tar -xzvpf archive-name.tar.gz
“`
Das `-p`-Flag weist tar an, die ursprünglichen Berechtigungen wiederherzustellen. Ohne es wird die umask des aktuellen Benutzers angewendet, was ausführbare Skripte oder setuid-Binärdateien stillschweigend beschädigen kann.
Um die Eigentümerschaft zu bewahren (erfordert Root-Rechte):
“`bash
sudo tar -xzvpf archive-name.tar.gz –same-owner
“`
Dies ist entscheidend bei der Wiederherstellung von System-Backups oder der Bereitstellung von Anwendungspaketen, die auf eine bestimmte Benutzer-/Gruppeneigentümerschaft für Sicherheitsgrenzen angewiesen sind.
Häufige Fehler und wie man sie behebt
`tar: Error is not recoverable: exiting now`
Das Archiv ist beschädigt oder der Download war unvollständig. Überprüfen Sie die Integrität der Datei mit `md5sum` oder `sha256sum` gegen die veröffentlichte Prüfsumme und laden Sie sie erneut herunter.
`tar: Skipping to next header` / `tar: Archive contains obsolescent base-64 headers`
Teilweise Beschädigung innerhalb des Archivs. Sie können eine teilweise Extraktion mit `–ignore-zeros` versuchen, aber behandeln Sie die Ausgabe als möglicherweise unvollständig.
`gzip: stdin: not in gzip format`
Die Datei hat eine `.tar.gz`-Erweiterung, ist aber nicht tatsächlich gzip-komprimiert. Führen Sie `file archive-name.tar.gz` aus, um das tatsächliche Format zu identifizieren. Es könnte ein einfaches `.tar`, ein `.zip` oder eine `.bz2`-Datei mit falscher Erweiterung sein.
`Cannot open: No such file or directory`
Entweder ist der Pfad falsch oder der Dateiname enthält ein Leerzeichen. Setzen Sie den Dateinamen in Anführungszeichen: `tar -xzvf "my archive.tar.gz"`.
Zugriff verweigert beim Entpacken
Sie haben keinen Schreibzugriff auf das Zielverzeichnis. Verwenden Sie entweder `sudo` oder ändern Sie das Ziel mit `-C` in ein Verzeichnis, das Ihnen gehört.
Praktische Anwendungsfälle auf einem VPS oder Dedicated Server
In einer VPS-Hosting-Umgebung erscheinen `.tar.gz`-Archive ständig: beim Bereitstellen von Anwendungsversionen, Wiederherstellen von Datenbank-Dumps, Übertragen von Konfigurationspaketen zwischen Servern und Entpacken von aus dem Quellcode kompilierter Software.
Ein typischer Deployment-Workflow auf einem Linux-Server:
“`bash
Download release archive
wget https://example.com/releases/myapp-2.1.0.tar.gz
Verify integrity
sha256sum myapp-2.1.0.tar.gz
Inspect contents before extracting
tar -tzf myapp-2.1.0.tar.gz | head -30
Extract to deployment directory
sudo mkdir -p /var/www/myapp
sudo tar -xzvpf myapp-2.1.0.tar.gz -C /var/www/myapp –strip-components=1
Set correct ownership
sudo chown -R www-data:www-data /var/www/myapp
“`
Auf Dedicated Servers, die groß angelegte Backups verwalten, vermeidet die Kombination von `tar` mit Pipes das vollständige Schreiben von Zwischendateien auf die Festplatte:
“`bash
Create and stream a compressed archive directly over SSH to a remote server
tar -czvf – /var/www/html | ssh user@backup-server "cat > /backups/html-$(date +%F).tar.gz"
“`
Dieses Muster ist besonders effizient, wenn der Speicherplatz begrenzt ist oder wenn die Backup-Geschwindigkeit entscheidend ist.
Wenn Sie eine Webhosting-Umgebung über ein Control Panel verwalten, stellen Tools wie VPS mit cPanel `.tar.gz`-Operationen über die Dateimanager-Oberfläche bereit, aber der zugrunde liegende `tar`-Befehl ist im Terminal für skriptgesteuerte Workflows immer verfügbar.
Beim Hosten von Anwendungen, die Dateien über HTTPS bereitstellen, stellt die Kombination Ihrer Deployment-Pipeline mit ordnungsgemäß konfigurierten SSL-Zertifikaten sicher, dass die von Ihnen entpackten und bereitgestellten Anwendungsressourcen ab der ersten Anfrage sicher ausgeliefert werden.
Für Teams, die mehrere Umgebungen verwalten, können VPS Control Panels geplante Backup- und Wiederherstellungsoperationen vereinfachen, die stark auf `.tar.gz`-Archive angewiesen sind.
Kurzreferenz: Meistverwendete tar-Befehle
“`bash
Extract .tar.gz to current directory
tar -xzvf archive.tar.gz
Extract to specific directory
tar -xzvf archive.tar.gz -C /target/dir
Extract silently (no verbose output)
tar -xzf archive.tar.gz -C /target/dir
List contents without extracting
tar -tzvf archive.tar.gz
Extract single file
tar -xzvf archive.tar.gz path/inside/archive/file.conf
Extract and strip top-level directory
tar -xzvf archive.tar.gz -C /target/dir –strip-components=1
Extract preserving permissions and ownership (as root)
sudo tar -xzvpf archive.tar.gz –same-owner
Extract .tar.bz2
tar -xjvf archive.tar.bz2
Extract .tar.xz
tar -xJvf archive.tar.xz
“`
Technische Entscheidungsmatrix
| Szenario | Empfohlener Befehl |
|---|
| ———- | ——————— |
|---|
| Interaktives Entpacken, Fortschritt sehen | `tar -xzvf archive.tar.gz` |
|---|
| Automatisiertes Skript oder Cron-Job | `tar -xzf archive.tar.gz -C /target` |
|---|
| Unbekannte Archivstruktur, zuerst prüfen | `tar -tzf archive.tar.gz | head -20` |
|---|
| In Verzeichnis ohne Wrapper auf oberster Ebene bereitstellen | `tar -xzf archive.tar.gz -C /target –strip-components=1` |
|---|
| System-Backup mit exakten Berechtigungen wiederherstellen | `sudo tar -xzvpf archive.tar.gz –same-owner` |
|---|
| Einzelne Datei aus großem Archiv wiederherstellen | `tar -xzf archive.tar.gz path/to/file` |
|---|
| Archivintegrität vor dem Entpacken prüfen | `tar -tzf archive.tar.gz > /dev/null && echo "OK"` |
|---|
FAQ
Was ist der Unterschied zwischen .tar.gz und .tgz?
Es sind identische Formate. `.tgz` ist einfach ein verkürzter Einzel-Erweiterungs-Alias für `.tar.gz`, der verwendet wird, wenn Dateisysteme oder Tools Einschränkungen bei der Erweiterungslänge haben. Beide werden mit demselben `tar -xzvf`-Befehl entpackt.
Warum entpackt `tar -xzvf` manchmal Dateien in das aktuelle Verzeichnis anstatt in ein Unterverzeichnis?
Dies geschieht, wenn das Archiv ohne ein Wrapper-Verzeichnis auf oberster Ebene erstellt wurde. Führen Sie immer `tar -tzf archive.tar.gz | head -20` vor dem Entpacken aus. Wenn die Pfade kein gemeinsames Präfix teilen, erstellen Sie ein dediziertes Verzeichnis und verwenden Sie `-C`, um darin zu entpacken und eine Dateistreuung zu verhindern.
Kann ich eine .tar.gz-Datei ohne den tar-Befehl entpacken?
Ja. Sie können zuerst die gzip-Schicht mit `gunzip archive.tar.gz` dekomprimieren, was `archive.tar` erzeugt, und dann mit `tar -xvf archive.tar` entpacken. Einige Systeme unterstützen auch `zcat archive.tar.gz | tar -xvf -`, um die Dekomprimierung direkt in tar zu leiten. Jedoch ist `tar -xzvf` in einem einzigen Befehl immer der effizienteste Ansatz.
Verlangsamt das `-v`-Flag das Entpacken bei großen Archiven?
Geringfügig, ja. Bei Archiven mit Hunderttausenden kleiner Dateien kann der Overhead des Ausgebens jedes Dateinamens auf stdout messbare Zeit hinzufügen. In leistungssensiblen oder automatisierten Kontexten sollte `-v` immer weggelassen werden.
Wie entpacke ich eine .tar.gz-Datei als ein anderer Benutzer, ohne das Konto zu wechseln?
Verwenden Sie `sudo -u targetuser tar -xzvf archive.tar.gz -C /target/dir`. Dadurch wird der Entpackvorgang unter der Identität des Zielbenutzers ausgeführt, was sicherstellt, dass entpackte Dateien korrekt zugewiesen werden, ohne einen vollständigen Benutzerwechsel über `su` zu erfordern.
