Anleitungen

tar.gz entpacken und erstellen unter Linux: der tar-Befehl für .tar.gz, .tgz, .tar.xz und .tar.bz2

tar.gz entpacken mit tar -xzf, mit -C in einen bestimmten Ordner, Inhalt vorher auflisten und Archive selbst erstellen. Auch für .tgz, .tar.xz und .tar.bz2.

Veröffentlicht ~9 Min. Lesezeit
Auf dieser Seite

Um eine tar.gz-Datei unter Linux zu entpacken, führst du tar -xzf datei.tar.gz aus. tar entpackt ins aktuelle Verzeichnis; mit -C /pfad entpackst du woanders hin. Eine .tgz ist dasselbe Format und wird genauso entpackt. Aktuelles GNU tar erkennt die Kompression selbst, deshalb funktioniert tar -xf für .tar.gz, .tar.xz, .tar.bz2 und .tar.zst gleichermaßen. Liste den Inhalt mit tar -tzf auf, bevor du etwas entpackst, das du nicht selbst gepackt hast.

die Befehle, die du wirklich brauchst
tar -xzf archive.tar.gz                    # hier entpacken
tar -xzf archive.tar.gz -C /opt/app        # nach /opt/app entpacken (muss existieren)
tar -tzf archive.tar.gz | head             # erst hineinschauen
tar -xf archive.tar.xz                     # jedes Format: tar erkennt es
tar -czf backup.tar.gz mydir/              # aus einem Verzeichnis eine tar.gz erstellen

Was bedeuten die Optionen von tar?

Jeder Buchstabe ist eine Option, und sie lassen sich hinter einem einzigen Bindestrich bündeln. Wichtig ist nur eine Regel: f nimmt den Archivnamen, gehört also ans Ende des Bündels. -xzf archive.tar.gz funktioniert, während -xfz archive.tar.gz tar nach einem Archiv namens z suchen lässt. Die alte Schreibweise ohne Bindestrich, tar xzf, macht dasselbe.

Optionen von tar
-x          entpacken
-c          erstellen
-t          den Inhalt auflisten
-f FILE     das Archiv, das gelesen oder geschrieben wird
-z          gzip      (.tar.gz, .tgz)
-J          xz        (.tar.xz, .txz)
-j          bzip2     (.tar.bz2, .tbz2)
--zstd      zstd      (.tar.zst), braucht das Programm zstd
-a          Kompression am Dateinamen wählen (beim Erstellen)
-v          jeden Dateinamen bei der Verarbeitung ausgeben
-C DIR      erst nach DIR wechseln: dorthin entpacken oder von dort aus packen
-p          Rechte exakt wiederherstellen (Standard, wenn als root ausgeführt)
-k          niemals Dateien überschreiben, die schon existieren
--strip-components=N    die ersten N Teile jedes Pfads weglassen

Die automatische Erkennung funktioniert, wenn tar eine Datei liest. Kommt das Archiv über eine Pipe, gib die Kompression selbst an, etwa curl -fL URL | tar -xzf -; ohne das z bricht GNU tar mit „Archive is compressed. Use -z option“ ab.

Unter Alpine Linux ist tar die kompakte Version von BusyBox. Sie beherrscht die alltäglichen Befehle oben, aber ihr fehlen mehrere GNU-Optionen, die weiter unten vorkommen, etwa --skip-old-files und --keep-newer-files. apk add tar installiert GNU tar.

Wie entpacke ich in ein bestimmtes Verzeichnis?

Mit -C. Das Zielverzeichnis muss existieren, lege es also zuerst an:

woanders hin entpacken
mkdir -p ~/app
tar -xzf archive.tar.gz -C ~/app

# ein Systemverzeichnis braucht root
sudo mkdir -p /opt/app
sudo tar -xzf archive.tar.gz -C /opt/app

Wie sehe ich vor dem Entpacken, was im Archiv steckt?

Nimm -t statt -x. Die meisten Archive legen alles unter einen einzigen Ordner auf oberster Ebene, aber manche entpacken Dutzende Dateien direkt in das Verzeichnis, in dem du gerade bist. Die ersten Zeilen verraten, welche Sorte du hast:

auflisten, ohne zu entpacken
tar -tzf archive.tar.gz | head          # erste Einträge: ein Ordner oder lose Dateien?
tar -tzf archive.tar.gz | wc -l         # wie viele Einträge
tar -tvzf archive.tar.gz | head         # mit Rechten, Besitzer, Größe und Datum

Liegen die Einträge nicht in einem gemeinsamen Ordner, entpacke mit -C in ein neues, leeres Verzeichnis statt in dein Home-Verzeichnis oder ein Web-Root.

Wie entpacke ich nur eine einzelne Datei oder einen Ordner?

Gib sie hinter dem Archivnamen an, genau so, wie tar -t sie ausgibt, inklusive eines führenden ./, falls die Liste eines zeigt:

nur einen Teil eines Archivs entpacken
tar -tzf site.tar.gz | grep wp-config               # den exakten Pfad finden
tar -xzf site.tar.gz public_html/wp-config.php       # eine Datei
tar -xzf site.tar.gz public_html/wp-content/uploads  # ein Ordner mit allem darin
tar -xzf site.tar.gz --wildcards '*.sql'             # jede Datei, die auf ein Muster passt
tar -xzOf site.tar.gz public_html/.htaccess          # stattdessen auf dem Bildschirm ausgeben

Die Datei landet unter ihrem vollen Pfad aus dem Archiv, hier public_html/wp-config.php unterhalb des aktuellen Verzeichnisses, nicht lose neben dem Archiv.

Wie lasse ich beim Entpacken den obersten Ordner weg?

Ergänze --strip-components=1. Das entfernt den ersten Teil jedes Pfads, der Inhalt des Ordners im Archiv landet also direkt in deinem Ziel. Der übliche Fall ist ein Download wie WordPress, das alles in einen Ordner wordpress/ verpackt:

den Inhalt entpacken, nicht den umschließenden Ordner
curl -fLO https://wordpress.org/latest.tar.gz
tar -tzf latest.tar.gz | head -3        # wordpress/, wordpress/index.php, ...
sudo mkdir -p /var/www/example.com
sudo tar -xzf latest.tar.gz -C /var/www/example.com --strip-components=1

Wie erstelle ich ein tar.gz-Archiv?

Mit -c statt -x, dann der Archivname, dann was gepackt werden soll. Nutze -C auch beim Erstellen, damit das Archiv example.com/... speichert und nicht den vollen Pfad ab /:

Archive erstellen
tar -czf site.tar.gz -C /var/www example.com

# mit dem Datum im Namen, ohne Caches und Logs
tar -czf "site-$(date +%F).tar.gz" --exclude='*/cache/*' --exclude='*.log' -C /var/www example.com

tar -cJf site.tar.xz -C /var/www example.com      # xz: kleiner, langsamer
tar -caf site.tar.zst -C /var/www example.com     # Format aus der Endung (zstd installiert)
  • --exclude vor die Pfade setzen. Aktuelles GNU tar warnt bei Optionen, die nach den zu packenden Dateien kommen, und sie greifen dann womöglich nicht.
  • Rechte und Besitzer werden immer gespeichert. Wiederhergestellt werden sie, wenn du als root entpackst, oder mit -p für die Rechte als normaler Benutzer. Packe als root (mit sudo tar), wenn manche Dateien nur für root lesbar sind, sonst überspringt tar sie mit „Permission denied“.
  • Keine Dateien einer laufenden Datenbank archivieren. Die Kopie kann inkonsistent sein. Erstelle einen Dump mit mysqldump oder pg_dump und packe den Dump.

Welches Kompressionsformat sollte ich nutzen?

  • gzip (.tar.gz) ist schnell und überall lesbar, von jedem Linux bis zu Windows und macOS. Der sichere Standard, vor allem für Dateien, die du weitergibst. Mit installiertem pigz komprimiert tar -I pigz -cf archive.tar.gz dir/ auf allen Kernen.
  • xz (.tar.xz) erzeugt meist spürbar kleinere Dateien, besonders bei Quellcode und Text, ist beim Erstellen aber deutlich langsamer. Verbreitet bei Software-Releases.
  • bzip2 (.tar.bz2) ist der ältere Mittelweg und heute meist etwas, das du entpackst, nicht erstellst. Minimalen Images fehlt es manchmal: „bzip2: Cannot exec“ heißt sudo apt install bzip2.
  • zstd (.tar.zst) komprimiert schnell und entpackt sehr schnell, bei höheren Stufen mit Größen nahe an xz. Es braucht GNU tar 1.31 oder neuer, was jede aktuelle Distribution hat, und das Programm zstd (sudo apt install zstd oder sudo dnf install zstd). Gut für deine eigenen Backups.

Warum meldet tar „gzip: stdin: not in gzip format“?

der Fehler
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

Die Datei ist nicht mit gzip komprimiert, egal was ihr Name sagt. Entweder ist sie ein einfaches tar-Archiv mit falscher Endung, oder was du heruntergeladen hast, ist gar nicht das Archiv, sondern eine HTML-Fehlerseite, eine Login-Seite oder eine Weiterleitung, gespeichert unter dem Namen des Archivs. Frag file, was sie wirklich ist:

was ist das für eine Datei?
file archive.tar.gz
# POSIX tar archive               -> gar nicht komprimiert: tar -xf archive.tar.gz
# XZ compressed data              -> falsche Endung: tar -xf archive.tar.gz
# Zip archive data                -> ein ZIP mit falschem Namen: unzip archive.tar.gz
# HTML document, ASCII text       -> du hast eine Webseite gespeichert, nicht das Archiv
head -c 300 archive.tar.gz        # zeigt das HTML, falls es das ist

Lade eine gespeicherte Webseite mit curl -fL neu herunter: -L folgt Weiterleitungen, die Release-Downloads auf GitHub und viele Mirrors nutzen, und -f lässt curl bei einem HTTP-Fehler scheitern, statt die Fehlerseite zu speichern. Vergleiche die Prüfsumme, wenn das Projekt eine veröffentlicht:

richtig herunterladen
curl -fL -o archive.tar.gz 'https://example.com/releases/archive.tar.gz'
sha256sum archive.tar.gz          # mit dem veröffentlichten Wert vergleichen

wget -O archive.tar.gz URL funktioniert ebenfalls: Es folgt Weiterleitungen und speichert standardmäßig keine Fehlerseiten. Fehlt eines der beiden Tools, helfen wget: command not found (engl.) und curl: command not found (engl.). Verwandte Meldungen: „Unexpected EOF in archive“ heißt, die Datei ist abgeschnitten, lade sie also erneut herunter. „This does not look like a tar archive“ bedeutet oft eine einzelne komprimierte Datei wie dump.sql.gz, die du mit gunzip dump.sql.gz entpackst, oder eine ZIP-Datei mit falschem Namen. Für echte .zip-Dateien hilft unzip: command not found (engl.).

Warum meldet tar „Cannot open: Permission denied“?

der Fehler
tar: example.com/index.php: Cannot open: Permission denied
tar: Exiting with failure status due to previous errors

Beim Entpacken darf dein Benutzer nicht in das Zielverzeichnis schreiben: Entpacke in ein Verzeichnis, das dir gehört, oder nutze sudo für Systempfade wie /var/www oder /opt. Beim Erstellen kann dein Benutzer einige Dateien nicht lesen: Packe mit sudo. Entpacken als root stellt außerdem die ursprünglichen Besitzer wieder her, und ein Besitzer, den es auf dem neuen Server nicht gibt, erscheint als bloße Zahl. Ergänze --no-same-owner und setze den Besitzer danach selbst mit chown, etwa sudo chown -R www-data:www-data /var/www/example.com.

Überschreibt tar vorhandene Dateien?

Ja, ohne Nachfrage. Eine Datei aus dem Archiv ersetzt eine gleichnamige Datei auf der Platte, und Dateien, die nur auf der Platte liegen, bleiben, wo sie sind. Um zu schützen, was schon da ist:

entpacken, ohne zu überschreiben
tar -xzkf archive.tar.gz                    # -k: Fehler für jede Datei, die existiert
tar -xzf archive.tar.gz --skip-old-files    # vorhandene Dateien still überspringen
tar -xzf archive.tar.gz --keep-newer-files  # neuere Dateien auf der Platte behalten

# der vorsichtige Weg: in ein leeres Verzeichnis entpacken und vergleichen
mkdir /tmp/check && tar -xzf archive.tar.gz -C /tmp/check
diff -rq /tmp/check/example.com /var/www/example.com

Wie entpacke ich eine tar.gz unter Windows?

Windows 10 (ab Version 1803), Windows 11 sowie Windows Server 2019 und neuer bringen tar.exe mit, derselbe Befehl funktioniert also in PowerShell oder in der Eingabeaufforderung. Die Kompression erkennt es selbst. Windows 11 öffnet .tar.gz außerdem im Datei-Explorer, und 7-Zip funktioniert überall, in zwei Schritten: erst die .gz, dann die .tar.

PowerShell · Eingabeaufforderung
tar -xf archive.tar.gz
tar -xf archive.tar.gz -C C:\Temp\out       # der Ordner muss existieren
tar -czf backup.tar.gz myfolder

Wie packe ich eine Website, um sie auf einen VPS umzuziehen?

Packe sie auf dem alten Server, kopiere sie hinüber und entpacke sie auf dem neuen. Ein Tarball behält die Dateirechte bei, was ein ZIP-Export aus einem Hosting-Panel oft nicht tut:

eine Website mit tar umziehen
# auf dem alten Server
tar -czf site.tar.gz -C /home/user public_html

# auf den neuen VPS kopieren
scp site.tar.gz admin@203.0.113.10:/tmp/

# auf dem neuen VPS
sudo mkdir -p /var/www/example.com
sudo tar -xzf /tmp/site.tar.gz -C /var/www/example.com --strip-components=1

# oder in einem Rutsch über SSH, ohne temporäre Datei
tar -czf - -C /home/user public_html | ssh admin@203.0.113.10 'mkdir -p ~/site && tar -xzf - -C ~/site'

Die Dateien sind nur ein Teil eines Umzugs; Datenbanken, DNS und E-Mail sind der andere, und den kompletten Ablauf findest du in der Anleitung zum Umzug vom Shared Hosting auf einen VPS (engl.). Ziehst du auf einen VPS aus der Reihe Standard KVM von VMHeaven um, hast du vollen Root-Zugriff und kannst direkt ins Web-Root entpacken.

Häufige Fragen

Was ist der Unterschied zwischen .tar, .tar.gz und .tgz?

Eine .tar-Datei bündelt viele Dateien und Ordner zu einem Archiv, mit ihren Pfaden, Rechten und Besitzern, aber ohne Kompression. Eine .tar.gz ist dasselbe Archiv mit gzip komprimiert und daher kleiner; .tgz ist nur eine kürzere Endung für genau dieses Format. Eine .tar entpackst du mit tar -xf datei.tar, eine .tar.gz oder .tgz mit tar -xzf datei.tar.gz; mit aktuellem GNU tar funktioniert tar -xf für alle drei.

Wie entpacke ich eine tar.gz unter Windows?

Windows 10 (ab Version 1803), Windows 11 sowie Windows Server 2019 und neuer bringen tar.exe mit. Öffne PowerShell oder die Eingabeaufforderung im Ordner und führe tar -xf datei.tar.gz aus; mit -C und einem vorhandenen Ordner entpackst du woanders hin. Windows 11 öffnet .tar.gz-Dateien auch im Datei-Explorer, und 7-Zip entpackt sie in zwei Schritten.

Überschreibt tar beim Entpacken vorhandene Dateien?

Ja. Eine Datei aus dem Archiv ersetzt ohne Nachfrage eine gleichnamige Datei auf der Platte; Dateien, die es nur auf der Platte gibt, bleiben unberührt. Mit -k (--keep-old-files) bekommst du stattdessen einen Fehler, mit --skip-old-files werden vorhandene Dateien still übersprungen, oder du entpackst erst in ein leeres Verzeichnis und vergleichst mit diff -rq.