Linux · Tag 2 · Kapitel 02 von 6

Archivieren mit tar & gzip

Aus vielen Dateien wird eine — und die nimmt nur noch einen Bruchteil des Platzes ein. tar packt, gzip komprimiert, beide zusammen sind seit 50 Jahren der Standard für Backups, Software-Releases und Umzüge unter Unix.

📚 Kapitel 02 ⏱️ ca. 35 min Theorie + 45 min Lab 🧪 Lab 2.2
Inhalt dieses Kapitels
2.1

Worum geht's? Archivieren vs. Komprimieren

Einstieg

Archivieren = Truhe. Du wirfst 100 Dateien rein, schließt den Deckel — jetzt ist es eine Datei. Aber die Truhe ist genauso schwer wie alle Sachen zusammen. Die Truhe heißt archiv.tar.

Komprimieren = Vakuum. Du saugst die Luft aus der Truhe. Jetzt ist sie kleiner — aber drinnen ist immer noch das Gleiche. Die vakuum-verpackte Truhe heißt archiv.tar.gz.

FrageArchivierenKomprimieren
Was passiert?Viele Dateien → eine DateiGröße wird reduziert
Wird kleiner?Nein (sogar minimal größer!)Ja, oft 50–90 %
Wofür?Mailen, kopieren, übertragenSpeicherplatz sparen, Bandbreite sparen
Werkzeugtargzip, bzip2, xz
📌
Warum nicht zip?

zip kann beides in einem Schritt — das ist Windows-Standard. Unter Unix ist die Trennung historisch gewachsen: jedes Tool macht eine Sache richtig (Unix-Philosophie). Außerdem konnte zip ursprünglich keine Unix-Berechtigungen oder Symlinks speichern — tar schon. Für Linux-Backups: immer tar.

2.2

tar — die Truhe

Pflicht

Der Name kommt von tape archiver — aus den 70ern, als Backups noch auf Magnetbänder geschrieben wurden. Heute ist tar das wichtigste Backup- und Transport-Werkzeug der Unix-Welt.

Die wichtigsten Optionen

OptionBedeutungMerkhilfe
ccreate — neues Archiv erstellenCreate
xextract — Archiv entpackeneXtract
tlist — Inhalt zeigen (ohne entpacken)lisT
vverbose — anzeigen, was gerade passiertVerbose
ffile — Archivdatei-Name folgtFile
zzip — gzip-Komprimierung ein/ausgZip
-CChange dir — Verzeichniswechsel vor Archivieren/EntpackenChange
-rappend — Dateien an existierendes Archiv anhängenReplace/Add
-uupdate — nur neuere Dateien hinzufügenUpdate
--occurrence=Nbei doppelten Einträgen: nur N-tes Vorkommen(Spezialfall)
📌
Die magische Kombi

Du wirst die Buchstaben fast immer in einer dieser drei Kombinationen sehen:

  • tar -cvfCreate Verbose File (archivieren)
  • tar -tvfType/list Verbose File (anzeigen)
  • tar -xvf → eXtract Verbose File (entpacken)

v und f sind fast immer dabei. c, t, x sind die drei Aktionen.

🛡️
Wozu brauchst du tar im Admin-Alltag?
  • Backups: Verzeichnis komplett sichern, mit Berechtigungen — tar -cvf etc-backup.tar /etc
  • Umzug: Projektordner auf anderen Server bringen — packen, übertragen (scp), entpacken
  • Lieferung: Software wird oft als .tar-Archiv ausgeliefert (z. B. Kernel-Quellcodes)
▶ Mehr Use Cases — tar in der Praxis
  • Selektives Archivieren: Nur .conf-Dateien aus /etc (kombiniert mit find, kommt in Kap. 06)
  • Restore-Tests: Backup nach /tmp/test/ entpacken zum Prüfen — bevor's ernst wird
  • Vor Updates: /etc sichern, bei Problem zurückspielen
  • Datei-Transfer mit Berechtigungen: scp allein vergisst manchmal Eigentümer, tar behält alles (User, Group, Mode, Timestamps)

Grundlagen

bash
# Archiv erstellen: drei Dateien in eine
tar -cvf archiv.tar datei1.txt datei2.txt datei3.txt

# Ganzes Verzeichnis archivieren
tar -cvf projekt.tar projekt/

# Inhalt anzeigen, ohne zu entpacken
tar -tvf archiv.tar

# Archiv entpacken (im aktuellen Verzeichnis!)
tar -xvf archiv.tar

# Archiv in bestimmtes Verzeichnis entpacken
tar -xvf archiv.tar -C /tmp/zielordner

Fortgeschritten

bash
# -C: in Zielverzeichnis wechseln vor Entpacken
tar -xvf archiv.tar -C /tmp/restore/

# -C beim Archivieren: relative Pfade im Archiv
tar -cvf etc-backup.tar -C / etc/
# → drin steht "etc/..." statt "/etc/..."

# -r: einzelne Datei nachträglich hinzufügen (nur UN-komprimiert!)
tar -rvf archiv.tar neue_datei.txt

# -u: nur geänderte/neuere Dateien hinzufügen
tar -uvf backup.tar dokumente/

# --occurrence: bei mehrfachen Versionen die N-te holen
tar --occurrence=2 -xvf archiv.tar config.ini
⚠️
-u und -r brauchen UN-komprimierte Archive

Mit .tar.gz-Dateien funktionieren -u und -r nicht (Fehler: „Cannot update compressed archives"). Grund: gzip-Streams lassen sich nicht in der Mitte ändern. Wer inkrementelle Backups will, lässt entweder die Komprimierung weg oder schreibt jeden Tag ein neues .tar.gz.

▶ Tiefer einsteigen: Die Geschichte von tar (1979)
  • 1979 erstmals in Unix Version 7 veröffentlicht
  • Backups auf Tape Drives (Magnetbänder) — daher der Name
  • Auf Tapes kann man nicht springen — tar schreibt sequenziell (das spürst du heute noch bei langsamen tar -t-Operationen auf großen Archiven)
  • Deswegen die -f-Option: ohne -f würde tar aufs Band schreiben (Default-Gerät /dev/tape)
  • Format heute standardisiert als POSIX.1-2001 (pax)
2.3

gzip — die Vakuumpumpe

Pflicht

Der Name kommt von GNU zip, entwickelt 1992 als freier zip-Ersatz. gzip komprimiert eine Datei — die wird durch die komprimierte Version ersetzt. Standardendung: .gz. gunzip macht's wieder auf.

🛡️
Wozu brauchst du gzip im Admin-Alltag?
  • Logfile-Rotation: Alte Logs werden gezippt, sparen Platz (/var/log/messages-20260520.gz)
  • Backup-Verkleinerung: Vor dem Übertragen auf Backup-Server: erst komprimieren
  • Software-Lieferung: .tar.gz ist De-facto-Standard für Linux-Source-Releases
▶ Mehr Use Cases — gzip in der Praxis
  • Live-Logs anschauen ohne entpacken: zcat /var/log/messages-20260520.gz | grep error
  • Datenbank-Dumps: mysqldump db | gzip > backup.sql.gz — direkt aus Pipe, ohne Zwischendatei!
  • Bandbreite sparen: Vor scp mit gzip verkleinern
  • Stream-Komprimierung: tar -czf schreibt gzip-Stream direkt ins Archiv (siehe Abschnitt 2.4)

Praxis-Beispiele

bash
# Datei komprimieren — Original wird durch .gz ersetzt!
gzip grosses_log.txt
# → grosses_log.txt.gz (Original ist weg)

# Wieder entpacken
gunzip grosses_log.txt.gz
# → grosses_log.txt (wieder da, .gz ist weg)

# Komprimieren UND Original behalten (-k = keep)
gzip -k wichtig.log

# Komprimierungsstufe wählen (1=schnell, 9=klein)
gzip -9 grosse_datei.txt

# Komprimierten Inhalt anschauen, ohne zu entpacken
zcat geheim.txt.gz
zless lang.txt.gz
⚠️
gzip ersetzt das Original!

gzip log.txt → die Datei log.txt ist danach weg, es gibt nur noch log.txt.gz. Das ist anders als bei zip unter Windows. Mit -k (keep) bleibt das Original erhalten.

2.4

tar + gzip kombiniert — der Klassiker

Pflicht

tar kann gzip direkt aufrufen — mit der Option -z. Ergebnis: .tar.gz (oder .tgz — gleiche Sache, andere Schreibweise). Spart einen Schritt: kein tar → dann gzip, sondern alles in einem.

BefehlWas macht das?
tar -czvf archiv.tar.gz ordner/Archivieren UND komprimieren
tar -xzvf archiv.tar.gzEntpacken (und entkomprimieren)
tar -tzvf archiv.tar.gzAnzeigen, was drin ist
💡
Eselsbrücke für die Reihenfolge

czvf klingt wie „Create, Zip, Verbose, File" — in der Reihenfolge, in der du arbeitest:

  1. Create — neues Archiv
  2. Zip — mit gzip komprimieren
  3. Verbose — zeig mir, was passiert
  4. File — gleich kommt der Dateiname

Praxis-Beispiele

bash
# Klassiker: Verzeichnis archivieren und komprimieren in einem Schritt
tar -czvf website-backup.tar.gz /var/www/

# Inhalt prüfen (ohne entpacken)
tar -tzvf website-backup.tar.gz

# Entpacken
tar -xzvf website-backup.tar.gz

# Mit Datumsstempel im Namen
tar -czvf backup-$(date +%Y%m%d).tar.gz /etc/
# → backup-20260526.tar.gz
2.5

Andere Komprimierer im Überblick

Bonus

gzip ist der Standard — aber es gibt Spezialisten für andere Anforderungen.

ToolEndungGeschwindigkeitKompressionsratetar-FlagTypischer Einsatz
gzip.gz⭐⭐⭐ schnell⭐⭐ mittel-zStandard, überall verfügbar
bzip2.bz2⭐⭐ mittel⭐⭐⭐ gut-jWenn's wirklich klein sein muss
xz.xz⭐ langsam⭐⭐⭐⭐ sehr gut-JSoftware-Releases, Kernel-Tarballs
zstd.zst⭐⭐⭐⭐ sehr schnell⭐⭐⭐ gut--zstdModerne Wahl (seit ~2018), Container-Welt

Praxis-Beispiele

bash
# bzip2-Variante (kleiner, aber langsamer)
tar -cjvf backup.tar.bz2 ordner/
tar -xjvf backup.tar.bz2

# xz-Variante (am kleinsten, am langsamsten)
tar -cJvf backup.tar.xz ordner/
tar -xJvf backup.tar.xz

# zstd-Variante (modern, schnell, gut)
tar --zstd -cvf backup.tar.zst ordner/
💡
Welches Tool wann?

Faustregel:

  • Logs, schnelle Backups, Skriptegzip (Standard)
  • Software-Distribution, Kernel-Quellenxz (kleinste Files)
  • Container-Images, Cloud-Storagezstd (beste Balance Speed/Größe)
🧪 Lab 2.2 Backup vor dem Release 45 min

📧 Von: Markus Becker · IT-Leitung
An: Tim Schulz (du)
Betreff: Backup vorm Release — bitte heute noch!


Hi Tim,

wir releasen morgen früh die neue Version unserer Website. Bevor das passiert, brauche ich von dir ein vollständiges Backup vom Projekt-Ordner — gepackt und komprimiert, damit es auf den Backup-Share passt.

Konkret:

  1. Ein Test-Projekt aufbauen (so wie es bei uns aussieht — website/ mit src/, configs/, logs/).
  2. Davon ein unkomprimiertes tar-Archiv erstellen — damit ich sehe, was du archiviert hast.
  3. Inhalt vom Archiv listen, damit ich's gegenchecken kann.
  4. Dann das Ganze komprimieren und auf den Backup-Share legen (in deinem Fall: ~/backups/).
  5. Wichtig: Dateiname mit Datum, damit wir alte Backups auseinanderhalten können (z. B. website-backup-20260526.tar.gz).
  6. Zur Übung: Lösch dein Test-Projekt und stell es aus dem Backup wieder her — Restore-Test ist Pflicht!

Wenn Zeit bleibt: vergleich mal die Dateigröße zwischen .tar und .tar.gz — Sandra fragt mich immer, wie viel gzip eigentlich bringt. Ich brauch ein gutes Beispiel.

Danke!
— Markus

Teil A — Projekt aufsetzen (8 min)
  1. Erstelle ~/website/ und die Unterordner src/, configs/, logs/ in einem Befehl (Brace Expansion!).
  2. Erstelle ~/backups/.
  3. Befülle die Ordner mit Beispielinhalten (HTML-Datei in src/, Config in configs/, ein paar Log-Zeilen in logs/). Hinweis: Heredocs aus Lab 2.1!
  4. Schau dir mit ls -la ~/website/ an, was du gebaut hast.
bash
mkdir -p ~/website/{src,configs,logs}
mkdir -p ~/backups

# index.html
echo "<!DOCTYPE html>" > ~/website/src/index.html
echo "<html><body>" >> ~/website/src/index.html
echo "  <h1>HanovaTech</h1>" >> ~/website/src/index.html
echo "  <p>Willkommen auf der Website.</p>" >> ~/website/src/index.html
echo "</body></html>" >> ~/website/src/index.html

# nginx.conf
echo "listen 80;" > ~/website/configs/nginx.conf
echo "server_name www.hanovatech.de;" >> ~/website/configs/nginx.conf
echo "root /var/www/html;" >> ~/website/configs/nginx.conf

# access.log
echo "2026-05-26 09:00:00 GET / 200" > ~/website/logs/access.log
echo "2026-05-26 09:01:23 GET /api/users 200" >> ~/website/logs/access.log
echo "2026-05-26 09:05:11 GET /favicon.ico 404" >> ~/website/logs/access.log

ls -la ~/website/
Teil B — Unkomprimiertes Archiv (10 min)
  1. Wechsle in dein Home-Verzeichnis.
  2. Erstelle ein unkomprimiertes tar-Archiv namens website.tar vom kompletten website/-Ordner.
  3. Liste den Inhalt des Archivs auf — ohne zu entpacken.
  4. Schaue dir die Größe von website.tar an und vergleiche mit der Gesamtgröße der Originaldateien (du -sh website/).
bash
# 5)
cd ~

# 6)
tar -cvf website.tar website/

# 7)
tar -tvf website.tar

# 8)
ls -lh website.tar
du -sh website/
# → Archiv ist ungefähr gleich groß wie Original (nicht komprimiert!)
Teil C — Komprimieren + Restore-Test (12 min)
  1. Erstelle jetzt ein komprimiertes Archiv mit dem heutigen Datum im Namen, z. B. website-backup-20260526.tar.gz. Verwende das aktuelle Tagesdatum im Format JJJJMMTT.
  2. Verschiebe das .tar.gz-Archiv in ~/backups/.
  3. Lösche das gesamte ~/website/-Verzeichnis (mutiger Schritt — vorher gut nachdenken!).
  4. Stelle das Verzeichnis aus dem Backup wieder her und prüfe, ob alle Dateien wieder da sind.
bash
# 9) Datum heute manuell einsetzen, z. B. 20260526
# (Profi-Variante mit $(date +%Y%m%d) lernst du in Tag 3)
tar -czvf website-backup-20260526.tar.gz website/

# 10)
mv website-*.tar.gz ~/backups/

# 11)
rm -r ~/website
ls website 2>/dev/null || echo "weg!"

# 12) Restore
cd ~
tar -xzvf ~/backups/website-backup-*.tar.gz

ls -la website/
cat website/src/index.html
Teil D — Größenvergleich für Sandra (8 min)
  1. Vergleiche ls -lh von website.tar und ~/backups/website-backup-*.tar.gz.
  2. Berechne grob: Wie viel Prozent hat gzip gespart?
  3. Probier dasselbe mit bzip2 (tar -cjvf website.tar.bz2 website/) und vergleich alle drei Größen.
bash
# 13)
ls -lh website.tar ~/backups/website-backup-*.tar.gz

# 14) Verhältnis (Schätzwerte)
# Bei kleinen Test-Dateien ist der Unterschied klein, weil
# der gzip-Header Overhead hat. Bei echten großen Logs spart
# gzip oft 70-90%.

# 15) Bonus: bzip2 für Vergleich
tar -cjvf website.tar.bz2 website/
ls -lh website.tar ~/backups/website-backup-*.tar.gz website.tar.bz2
🌟 Bonus für schnelle Teilnehmer
  1. Schreibe einen einzeiligen Befehl, der alle drei Aktionen macht: Archivieren + Komprimieren + Verschieben (&&-Verkettung).
  2. Erstelle ein Archiv, das nur die .log-Dateien aus ~/website/logs/ enthält (Tipp: Wildcards in tar).
🎓
Achtung — ab hier wird's tar-Profi-Wissen

Die nächsten Aufgaben testen Optionen, die du im Alltag selten brauchst, aber wenn doch, kennst du jetzt den Weg. Wer 18–21 schafft, ist offiziell tar-Profi.

  1. -C clean nutzen: Erstelle ein neues, unkomprimiertes Backup etc-backup.tar von /etc, aber so, dass im Archiv die Pfade relativ sind (also etc/hostname statt /etc/hostname). Schau dir die ersten 5 Einträge im Archiv mit tar -tvf etc-backup.tar | head -5 an — was siehst du?
  2. -r Anhängen: Lege im Home eine neue Datei notes.txt mit beliebigem Inhalt an. Hänge sie an dein unkomprimiertes website.tar-Archiv aus Teil B an. Bestätige mit tar -tvf, dass sie jetzt drin ist. Versuche anschließend dasselbe mit website-backup-*.tar.gz — was passiert?
  3. -u Update: Ändere den Inhalt von ~/website/src/index.html (z. B. ergänze eine Zeile mit echo). Versuche, die geänderte Datei mit tar -uvf website.tar website/ ins unkomprimierte Archiv zu aktualisieren. Schau dir das Archiv mit tar -tvf an — was fällt auf?
  4. --occurrence benutzen: In deinem aktualisierten website.tar ist index.html jetzt zweimal drin (alte + neue Version). Entpacke gezielt die zweite Version nach /tmp/test-restore/. Tipp: tar --occurrence=2 -xvf website.tar website/src/index.html -C /tmp/test-restore/. Vergleiche mit dem aktuellen Original.
bash
# 16) Drei in einer Zeile
tar -czvf website-$(date +%Y%m%d).tar.gz website/ && \
mv website-*.tar.gz ~/backups/ && \
echo "Backup fertig!"

# 17) Nur .log-Dateien
tar -czvf logs-backup.tar.gz website/logs/*.log

# 18) -C beim Archivieren — relative Pfade
cd ~
tar -cvf etc-backup.tar -C / etc/
tar -tvf etc-backup.tar | head -5
# → "etc/hostname", "etc/passwd" usw. — kein führender /

# 19) -r anhängen ans .tar
echo "Notizen für später" > notes.txt
tar -rvf website.tar notes.txt
tar -tvf website.tar | tail -3
# → notes.txt ist jetzt drin

# Mit .tar.gz scheitert es:
tar -rvf ~/backups/website-backup-*.tar.gz notes.txt 2>&1 | head -3
# → tar: Cannot update compressed archives
# → tar: Error is not recoverable: exiting now

# 20) -u Update
echo "<!-- Update vom $(date) -->" >> ~/website/src/index.html
tar -uvf website.tar website/
tar -tvf website.tar | grep index.html
# → index.html erscheint ZWEIMAL (alt + neu)

# 21) --occurrence=2 — die neuere Version extrahieren
mkdir -p /tmp/test-restore
tar --occurrence=2 -xvf website.tar website/src/index.html -C /tmp/test-restore/
cat /tmp/test-restore/website/src/index.html
# → enthält den Update-Kommentar
🎉
Lab 2.2 geschafft?

Sehr gut! Du hast jetzt das wichtigste Backup-Werkzeug der Unix-Welt verstanden. Restore-Test (Schritt 12) ist übrigens ein Pflicht-Schritt im echten Admin-Alltag: Ein Backup, das du nie zurückgespielt hast, ist kein Backup.

2.7

Typische Anfänger-Fehler

Vorsicht
Fehler 1 — gzip löscht das Original

gzip wichtig.logwichtig.log ist weg, nur wichtig.log.gz da. Erwartung war „kopieren mit Komprimierung". Lösung: gzip -k (keep) oder gzip -c wichtig.log > wichtig.log.gz.

Fehler 2 — tar -xvf im falschen Verzeichnis

tar -xvf archiv.tar entpackt dorthin, wo du gerade bist, NICHT in den Quellordner. Wer im Home tar -xvf grosses.tar ausführt, kann sich das Home zumüllen. Lösung: Erst mkdir test && cd test, dann entpacken. Oder mit -C.

Fehler 3 — Falsche Option-Reihenfolge bei -f

-f muss immer das letzte Flag sein, weil danach der Dateiname kommt. tar -fxv archiv.tar versucht xv als Dateinamen zu öffnen und scheitert. Lösung: tar -xvf.

Fehler 4 — tar -xvzf für eine .tar-Datei

Wenn die Datei nur .tar ist (nicht .tar.gz), führt -z zu „gzip: stdin: not in gzip format". Lösung: bei .tar kein -z, bei .tar.gz mit -z (modernes tar erkennt es oft automatisch).

Fehler 5 — Backup-Pfad mit Slash am Anfang

tar -cvf backup.tar /etc/ archiviert mit absolutem Pfad — beim Entpacken landet alles wieder unter /etc/. Beim Restore von einem anderen Server ein böses Problem. Wer -C kannte (siehe Lab Bonus 18), hat das Problem nicht. Lösung: tar -cvf backup.tar -C / etc/ oder in den Parent-Ordner wechseln.

🎯

Kontrollfragen zum Kapitel

Selbst-Check
  1. Was ist der Unterschied zwischen Archivieren und Komprimieren?
  2. Wofür steht tar?
  3. Welche drei Aktionen unterscheidet tar (Buchstaben)?
  4. Was bedeutet die Option -v?
  5. Was bedeutet die Option -f, und warum muss sie am Ende stehen?
  6. Womit komprimierst du eine Datei mit gzip — und was passiert mit dem Original?
  7. Wie kombinierst du tar und gzip in einem Befehl? Nenne den klassischen Aufruf.
  8. Welche Endung verwendet ein gzip-komprimiertes tar-Archiv? (Zwei Schreibweisen.)
  9. Welche zwei Befehle zeigen den Inhalt eines .tar.gz-Archivs, ohne es zu entpacken?
  10. Wann benutzt du xz statt gzip?
  1. Archivieren = viele Dateien zu einer machen (Truhe). Komprimieren = Daten kleiner machen (Vakuum). tar archiviert, gzip komprimiert.
  2. tape archiver — kommt von Backups auf Magnetbänder.
  3. c = create (erstellen), x = extract (entpacken), t = list (anzeigen).
  4. v = verbose — zeigt während des Vorgangs an, welche Dateien gerade verarbeitet werden.
  5. f = file — danach folgt der Dateiname des Archivs. Deshalb am Ende, weil der Dateiname direkt dahinter erwartet wird.
  6. gzip datei.log — das Original wird durch die komprimierte Datei ersetzt (datei.log.gz). Mit -k (keep) bleibt das Original erhalten.
  7. tar -czvf archiv.tar.gz ordner/create, zip, verbose, file.
  8. .tar.gz (ausführlich) oder .tgz (kurz) — beides ist dieselbe Sache.
  9. tar -tzvf archiv.tar.gz (klassisch) oder tar -tvf archiv.tar.gz (modernes tar erkennt gzip automatisch).
  10. Wenn die Datei so klein wie möglich sein soll und Geschwindigkeit egal ist — typisch bei Software-Releases, Linux-Kernel-Tarballs.