Freitag, 1. Mai 2009

Der Umgang mit tar.* Archiven

.tar Archive

In .tar Archiven werden die Dateien und Verzeichnisse nur zusammengefügt, ohne sie zu komprimieren. Die ursprüngliche Verzeichnisstruktur bleibt natürlich erhalten, vor allem aber auch die Zugriffsrechte und Zeitstempel sämtlicher Inhalte im Archiv.
Dies hat den Vorteil, daß man die erzeugten .tar Archive auch auf Medien speichern und transportieren kann, die evtl. mit den unixartigen Zugriffsrechten nichts anfangen können (E-Mail, FAT-formatierter USB-Stick, etc.), ohne diese wichtigen Informationen zu verlieren.

Diese Art der Archivierung ist quasi vergleichbar mit einem ZIP-Archiv ohne Kompressionsrate, wie man sie z.B. unter MS-Windows erstellen kann.

.gz Archive

Dateien mit der Endung *.gz sind mit dem Programm gzip komprimiert. Allerdings kann mit gzip, anders als es von Kopmressionsprogrammen in MS-Windows her bekannt sein dürfte, nur eine einzige Datei komprimiert werden.
Um mehrere Dateien zu komprimieren muß man also zuerst ein .tar Archiv erstellen und dieses anschließend mit gzip komprimieren.

Die Kompressionsrate von gzip ist im Vergleich zu den anderen unter Linux üblichen Komprimierungsverfahren relativ schwach, dafür lassen sich gzip-komprimierte Dateien relativ schnell wieder entpacken.

.bz2 Archive

Dateien mit der Endung *.bz2 sind mit dem Programm bzip2 komprimiert. Auch hier können lediglich nur einzelne Dateien komprimiert werden.
Um mehrere Dateien zu komprimieren muß man wie gehabt zuerst ein .tar Archiv erstellen und dieses anschließend mit bzip2 komprimieren.

Die Kompressionsrate von bzip2 ist im Vergleich zu gzip zwar um etliches besser, jedoch dauert der Kompressionsvorgang auch länger. Ähnlich schlecht sieht es auch beim entpacken von bzip2-komprimierten Dateien aus.

.lzma Archive

Dateien mit der Endung *.lzma sind mit dem Programm lzma komprimiert. Wiederum kann damit nur eine einzelne Datei komprimiert werden.
Um mehrere Dateien zu komprimieren muß man diese ebenso in ein .tar Archiv schieben und dieses anschließend mit lzma komprimieren.

Dieses unter Linux relativ neue Kompressionsverfahren wurde von der MS-Windowswelt übernommen. Der LZMA-Algorithmus stammt ursprünglich von den 7zip-Archiven.
Obwohl die Kompressionsrate sowohl besser als die von gzip und bzip2 ist, dauert das Entpacken von .lzma Archiven i.d.R. nicht viel länger als die Dekompression von .gz Archiven! Allerdings wird beim Entpacken relativ viel Arbeitsspeicher (RAM) benötigt.
Mittlerweile hat die LZMA-Kompression ihren Siegeszug aber bereits in mehreren Linux-Distributionen angetreten: Bei Mandriva werden beispielsweise seit Version 2008.0 die man-pages im LZMA-Verfahren komprimiert, ebenso findet es bei der Kompression von RPM-Paketen Verwendung, da man so insgesamt einfach eine größere Zahl von Paketen auf die Installationsmedien (CD’s / DVD) bekommt - bei vergleichbarer Installationszeit (die u.a. auch durch die Dekompression der Daten bestimmt wird).

Erstellen & Entpacken von .tar Archiven

Nun sind wir beim wohl wichtigsten Teil dieses Artikels angelangt. Da mit den beschriebenen Kompressionsprogrammen gzip, bzip2 und lzma wie bereits beschrieben nur jeweils eine einzelne Datei gepackt werden können, verwende ich diese Programme i.d.R. nicht im täglichen Gebrauch und möchte daher auch auf deren Bedienung gar nicht näher eingehen.
Stattdessen verwende ich auf Kommandozeile meist das Programm tar zur Erstellung von unkomprimierten Archiven, welches durch entsprechende Parameter mit allen genannten Kompressions-Algorithmen verknüpft werden kann.

Die wichtigsten Parameter des Kommandozeilen-Programmes tar in Kürze:

-x : extract - Dateien aus dem Archiv entpacken
-c : create - Ein neues Archiv erstellen
-v : verbose - zusätzliche Informationen anzeigen
-f : file - Den angegebenen Archivnamen verwenden

-z : Verwendung des Kompressions-Algorithmus von gzip
-j : Verwendung des Kompressions-Algorithmus von bzip2
-Y : Verwendung des Kompressions-Algorithmus von lzma

Alle angegebenen Parameter können im Übrigen auch ohne das "-" Zeichen übergeben werden.

Erstellen eines .tar Archives (ohne Kompression):

tar cvf .tar 

Erstellen eines .tar.gz Archives:

tar cvfz .tar.gz 

Erstellen eines .tar.bz2 Archives:

tar cvfj .tar.bz2 

Erstellen eines .tar.lzma Archives:

tar cvfY .tar.lzma 

Bei den o.g. Befehlen werden alle Dateien und Unterverzeichnisse von gepackt.

Genauso leicht wie wir das Archiv erstellt haben, können wir dieses natürlich auch wieder entpacken.
Dabei kann i.d.R. der Parameter für den Kompressions-Algorithmus aufgrund der Autoerkennung des Archivformats auch weggelassen werden:

Entpacken eines .tar Archives:

tar xvf .tar

Entpacken eines .tar.gz Archives:

tar xvf .tar.gz

Entpacken eines .tar.bz2 Archives:

tar xvf .tar.bz2

Entpacken eines .tar.lzma Archives:

tar xvf .tar.lzma

Anmerkung: Bereits existierende Dateien werden beim entpacken ohne Vorwarnung überschrieben - also Vorsicht! ;-)

Umwandeln von Archiven:

Als kleine Besonderheit von Mandriva-Linux gibt es sogar eine recht einfache Möglichkeit, mit Hilfe von vorinstallierten Shellskripten bereits komprimierte Archive „in einem Rutsch“ in das jeweils andere Kompressionsformat umzuwandeln:

Folgender Befehl wandelt ein .tar.gz Archiv in ein .tar.bz2 Archiv um:

bzme tar.gz

Ebenso leicht können .tar.gz oder aber auch .tar.bz2 Archiv in ein .tar.lzma Archiv umgewandelt werden:

lzme tar.bz2

Bei beiden Skripten wird die Dateigröße des resultierenden Archives mit dem Urpsprungsarchiv verglichen. Fällt es wider Erwarten einmal größer aus, erfolgt eine Warnmeldung und das ursprüngliche Archiv bleibt erhalten.