15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
08.10.2024

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:

  1. `tar` sammelt Dateien, bewahrt Verzeichnisstruktur, Berechtigungen, Eigentümerschaft und symbolische Links in einer einzigen flachen Datei.
  2. `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

“`

FlagLange FormFunktion
—————–———-
`-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

FormatErweiterungKomprimierungsalgorithmusKomprimierungsverhältnisGeschwindigkeitTar erforderlich
——–———–———————–——————-——-————–
Gzip-Tarball`.tar.gz` / `.tgz`DEFLATE (gzip)MittelSchnellJa
Bzip2-Tarball`.tar.bz2`Burrows-Wheeler (bzip2)HochLangsamJa
XZ-Tarball`.tar.xz`LZMA2 (xz)Sehr hochSehr langsamJa
Zstandard-Tarball`.tar.zst`ZstandardHochSehr schnellJa
ZIP-Archiv`.zip`DEFLATEMittelSchnellNein
Einfaches tar`.tar`KeineKeineAm schnellstenJa

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

SzenarioEmpfohlener 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.gzhead -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.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen