Archivierung und Komprimierung - tar, gzip, bzip2
 

Möchte man unter Linux einen ganzen Ordner bequem in einer Datei archivieren, sozusagen sämtliche Dateien als Paket verschnüren, gibt es das Programm tar.

tar = Archivierungsprogramm unter Linux (ohne Kompression!)

Syntax= tar [option]... [File(s)]...

Optionen:
-c (create) erzeugt (packt) ein neues Archiv
-t (table of contents) zeigt den Inhalt eines Archives
-v gibt ausführlichere Informationen
-x (extract) extrahiert (entpackt) ein Archiv
-j ruft das Komprimierungsprogramm bzip2 auf
-z ruft das Komprimierungsprogramm gzip auf
-f ermöglicht die Angabe eines Dateinamens. Wird -f nicht angegeben, wird die Standard Ein- und Ausgabe benutzt.

tar arbeitet implizit immer rekursiv, d.h. wird eine Dateiname angegeben, wird je nach Modus (-c,-x) die Datei ins Archiv gepackt oder ausgepackt. Ein Verzeichnisname bewirkt hingegen, dass tar das ganze Verzeichnis mit Unterverzeichnissen bearbeitet. So können ganze Ordner inklusive dem relativiertem Pfad in ein Archiv gepackt werden. Zum Beispiel:

# tar -cvf /tmp/archiv.tar /home/tux /var/mail/tux
Erstellt das Archiv archiv.tar, das die kompletten Verzeichnisse home/tux und var/mail/tux enthält (die Pfade sind relativiert! Man beachte das fehlende / am Anfang, daher kann das Archiv in jedem beliebigem Verzeichnis ausgepackt werden, ohne bestehende Verzeichnisse zu überschreiben!).

# tar -tvf archiv.tar
Zeigt den Inhalt des Archives archiv.tar an (Option -t), wobei -v eine Ausgabe ähnlich ls -l bewirkt.

# tar -xvf archiv.tar
entpackt das Archiv archiv.tar im aktuellen Verzeichnis. Um nur bestimmte Teile des Archivs zu entpacken, kann man die entsprechenden Dateien und/oder Ordner angeben, z.B.
# tar -xvf archiv.tar Datei1 Verzeichnis2/ Verzeichnis3/Datei3
Dabei muß man den kompletten Pfad zu den Dateien im Archiv mitangeben, daher ist es sinnvoll sich vorher das Archiv mittels -t auflisten zu lassen und die entsprechenden Einträge zu kopieren. Möchte man zum entpacken ein anderes Verzeichnis als das Aktuelle angeben, hilft die Option -C:
# tar -xvf archiv.tar -C Entpack-Verzeichnis/

Natürlich ist das verschnüren von vielen Dateien zu einem Paket ja ganz schön und recht, aber noch schöner wäre es natürlich, wenn man dabei auch noch Platz sparen kann. Hier kommen die Programme gzip und bzip2 ins Spiel...

gzip, bzip2

Gemäß der Unix-Philosophie "Mach nur eine Sache, die aber richtig!" komprimiert tar keine Archive. tar arbeitet aber mit Kompressions-Programmen zusammen und kann sie aufrufen, daher ist es ein leichtes das Archiv auch noch in einem Rutsch zu komprimieren.

# tar -cvzf archiv.tar.gz Verzeichnis
Archiviert das angegebene Verzeichnis in archiv.tar und ruft anschließend gzip auf (Option -z) um das Archiv zu komprimieren, daher ist dieser Befehl analog zu:
# tar -c Verzeichnis | gzip > archiv.tar.gz
oder auch in zwei Schritten:
# tar -cf achiv.tar Verzeichnis
# gzip archiv.tar

Und jetzt das ganze umgekehrt:
# tar -xvzf archiv.tar.gz
ruft gzip auf um die Datei archiv.tar.gz zu dekomprimieren und anschließend zu entpacken und ist das gleiche wie:
# gzip -dc archiv.tar.gz | tar -x

Wem gzip nicht gefällt, der kann auch bzip2 nehmen:
# tar -cvjf archiv.tar.bz2 Verzeichnis
packt die Dateien aus dem angegebenen Verzeichnis in ein Archiv und ruft dann bzip2 auf, um es zu komprimieren (option j für bzip2).
# tar -xvjf archiv.tar.bz2
ruft bzip2 auf zum dekomprimieren und entpackt dann.

Und wem weder gzip noch bzip2 gefällt, der nimmt halt compress:
# tar -cvZf archiv.tar.Z Verzeichnis

packt ein Archiv und komprimiert es anschließend mit compress (Option Z).
# tar -xvZf archiv.tar.Z
dekomprimiert und entpackt ein compress-Archiv.

zip - unzip

Natürlich kann Linux auch mit der klassischen Windows-Komprimierung, also mit zip-Files umgehen. Der grundlegende Befehl dazu lautet:
# zip options archiv inpattern inpattern ...

Ein Beispiel:
# zip -r archiv.zip home/
packt den ganzen Ordner home in das zip-archiv (option -r für rekursiv). Existiert das Archiv schon, werden vom Namen her identische Einträge überschrieben und Einträge mit neuem Namen hinzu gefügt. Bereits existierende Dateien für die kein File mit gleichem Namen existiert bleiben unangetastet. Der Ordner wird mit allen Unterordner und relativen Pfadangaben gespeichert. Beim auspacken wird die Verzeichnisstruktur relativ zum Extraktionsverzeichnis wieder hergestellt. Natürlich kann man auch mit sogenannten "Wildcards" arbeiten:
# zip archiv.zip *.jpg
packt alle jpg-Dateien in das angegebene Archiv.

Möchte man einzelne Einträge aus einem Archiv löschen, hilft -d (delete), z.B.
# zip -d archiv.zip *.jpg
entfernt alle jpg-Dateien aus dem Archiv.

Um den Inhalt eines Archivs anzeigen zu lassen oder es wieder auszupacken, gibt es das Programm unzip. Das Auspacken ist ganz simpel:
# unzip archiv.zip -d Directory/
extrahiert das zip-File in das mit -d angegebene Verzeichnis. Gibt man kein Verzeichnis an, wird in das momentane Verzeichnis in dem man sich gerade befindet entpackt. Möchte man lediglich den Inhalt eines Archivs sehen, ohne es zu extrahieren, hilft -l (list):
# unzip -l archiv.zip
Dabei wird nicht nur die Dateigröße jeder einzelnen Datei angezeigt, sondern auch eine Zusammenfassung aller Dateien.