Inhalt dieses Kapitels
Worum geht's? Archivieren vs. Komprimieren
EinstiegArchivieren = 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.
| Frage | Archivieren | Komprimieren |
|---|---|---|
| Was passiert? | Viele Dateien → eine Datei | Größe wird reduziert |
| Wird kleiner? | Nein (sogar minimal größer!) | Ja, oft 50–90 % |
| Wofür? | Mailen, kopieren, übertragen | Speicherplatz sparen, Bandbreite sparen |
| Werkzeug | tar | gzip, bzip2, xz |
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.
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
| Option | Bedeutung | Merkhilfe |
|---|---|---|
c | create — neues Archiv erstellen | Create |
x | extract — Archiv entpacken | eXtract |
t | list — Inhalt zeigen (ohne entpacken) | lisT |
v | verbose — anzeigen, was gerade passiert | Verbose |
f | file — Archivdatei-Name folgt | File |
z | zip — gzip-Komprimierung ein/aus | gZip |
-C | Change dir — Verzeichniswechsel vor Archivieren/Entpacken | Change |
-r | append — Dateien an existierendes Archiv anhängen | Replace/Add |
-u | update — nur neuere Dateien hinzufügen | Update |
--occurrence=N | bei doppelten Einträgen: nur N-tes Vorkommen | (Spezialfall) |
Du wirst die Buchstaben fast immer in einer dieser drei Kombinationen sehen:
tar -cvf→ Create Verbose File (archivieren)tar -tvf→ Type/list Verbose File (anzeigen)tar -xvf→ eXtract Verbose File (entpacken)
v und f sind fast immer dabei.
c, t, x sind die drei
Aktionen.
- 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 mitfind, kommt in Kap. 06) - Restore-Tests: Backup nach
/tmp/test/entpacken zum Prüfen — bevor's ernst wird - Vor Updates:
/etcsichern, bei Problem zurückspielen - Datei-Transfer mit Berechtigungen:
scpallein vergisst manchmal Eigentümer,tarbehält alles (User, Group, Mode, Timestamps)
Grundlagen
# 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
# -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 ArchiveMit .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 —
tarschreibt sequenziell (das spürst du heute noch bei langsamentar -t-Operationen auf großen Archiven) - Deswegen die
-f-Option: ohne-fwürdetaraufs Band schreiben (Default-Gerät/dev/tape) - Format heute standardisiert als POSIX.1-2001 (
pax)
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.
- 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.gzist 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
scpmitgzipverkleinern - Stream-Komprimierung:
tar -czfschreibt gzip-Stream direkt ins Archiv (siehe Abschnitt 2.4)
Praxis-Beispiele
# 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 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.
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.
| Befehl | Was macht das? |
|---|---|
tar -czvf archiv.tar.gz ordner/ | Archivieren UND komprimieren |
tar -xzvf archiv.tar.gz | Entpacken (und entkomprimieren) |
tar -tzvf archiv.tar.gz | Anzeigen, was drin ist |
czvf klingt wie „Create, Zip, Verbose, File"
— in der Reihenfolge, in der du arbeitest:
- Create — neues Archiv
- Zip — mit gzip komprimieren
- Verbose — zeig mir, was passiert
- File — gleich kommt der Dateiname
Praxis-Beispiele
# 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
Andere Komprimierer im Überblick
Bonusgzip ist der Standard — aber es gibt Spezialisten für
andere Anforderungen.
| Tool | Endung | Geschwindigkeit | Kompressionsrate | tar-Flag | Typischer Einsatz |
|---|---|---|---|---|---|
gzip | .gz | ⭐⭐⭐ schnell | ⭐⭐ mittel | -z | Standard, überall verfügbar |
bzip2 | .bz2 | ⭐⭐ mittel | ⭐⭐⭐ gut | -j | Wenn's wirklich klein sein muss |
xz | .xz | ⭐ langsam | ⭐⭐⭐⭐ sehr gut | -J | Software-Releases, Kernel-Tarballs |
zstd | .zst | ⭐⭐⭐⭐ sehr schnell | ⭐⭐⭐ gut | --zstd | Moderne Wahl (seit ~2018), Container-Welt |
Praxis-Beispiele
# 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/
Faustregel:
- Logs, schnelle Backups, Skripte →
gzip(Standard) - Software-Distribution, Kernel-Quellen →
xz(kleinste Files) - Container-Images, Cloud-Storage →
zstd(beste Balance Speed/Größe)
📧 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:
- Ein Test-Projekt aufbauen (so wie es bei uns aussieht —
website/mitsrc/,configs/,logs/). - Davon ein unkomprimiertes
tar-Archiv erstellen — damit ich sehe, was du archiviert hast. - Inhalt vom Archiv listen, damit ich's gegenchecken kann.
- Dann das Ganze komprimieren und auf den
Backup-Share legen (in deinem Fall:
~/backups/). - Wichtig: Dateiname mit Datum, damit wir alte
Backups auseinanderhalten können (z. B.
website-backup-20260526.tar.gz). - 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
- Erstelle
~/website/und die Unterordnersrc/,configs/,logs/in einem Befehl (Brace Expansion!). - Erstelle
~/backups/. - Befülle die Ordner mit Beispielinhalten (HTML-Datei in
src/, Config inconfigs/, ein paar Log-Zeilen inlogs/). Hinweis: Heredocs aus Lab 2.1! - Schau dir mit
ls -la ~/website/an, was du gebaut hast.
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/
- Wechsle in dein Home-Verzeichnis.
- Erstelle ein unkomprimiertes
tar-Archiv namenswebsite.tarvom komplettenwebsite/-Ordner. - Liste den Inhalt des Archivs auf — ohne zu entpacken.
- Schaue dir die Größe von
website.taran und vergleiche mit der Gesamtgröße der Originaldateien (du -sh website/).
# 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!)
- Erstelle jetzt ein komprimiertes Archiv mit dem
heutigen Datum im Namen, z. B.
website-backup-20260526.tar.gz. Verwende das aktuelle Tagesdatum im FormatJJJJMMTT. - Verschiebe das
.tar.gz-Archiv in~/backups/. - Lösche das gesamte
~/website/-Verzeichnis (mutiger Schritt — vorher gut nachdenken!). - Stelle das Verzeichnis aus dem Backup wieder her und prüfe, ob alle Dateien wieder da sind.
# 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
- Vergleiche
ls -lhvonwebsite.tarund~/backups/website-backup-*.tar.gz. - Berechne grob: Wie viel Prozent hat gzip gespart?
- Probier dasselbe mit
bzip2(tar -cjvf website.tar.bz2 website/) und vergleich alle drei Größen.
# 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
- Schreibe einen einzeiligen Befehl, der alle drei Aktionen macht:
Archivieren + Komprimieren + Verschieben
(
&&-Verkettung). - Erstelle ein Archiv, das nur die
.log-Dateien aus~/website/logs/enthält (Tipp: Wildcards in tar).
tar-Profi-WissenDie 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.
-Cclean nutzen: Erstelle ein neues, unkomprimiertes Backupetc-backup.tarvon/etc, aber so, dass im Archiv die Pfade relativ sind (alsoetc/hostnamestatt/etc/hostname). Schau dir die ersten 5 Einträge im Archiv mittar -tvf etc-backup.tar | head -5an — was siehst du?-rAnhängen: Lege im Home eine neue Dateinotes.txtmit beliebigem Inhalt an. Hänge sie an dein unkomprimierteswebsite.tar-Archiv aus Teil B an. Bestätige mittar -tvf, dass sie jetzt drin ist. Versuche anschließend dasselbe mitwebsite-backup-*.tar.gz— was passiert?-uUpdate: Ändere den Inhalt von~/website/src/index.html(z. B. ergänze eine Zeile mitecho). Versuche, die geänderte Datei mittar -uvf website.tar website/ins unkomprimierte Archiv zu aktualisieren. Schau dir das Archiv mittar -tvfan — was fällt auf?--occurrencebenutzen: In deinem aktualisiertenwebsite.taristindex.htmljetzt 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.
# 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
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.
Typische Anfänger-Fehler
Vorsichtgzip löscht das Originalgzip wichtig.log → wichtig.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.
tar -xvf im falschen Verzeichnistar -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.
-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.
tar -xvzf für eine .tar-DateiWenn 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).
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- Was ist der Unterschied zwischen Archivieren und Komprimieren?
- Wofür steht tar?
- Welche drei Aktionen unterscheidet
tar(Buchstaben)? - Was bedeutet die Option
-v? - Was bedeutet die Option
-f, und warum muss sie am Ende stehen? - Womit komprimierst du eine Datei mit
gzip— und was passiert mit dem Original? - Wie kombinierst du
tarundgzipin einem Befehl? Nenne den klassischen Aufruf. - Welche Endung verwendet ein gzip-komprimiertes tar-Archiv? (Zwei Schreibweisen.)
- Welche zwei Befehle zeigen den Inhalt eines
.tar.gz-Archivs, ohne es zu entpacken? - Wann benutzt du
xzstattgzip?
- Archivieren = viele Dateien zu einer machen (Truhe).
Komprimieren = Daten kleiner machen (Vakuum).
tararchiviert,gzipkomprimiert. - tape archiver — kommt von Backups auf Magnetbänder.
c= create (erstellen),x= extract (entpacken),t= list (anzeigen).v= verbose — zeigt während des Vorgangs an, welche Dateien gerade verarbeitet werden.f= file — danach folgt der Dateiname des Archivs. Deshalb am Ende, weil der Dateiname direkt dahinter erwartet wird.gzip datei.log— das Original wird durch die komprimierte Datei ersetzt (datei.log.gz). Mit-k(keep) bleibt das Original erhalten.tar -czvf archiv.tar.gz ordner/—create,zip,verbose,file..tar.gz(ausführlich) oder.tgz(kurz) — beides ist dieselbe Sache.tar -tzvf archiv.tar.gz(klassisch) odertar -tvf archiv.tar.gz(modernestarerkennt gzip automatisch).- Wenn die Datei so klein wie möglich sein soll und Geschwindigkeit egal ist — typisch bei Software-Releases, Linux-Kernel-Tarballs.