UNIX Packprogramme
Willemers Informatik-Ecke

Pack Deine Sachen und geh...

Wenn man ein Rudel Dateien, das vielleicht auch noch in einem größeren Verzeichnis untergebracht ist, transportieren möchte, dann hat man zwei Probleme. Erstens sollte das Paket handlich sein und zweitens möglichst klein. Dafür gibt es unter UNIX je eine Lösung: tar und compress. Und natürlich kann man auch beides kombinieren.

Verschnüren: tar

Pflichtoption c, x oder t

Das Programm tar (tape archiver) kommt aus dem Bereich Datensicherung. Aber es ist ungeheuer praktisch im Umgang mit Dateien. Mit tar kann man packen, auspacken und Pakete anschauen. Gesteuert wird die Funktion durch die erste Option: c (create) zum Erzeugen, x (extract) zum Auspacken und t zum Anschauen. Genau eine von diesen Optionen braucht tar, damit klar ist, was zu tun ist.

Dateien zu einem Archiv schnüren

Da die Daten in eine Datei gepackt werden sollen, braucht man die Option f (file) für Datei. Denn dadurch arbeitet dann tar nicht auf dem Standardbandlaufwerk, sondern auf der angegeben Datei. An dieser Stelle wird deutlich, dass tar ursprünglich für Magnetbänder entwickelt wurde. Und zu guter Letzt ist die Option v (verbose) hilfreich. Dann erzählt tar, welche Dateien bearbeitet werden.

tar -cvf ../meins.tar .

Dieser Befehl erzeugt (c) eine Datei (f) namens ../meins.tar und zeigt (v) welche Dateien er einpackt. In das Archivdatei kommt das aktuelle Verzeichnis (.) hinein und alle Unterverzeichnisse. Dass die Unterverzeichnisse mitkommen ist bei tar Standard und muss nicht angegeben werden. Dass die Datei meins.tar im Verzeichnis vor dem aktuellen liegt (..), hat seinen praktischen Grund darin, dass tar so nicht in Versuchung kommt, das gerade erzeugte Archiv selbst ins Archiv aufzunehmen. Man kann das Problem auch dadurch umgehen, dass man sein Paket im Verzeichnis /tmp packt. Dass die Datei die Endung tar hat, ist nicht zwingend, sondern hat rein informativen Charakter.

Archiv wieder auspacken

Nun sei die Datei per E-Mail oder Diskette oder wie auch immer auf den Zielrechner gelangt. Zum Auspacken hat man sie zunächst in das Verzeichnis /tmp gelegt. Um die Dateien auszupacken, wechselt man ins Zielverzeichnis per cd und weist dort tar an, das Archiv zu entpacken.

tar -xvpf /tmp/meins.tar

Absolute Pfadnamen

Beim Packen und Auspacken sollte man sehr genau darauf achten, ob die Pfadnamen der gesicherten Dateien absolut sind, also mit einem Schrägstrich beginnen. In diesem Fall hilft die Option -A, dieses abzustellen. Sicherheitshalber sollte man die Manpage zu Rate ziehen, denn einige Systeme verwenden -A zum Anhängen an existierende Archive.

Dateieigenschaften

Die Option p bewirkt, dass die Dateien die gleichen Rechte haben wie vor dem Einpacken. Wenn root den Befehl tar benutzt, wird die Option standardmäßig eingeschaltet. Jeder andere Benutzer muss sie explizit nennen.

Verzeichnisbaumkopie mit tar

Eine völlig andere Anwendung ist das rekursive Kopieren mit tar. Hier werden die zu kopierenden Daten in eine Pipe geschoben (tar c) und von dort an anderer Stelle wieder ausgepackt. Zwei Vorteile hat diese Vorgehensweise. Einerseits kann man so leicht ganze Verzeichnisbäume kopieren und zweitens bleiben alle Dateiattribute erhalten.

cd /home/ernst
tar cf - . | ( cd /home/august ; tar xfp - )

Der Befehl kopiert alle Dateien unterhalb des Verzeichnisses /home/ernst in das Zielverzeichnis /home/august unter Beibehaltung aller Dateiattribute. Solche Befehlskombinationen sind auf den ersten Blick etwas erschreckend. Aber hier wird die besondere Stärke von UNIX ausgenutzt, Programme miteinander zu kombinieren. Zunächst wechselt der Befehl cd in das Startverzeichnis /home/ernst. Das ist wichtig, weil so in die >>tar-Datei<< kein Pfadname vor dem Startverzeichnis abgestellt wird. Der tar links von der Pipe (|) weist dann keine Überraschung auf. Durch die Kombination f - wird statt eines Speichermediums oder einer Datei in die Standardausgabe stdout und damit in die Pipe geschrieben. Rechts von der Pipe wird also ein auspackender tar stehen. Den kann man dort auch leicht identifizieren. Er steht in einer Klammer mit dem Befehl cd, der zunächst in das Zielverzeichnis /home/august wechselt. Nur so gelangen die Daten überhaupt an einen anderen Ort. Dort holt tar auf der rechten Seite die Daten aus der Pipe und legt sie dort ab, wo er steht. Das p gewährleistet auch für normale Anwender, dass alle Rechte der Dateien so bleiben, wie sie vor dem Kopieren waren.

Zusammenpressen: compress und gzip

compress

compress ist auf jeder UNIX-Maschine verfügbar

Auf jeder UNIX-Maschine findet man das Tool compress und das Gegenstück uncompress. compress komprimiert die als Argument genannten Dateien und hängt ihnen zur Kennzeichnung ein großes .Z an den Namen an. Durch die Komprimierung können Textdateien leicht auf ein Drittel ihrer Größe schrumpfen. Die Originaldateien werden nach erfolgreichem Komprimieren gelöscht. Die gepackte Datei kann mit compress -d oder mit dem Befehl uncompress wieder entpackt werden.

Der Vielfältige: gzip

GNU zip kommt mit vielen Tools

Inzwischen verfügt fast jede Maschine über gzip und gunzip. gzip (sprich: GNU zip) arbeitet wie compress dateienweise, hat aber einen etwas besseren Komprimierungsalgorithmus. gunzip kann auch von compress erzeugte Dateien entpacken. Umgekehrt funktioniert das aber nicht. Eine mit gzip gepackte Datei erkennt man an der Endung .gz. Ergänzt wird gzip durch weitere praktische Tools. zless arbeitet wie more allerding auf einer gepackten Datei. Sehr hilfreich ist auch zgrep, mit dem man mehrere gepackte Dateien nach Stichworten durchsuchen kann, ohne sie einzeln auspacken zu müssen. Diese Befehle sind besonders beim Arbeiten mit den Howtos hilfreich, die standardmäßig als gz-Dateien vorliegen.

Kombination aus Packen und Pressen

Natürlich kann man unter UNIX leicht tar und compress kombinieren, indem man sie durch eine Pipe verbindet. In diesem Fall geht es allerdings einfacher. Da diese Anwendung so häufig vorkommt, hat man neueren Implementationen von tar eine Option z eingebaut, die das Packen automatisch einbindet. Je nach Version wird compress oder gzip als Komprimierer eingesetzt. Beispiel:

tar cvzf ../archiv.tgz .

Bevor man also Daten mit einem anderen System tauscht, sollte man prüfen, ob die Dateien auch kompatibel sind. Wird als Komprimierer gzip verwendet, verwendet man üblicherweise die Endung tgz.

ZIP-Tools

Einige Maschinen besitzen auch zip und unzip, die kompatibel zu den ZIP-Tools unter MS-DOS oder MS-Windows sind. Das bedeutet, dass sie die typischen zip-Dateien, die man im Internet findet, aus- und einpacken können. Im Unterschied zum oben genannten gzip enthalten diese Werkzeuge auch einen Mechanismus, um mehrere Dateien zu einer Datei zusammenfassen zu können. Da tar auf den oben genannten Systemen fast unbekannt ist, verwendet man dort jedesmal ZIP-Dateien, wenn mehrere Dateien zu einer zusammengefasst werden soll.

zip projekt.zip *.c *.h

Mit diesem Kommando werden alle Dateien des Verzeichnisses mit den Endungen .c und .h in der Datei projekt.zip zusammengefasst und komprimiert. Existierte die Datei vorher noch nicht, wird sie neu angelegt.

unzip projekt.zip

Alle in der Datei projekt.zip zusammengefassten Dateien werden im aktuellen Verzeichnis ausgepackt. Da Zipdateien nicht aus dem UNIX Umfeld stammen, sind sie nicht in der Lage alle Attribute einer Datei zu sichern.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru?