Compress, Deflate, Archiving
Archivierungsprogramme
tar ist der „Tape Archiver“: ein Programm, welches mehrere Dateien zu einer Datei - dem Archiv, dessen Dateiformat in der ersten Version seit 1979 existiert - zusammenfasst, welches früher dann sequentiell auf Bänder geschrieben wurde.
Eine tar-Datei ist nicht komprimiert; das Programm nutzt zur Komprimierung seiner .tar-Dateien bei Angabe entsprechender Parameter andere Tools wie beispielsweise gzip. Solche Dateinamen enden auf .tar.gz.
star ist ein Nachfolger von tar. star muss per yum -y install star nachinstalliert werden, ist aber kompatibel: die tar-Parameter gelten auch für star.
Warum wird tar heute immer noch verwendet? Der Hauptvorteil eines tar-Archivs gegenüber Formaten wie ZIP ist, dass Dateiberechtigungen, Besitzer-/Gruppen-Informationen und SELinux-Kontexte mitgesichert und beim Entpacken wiederherstellt werden (wenn das Quell- und Ziel-Dateisystem die Unix-Dateirechte unterstützt). So ist es bis heute üblich, ein tar-Archiv anzulegen und dieses mit einem Tool der Wahl zu komprimieren. tar kann die Archivierung und Komprimierung in einem Rutsch erledigen - so kommt beispielsweise auch die Dateiendung tar.gz zustande.
Darüber hinaus ist das Kopieren einer tar-Datei über das Netz, die 100’000 Dateien enthält, wesentlich schneller erledigt als die Kopie der 100’000 einzelnen Dateien - vorausgesetzt, tar lässt sich flott durchführen.
Installation:
yum -y install tar
Erzeugt eine Archiv-Datei aus allen Dateien in /etc nach /tmp/etc.tar (c = create, v = verbose, f = file):
tar cvf /tmp/etc.tar /etc
Wie oben, komprimiert aber die tar-Datei nachträglich mit gzip (z = compress, im Standard mit gzip):
tar cvzf /tmp/etc.tar.gz /etc
Datei ans Ende eines bestehenden tar-Archivs anhängen:
tar rvf myarchive.tar file
Extrahiere alle Dateien aus /tmp/etc.tar in das aktuelle Verzeichnis (x = extract):
tar xvf /tmp/etc.tar
Wie oben, dekomprimiere die Datei vor dem Extrahieren mit gzip:
tar xf /tmp/etc.tar.gz
Dekomprimiere gz-Datei in ein anderes Zielverzeichnis:
tar xf file.tar.gz --directory=/tmp
Dekomprimiere alle .tar.gz-Dateien aus dem aktuellen Ordner:
for file in $(ls *tar.gz); do tar xf $file; done
Dekomprimiere xz-Datei:
tar xf file.tar.xz
Liste alle Dateien im tar-Archiv auf (t = list):
tar tf file.tar
tar soll wie gzip die getarte Dateien sofort löschen:
tar cf --remove-files ...
un-tar, aber bestehende Dateien nicht überschreiben:
tar xf --keep-old-files ...
tar mit gzip durchführen und Compression Level setzen:
GZIP=--fast tar --remove-files --use-compress-program gzip --create --file=file.tar.gz folder/
tar mit zst durchführen und Compression Level setzen:
ZSTD_CLEVEL=3 tar --remove-files --use-compress-program zstd --create --file=file.tar.zst folder/
..tipp:
``cpio`` ist ein ähnliches und veraltetes Archivprogramm. Es kann nicht mit Dateien > 4 GB umgehen.
Packprogramme
gzip und bzip2 sind in den hier gezeigten Parametern und ihrem Verhalten identisch. gzip erzeugt .gz-Dateien, bzip2 erzeugt .bz2-Dateien. Das zip-Tool nutzt man in der Regel, wenn komprimierte Dateien auch auf exotischeren Betriebssystemen wie Windows lesbar sein sollen und es nicht so sehr auf die Komprimierung ankommt. Der neue Linux-Standard ist xz, welches mittlerweile auf http://www.kernel.org zur Kernel-Kompression eingesetzt wird.
Über den Daumen gepeilt komprimiert xz am besten, gefolgt von bzip2, gzip und zip.
Am schnellsten arbeiten gzip und zip, jeweils mit deutlichem Vorsprung vor xz. bzip2 geht wesentlich gemächlicher zu Werke.
Man beachte, dass gzip und bzip2 die Input-Dateien durch ihren Output ersetzen. Werden sie auf Verzeichnisse angewandt, arbeiten sie jede Datei einzeln ab. Um eine komprimierte Archivdatei ähnlich dem zip-Format zu erzeugen, setzt man daher gzip/bzip2 zusammen mit tar ein.
Tipp
gzip komprimiert standardmässig den Zeitstempel der Datei sowie den Dateinamen mit - das bedeutet, dass eine zwischenzeitlich neu erstellte Datei mit dem gleichen Inhalt wie vorher eine neue gz-Datei mit anderer Prüfsumme ergibt. Schlecht für deduplizierende Backups. Wer dem Zeitstempel der Datei nicht mitsichert (Option -n), erhält immer die gleiche Prüfsumme.
Aufgabe |
gzip |
bzip2 |
zip |
xz |
|---|---|---|---|---|
Installation |
|
|
|
|
Bestmögliche Komprimierung einer Datei |
|
|
|
|
Komprimierung eines Verzeichnisses inkl. Unterverzeichnisse |
|
n/a |
|
n/a |
Entpacken einer komprimierten Datei |
|
|
|
|
Alle XML-Dateien rekursiv gzippen, Dateiname = „aktuelles Datum.gz“:
gzip -rv9 *.xml $(date +%Y%m%d).gz
GZippen, während eine Ausgabe produziert wird:
command-producing-output | gzip -9 > export.csv.gz
Alle XML-Dateien eines Verzeichnisses zusammenfassen:
tar --remove-files -czf /archive/$(date +%Y%m).tar.gz /path/to/*.xml
Alle XML-Dateien älter als 40 Tage auf Basis ihres Modifikationsdatums in monatsweise organisierten ZIP-Dateien mit Dateinamen „yyyymm.zip“ zusammenfassen:
for file in $(find -name *.xml -mtime +40)
do
TS=$(date --reference $file +%Y%m)
zip --move -9 $TS.zip $file
done
Passwort-geschützte ZIP-Datei erstellen:
zip -r9 -P mypassword file.zip folder
Alle xml-Dateien mit Modifikationsdatum älter als 40 Tage in einem ZIP-Archiv zusammenfassen:
cd /var/www/html/
for i in $(find . -name *.xml -mtime +40 )
do
TS=$(date --reference $i +%Y%m)
zip --move -9 $TS.zip $i
done
Mehrere Dateien mit unzip auf einmal entpacken - die Anführungszeichen sind hier wichtig:
unzip "*.zip"
Built on 2025-10-27