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.
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 erstellenWas 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.
-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 weglassenDie 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:
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/appWie 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:
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 DatumLiegen 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:
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 ausgebenDie 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:
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=1Wie 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 /:
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)--excludevor 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
-pfür die Rechte als normaler Benutzer. Packe als root (mitsudo 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
mysqldumpoderpg_dumpund 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
pigzkomprimierttar -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 zstdodersudo dnf install zstd). Gut für deine eigenen Backups.
Warum meldet tar „gzip: stdin: not in gzip format“?
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting nowDie 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:
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 istLade 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:
curl -fL -o archive.tar.gz 'https://example.com/releases/archive.tar.gz'
sha256sum archive.tar.gz # mit dem veröffentlichten Wert vergleichenwget -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“?
tar: example.com/index.php: Cannot open: Permission denied
tar: Exiting with failure status due to previous errorsBeim 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:
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.comWie 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.
tar -xf archive.tar.gz
tar -xf archive.tar.gz -C C:\Temp\out # der Ordner muss existieren
tar -czf backup.tar.gz myfolderWie 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:
# 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.