Copyright © 1995 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux - Wegweiser zur Installation & Konfiguration", dann klicken Sie hier.


Kapitel 4

Archivierung und Komprimierung

Es gibt auf UNIX-Systemen Dutzende von Utilities für die Archivierung und Komprimierung von Dateien in unterschiedlichen Formen und Ausprägungen. Einige davon (etwa tar und compress ) stammen aus der UNIX-Urzeit; andere (etwa gzip ) sind relativ neu. Die wichtigsten Ziele dieser Hilfsprogramme sind die Archivierung (d.h., daß viele Dateien zwecks einfacherer Übertragung und Backups zu einer Datei zusammengefaßt werden) und die Komprimierung (um den Speicherplatz zu reduzieren, den eine Datei oder eine Gruppe von Dateien belegt).

In diesem Abschnitt wollen wir die Dateiformate und Utilities besprechen, denen Sie mit großer Wahrscheinlichkeit begegnen werden. Fast eine allgemeingültige Vereinbarung in der UNIX-Welt ist z.B. die Übertragung von Dateien oder Software in der Form eines tar -Archivs, das anschließend mit compress oder gzip komprimiert wird. Damit Sie solche Dateien erstellen oder entpacken können, müssen Sie die notwendigen Programme kennen. Diese Tools werden meistens bei der Installation neuer Software und beim Erstellen von Backups eingesetzt -- und dies sind auch die Themen der nächsten beiden Abschnitte in diesem Kapitel.

gzip benutzen

gzip ist ein schnelles und effektives Komprimierungsprogramm aus dem GNU-Projekt. Seine grundlegende Funktion besteht darin, daß es eine Datei komprimiert, die gepackte Version als dateiname.gz abspeichert und die ungepackte Originaldatei löscht. Die Originaldatei wird erst entfernt, wenn gzip erfolgreich beendet wurde; es ist kaum möglich, auf diese Weise eine Datei versehentlich zu löschen. Da es sich um GNU-Software handelt, kennt gzip natürlich mehr Optionen, als Sie sich vorstellen können, und seine Arbeitsweise kann mit Optionen auf der Befehlszeile auf vielfache Art beeinflußt werden.

Lassen Sie uns mit einer großen Datei namens garbage.txt beginnen:

rutabaga% ls -l garbage.txt 
-rw-r--r--   1 mdw      hack       312996 Nov 17 21:44 garbage.txt

Um diese Datei mit gzip zu komprimieren, geben wir nur ein:

gzip garbage.txt

Damit ersetzen wir garbage.txt durch die gepackte Datei garbage.txt.gz und erhalten:

rutabaga% gzip garbage.txt 
rutabaga% ls -l garbage.txt.gz 
-rw-r--r--   1 mdw      hack       103441 Nov 17 21:44 garbage.txt.gz

Beachten Sie, daß garbage.txt nach der Beendigung von gzip entfernt wird.

Sie haben die Möglichkeit, gzip eine Liste von Dateinamen zu übergeben; es wird jede einzelne Datei komprimieren und mit der Erweiterung .gz abspeichern. (Anders als das Programm zip unter UNIX und DOS erstellt gzip in der Grundeinstellung kein .gz -Archiv aus den Einzeldateien. Dafür gibt es den Befehl tar ; lesen Sie den nächsten Abschnitt.)

Es hängt von Format und Inhalt einer Datei ab, wie gut sie sich komprimieren läßt. Viele Grafikdateien (wie GIF und JPEG) sind bereits stark komprimiert, so daß gzip hier nicht mehr viel ausrichten kann. Zu den Dateien, die mit gutem Erfolg verdichtet werden können, gehören einfache Textdateien und binäre Daten wie ausführbare Programme und Libraries.

Mit gzip -l erhalten Sie Informationen zu den Dateien, die mit gzip gepackt wurden. Ein Beispiel:

rutabaga% gzip -l garbage.txt.gz 
compressed  uncompr. ratio uncompressed_name
    103115    312996  67.0% garbage.txt

Wenn wir aus einer gepackten Datei das Original wiederherstellen wollen, benutzen wir gunzip :

gunzip garbage.txt.gz

Anschließend haben wir:

rutabaga% gunzip garbage.txt.gz 
rutabaga% ls -l garbage.txt 
-rw-r--r--   1 mdw      hack       312996 Nov 17 21:44 garbage.txt

Dies entspricht genau der Originaldatei. Beachten Sie, daß nach dem erfolgreichen Entpacken mit gunzip die komprimierte Version gelöscht wird.

gzip speichert den Namen der ungepackten Originaldatei in der gepackten Version der Datei. Das hat zur Folge, daß der Name der Originaldatei auch dann wiederhergestellt werden kann, wenn der Name der gepackten Datei (einschließlich .gz -Erweiterung) für ein bestimmtes Dateisystem zu lang ist (etwa auf einem DOS-System mit 8.3-Dateinamen) und deshalb abgeschnitten wurde.

Wenn Sie eine Datei entpacken und den Originalnamen wiederherstellen möchten, geben Sie die Option -N mit dem Befehl gunzip ein:

rutabaga% gzip garbage.txt 
rutabaga% mv garbage.txt.gz rubbish.txt.gz

Wenn wir jetzt gunzip rubbish.txt.gz ausführten, hätte die entpackte Datei den Namen rubbish.txt , analog zum Namen der neuen (gepackten) Datei. Mit der Option -N aber erhalten wir:

rutabaga% gunzip -N rubbish.txt.gz 
rutabaga% ls -l garbage.txt 
-rw-r--r--   1 mdw      hack       312996 Nov 17 21:44 garbage.txt

Mit gzip und gunzip lassen sich auch Daten der Standardein- und ausgabe packen und entpacken. Wenn gzip ohne einen Dateinamen aufgerufen wird, versucht es, die Daten zu komprimieren, die es von der Standardeingabe liest. In ähnlicher Weise schreibt gunzip mit der Option -c entpackte Daten auf die Standardausgabe. So könnten Sie z.B. eine Pipe benutzen, um die Ausgabe eines Befehls in einem Schritt zwecks Komprimierung und Speicherung in einer Datei an gzip zu leiten:

rutabaga% ls -laR $HOME | gzip > filelist.gz

Damit erzeugen Sie ein rekursives Verzeichnislisting Ihres Home-Verzeichnisses und speichern es in der gepackten Datei filelist.gz . Mit dem Befehl:

rutabaga% gunzip -c filelist.gz | more

lassen Sie filelist.gz entpacken und lenken das Ergebnis zur Ausgabe auf dem Bildschirm in einer Pipe an den Befehl more . Bei der Benutzung von gunzip -c bleibt die Datei auf der Festplatte komprimiert.

Der Befehl zcat ist identisch mit gunzip -c -- Sie können sich das als eine Version von cat für gepackte Dateien vorstellen.

Beim Komprimieren von Dateien haben Sie die Möglichkeit, eine der Optionen -1 , -2 , ... bis -9 zu benutzen, um Geschwindigkeit und Grad der Komprimierung zu bestimmen. Dabei bezeichnet -1 (oder --fast ) die schnellste Methode, die auch die am wenigsten verdichteten Dateien erzeugt, während -9 (oder --best ) die langsamste Methode ist, aber das kompakteste Ergebnis liefert. Wenn Sie keine Option angeben, wird mit der Voreinstellung -6 komprimiert. Keine dieser Optionen wirkt sich in irgendeiner Weise auf gunzip aus; gunzip kann die Datei unabhängig vom Grad der Komprimierung wieder entpacken.

gzip ist in der UNIX-Welt relativ neu. Die Programme, mit denen unter UNIX am häufigsten (de)komprimiert wird sind compress und uncompress , die noch aus der UNIX-Originalversion aus Berkeley stammen. compress und uncompress sind gzip und gunzip sehr ähnlich; compress legt gepackte Dateien als filename.Z statt filename.gz ab und benutzt einen etwas weniger effektiven Kompressionsalgorithmus.

Allerdings geht der Trend unter den Anhängern der freien Software in Richtung gzip , und das aus mehreren Gründen. Zunächst einmal arbeitet gzip effektiver. Außerdem ist ein Patentstreit aufgekommen über den Kompressionsalgorithmus, den compress benutzt -- das könnte dazu führen, daß Drittanbieter den compress -Algorithmus nicht mehr anwenden. Deshalb propagiert die Free Software Foundation die Benutzung von gzip und ist damit zumindest in der Linux-Gemeinde auf offene Ohren gestoßen. gzip ist auf viele Plattformen portiert worden und weitere werden folgen. Glücklicherweise kann gunzip auch die Dateien mit dem Suffix .Z entpacken, die mit compress erzeugt wurden.

Wir empfehlen, daß Sie gzip/gunzip für die (De)Komprimierung benutzen. Wenn Sie einmal auf eine Datei mit dem Suffix .Z stoßen, handelt es sich wahrscheinlich um eine compress -Datei, die Sie mit gunzip wieder entpacken können.

Frühe Versionen von gzip haben Dateien mit dem Suffix .z (kleines z!) statt .gz erzeugt. Um Verwechslungen mit .Z zu vermeiden, hat man dies geändert. Auf jeden Fall ist gunzip abwärtskompatibel zu einer Reihe von Dateisuffixen und Dateitypen.

Die Benutzung von tar

tar ist ein Archivierungswerkzeug für verschiedene Anwendungszwecke, mit dem sich viele Dateien zu einer einzigen Archivdatei zusammenfassen lassen. Dabei werden solche Informationen wie Zugriffsrechte und Dateieignerschaft erhalten. Der Name tar ist die Abkürzung für tape archive , weil dieses Programm ursprünglich für das Erzeugen von Backups auf Datenbändern benutzt wurde. Wir werden allerdings noch sehen, daß der Gebrauch von tar absolut nicht auf das Erstellen von Backups beschränkt ist.

Der Befehl tar hat das Format:

tar funktionoptionen dateien...

Dabei ist Funktion ein einzelner Buchstabe, der den auszuführenden Arbeitsschritt bezeichnet, Optionen ist eine Liste der (einbuchstabigen) Optionen zu diesem Arbeitsschritt, und Dateien ist die Liste der zu bearbeitenden Dateien. (Beachten Sie, daß die Funktion nicht durch eine Leerstelle von den Optionen getrennt wird.)

Die Funktion kann folgende Werte annehmen:

Die meisten dieser Arbeitsschritte werden Sie nur selten benötigen; die am häufigsten gebrauchten sind c, x und t.

Die gebräuchlichsten Optionen sind:

Es gibt noch andere Optionen, die wir weiter unten in diesem Abschnitt besprechen werden.

Obwohl die Syntax von tar auf den ersten Blick vielleicht verwirrend erscheint, ist sie eigentlich ganz einfach. Nehmen wir an, daß wir ein Verzeichnis namens mt mit folgenden Dateien haben:

rutabaga% ls -l mt 
total 37
-rw-r--r--   1 root     root           24 Sep 21  1993 Makefile
-rw-r--r--   1 root     root          847 Sep 21  1993 README
-rwxr-xr-x   1 root     root         9220 Nov 16 19:03 mt
-rw-r--r--   1 root     root         2775 Aug  7  1993 mt.1
-rw-r--r--   1 root     root         6421 Aug  7  1993 mt.c
-rw-r--r--   1 root     root         3948 Nov 16 19:02 mt.o
-rw-r--r--   1 root     root        11204 Sep  5  1993 st_info.txt

Wir wollen jetzt den Inhalt dieses Verzeichnisses in ein tar -Archiv packen. Dazu geben wir ein:

tar cf mt.tar mt

Das erste Argument zu tar ist die Funktion (in diesem Fall c (create) zum Erstellen). Dahinter stehen ggf. die Optionen. Wir haben als Option f mt.tar angegeben, um das resultierende tar-Archiv als mt.tar zu benennen. Das letzte Argument ist die Liste der Dateien, die archiviert werden sollen; in diesem Fall haben wir den Namen des Verzeichnisses angegeben. Damit erreichen wir, daß tar alle Dateien in diesem Verzeichnis zu einem Archiv zusammenfaßt.

Beachten Sie, daß das erste Argument zu tar einer der Funktionsbuchstaben -- gefolgt von einer Liste der Optionen -- sein muß. Aus diesem Grunde braucht vor den Optionen kein Bindestrich (-) zu stehen, wie es bei vielen anderen UNIX-Befehlen der Fall ist. Sie können bei tar einen Bindestrich einsetzen, etwa so:

tar -cf mt.tar mt

aber das ist wirklich nicht notwendig. In einigen Versionen von tar muß der erste Buchstabe eine Funktion bezeichnen, z.B. c, t oder x. In anderen Versionen spielt die Reihenfolge der Buchstaben keine Rolle.

Oft ist es eine gute Idee, die Option v zu benutzen; damit lassen Sie jede archivierte Datei anzeigen:

rutabaga% tar cvf mt.tar mt 
mt/
mt/st_info.txt
mt/README
mt/mt.1
mt/Makefile
mt/mt.c
mt/mt.o
mt/mt

Wenn Sie v mehrmals angeben, erhalten Sie noch ausführlichere Informationen:

rutabaga% tar cvvf mt.tar mt 
drwxr-xr-x root/root         0 Nov 16 19:03 1994 mt/
-rw-r--r-- root/root     11204 Sep  5 13:10 1993 mt/st_info.txt
-rw-r--r-- root/root       847 Sep 21 16:37 1993 mt/README
-rw-r--r-- root/root      2775 Aug  7 09:50 1993 mt/mt.1
-rw-r--r-- root/root        24 Sep 21 16:03 1993 mt/Makefile
-rw-r--r-- root/root      6421 Aug  7 09:50 1993 mt/mt.c
-rw-r--r-- root/root      3948 Nov 16 19:02 1994 mt/mt.o
-rwxr-xr-x root/root      9220 Nov 16 19:03 1994 mt/mt

Dies ist sehr nützlich wenn man sich vergewissern möchte, daß tar korrekt arbeitet.

Einige Versionen von tar erwarten, daß f als letzte der Optionen angegeben wird. Das rührt daher, daß tar hinter der Option f einen Dateinamen erwartet -- nämlich den Namen der tar-Datei, die geschrieben oder aus der gelesen werden soll. Falls Sie keinen Dateinamen angeben, nimmt tar aus historischen Gründen an, daß es das erste Bandlaufwerk (d.h., /dev/rmt0 ) benutzen soll. Im Abschnitt » Backups erstellen « werden wir besprechen, wie tar zum Erstellen von Backups auf Bandlaufwerken benutzt wird.

Jetzt sind wir soweit, daß wir die Datei mt.tar an andere Leute weitergeben können, damit diese sie auf ihrem System wieder entpacken. Dazu würden sie den Befehl:

tar xvf mt.tar

eingeben. Damit wird das Unterverzeichnis mt angelegt und alle Dateien in der o.a. Liste werden in dieses Unterverzeichnis geschrieben; die Eignerschaft und Berechtigungen bleiben dieselben wie auf dem Ursprungssystem. (Die neuen Dateien gehören dem Benutzer, der den Befehl tar xvf aufgerufen hat, es sei denn, man ist root.) Die Option x steht für »extract« (extrahieren). Wir haben wieder die Option v benutzt, um alle Dateien während des Extrahierens anzeigen zu lassen. Das erzeugt folgende Bildschirmanzeige:

courgette% tar xvf mt.tar 
mt/
mt/st_info.txt
mt/README
mt/mt.1
mt/Makefile
mt/mt.c
mt/mt.o
mt/mt

Wie wir sehen, speichert tar den Pfadnamen der Dateien relativ zu dem Verzeichnis, in dem die tar-Datei ursprünglich erstellt wurde. Beim Erstellen des Archivs haben wir mit dem Befehl tar cf mt.tar mt nur mt als Eingabedatei angegeben, also den Namen des Verzeichnisses, in dem die einzelnen Dateien stehen. Deshalb schreibt tar dieses Verzeichnis selbst sowie alle Dateien unterhalb dieses Verzeichnisses in die tar-Datei. Beim Entpacken der tar-Datei wird das Verzeichnis mt angelegt und die einzelnen Dateien werden dorthin geschrieben -- das sind die Schritte beim Erstellen des Archivs in umgekehrter Reihenfolge.

Als Voreinstellung werden alle tar-Dateien relativ zu dem Verzeichnis entpackt, in dem Sie tar aufrufen. Wenn Sie z.B. den Inhalt des Verzeichnisses /bin mit dem Befehl:

tar cvf bin.tar /bin

archivieren wollten, würde tar die Warnung:

tar: Removing leading / from absolute path names in the archive.

ausgeben. Das bedeutet, daß die Dateien innerhalb des Archivs im Unterverzeichnis bin abgelegt werden. Wenn diese tar-Datei dann entpackt wird, wird zunächst das Verzeichnis bin angelegt, und zwar unterhalb des Arbeitsverzeichnisses von tar -- nicht aber als /bin auf dem Zielsystem. Dies ist sehr wichtig, denn es soll schlimme Fehler beim Entpacken von tar-Dateien vermeiden. Anderenfalls würde das Entpacken einer tar-Datei, die als /bin archiviert wurde, in Ihrem Verzeichnis /bin Chaos stiften. Wenn Sie den Inhalt einer solchen tar-Datei wirklich nach /bin entpacken wollten, würden Sie vom Root-Verzeichnis / aus entpacken. Mit der Option P können Sie beim Archivieren dieses Verhalten umgehen, aber wir möchten nicht empfehlen, das zu tun.

Eine andere Möglichkeit, die tar-Datei mt.tar zu erstellen wäre, zunächst mit cd in das Verzeichnis mt zu wechseln und dann folgendes einzugeben:

tar cvf mt.tar *

Auf diese Weise würde das Unterverzeichnis mt nicht in der tar-Datei gespeichert werden; beim Entpacken würden die einzelnen Dateien direkt in Ihrem aktuellen Verzeichnis landen. Es gehört zu den Feinheiten der Etikette bei der Arbeit mit tar , daß man Dateien immer so archiviert, daß in der tar-Datei ein Unterverzeichnis enthalten ist -- wie wir das in unserem ersten Beispiel mit tar cvf mt.tar mt gezeigt haben. Aufgrund dessen wird beim Entpacken des Archivs das Unterverzeichnis angelegt und die Dateien werden dorthin geschrieben. Auf diese Weise können Sie sicherstellen, daß die Dateien nicht direkt in Ihrem aktuellen Verzeichnis stehen -- sie verschwinden im Unterverzeichnis und können keine Verwirrung stiften. Diese Arbeitsweise erspart es außerdem der Person, die das Entpacken vornimmt, ein Verzeichnis anlegen zu müssen, um das Archiv dort zu entpacken (wenn ein eigenes Verzeichnis gewünscht wird). Selbstverständlich wird es jede Menge Situationen geben, in denen Sie kein eigenes Verzeichnis anlegen wollen -- soviel zum Thema tar-Etikette.

Beim Erstellen von Archiven können Sie natürlich eine Liste der Dateien oder Verzeichnisse an tar übergeben, die archiviert werden sollen. In unserem ersten Beispiel haben wir tar nur das eine Verzeichnis mt angegeben, aber im vorherigen Abschnitt haben wir den * als Wildcard benutzt; die Shell expandiert das zur Liste aller Dateien im aktuellen Verzeichnis.

Vor dem Entpacken eines Archivs empfiehlt es sich, anhand des Inhaltsverzeichnisses festzustellen, wie das Archiv gepackt wurde. Auf diese Weise können Sie bestimmen, ob Sie selbst ein Unterverzeichnis anlegen müssen, in dem Sie das Archiv dann entpacken. Mit dem Befehl:

tar tvf tar-datei

erhalten Sie das Inhaltsverzeichnis der genannten tar-Datei . Beachten Sie, daß Sie mit der Funktion t nur ein v angeben müssen, um das ausführliche Listing zu erhalten:

courgette% tar tvf mt.tar 
drwxr-xr-x root/root         0 Nov 16 19:03 1994 mt/
-rw-r--r-- root/root     11204 Sep  5 13:10 1993 mt/st_info.txt
-rw-r--r-- root/root       847 Sep 21 16:37 1993 mt/README
-rw-r--r-- root/root      2775 Aug  7 09:50 1993 mt/mt.1
-rw-r--r-- root/root        24 Sep 21 16:03 1993 mt/Makefile
-rw-r--r-- root/root      6421 Aug  7 09:50 1993 mt/mt.c
-rw-r--r-- root/root      3948 Nov 16 19:02 1994 mt/mt.o
-rwxr-xr-x root/root      9220 Nov 16 19:03 1994 mt/mt

An dieser Stelle wird nichts entpackt -- wir betrachten lediglich das Inhaltsverzeichnis des Archivs. An den Dateinamen können wir ablesen, daß dieses Archiv alle Dateien im Unterverzeichnis mt beinhaltet. Beim Entpacken dieser tar-Datei wird also das Verzeichnis mt angelegt und alle Dateien werden dorthin geschrieben.

Es ist auch möglich, einzelne Dateien aus einem tar-Archiv zu extrahieren. Dazu geben Sie ein:

tar xvf tar-datei   datei(en)

wobei Datei(en) die Liste der zu extrahierenden Dateien ist. Wir haben bereits gezeigt, daß ohne die Angabe von Datei(en) das ganze Archiv entpackt wird.

Damit Sie einzelne Dateien extrahieren können, müssen Sie den kompletten Pfadnamen angeben, wie er in der tar-Datei steht. Wenn wir uns z.B. nur die Datei mt.c aus dem o.a. Archiv vornehmen wollten, würden wir eingeben:

tar xvf mt.tar mt/mt.c

Als Ergebnis würde das Unterverzeichnis mt erstellt und die Datei mt.c dorthin geschrieben werden.

tar kennt noch viel mehr Optionen, als wir hier erwähnt haben. Bisher haben wir die Möglichkeiten besprochen, die Sie wohl am häufigsten gebrauchen werden, aber insbesondere das tar von GNU verfügt über Erweiterungen, die es zu einem idealen Werkzeug bei der Erstellung von Backups usw. machen. In den Man-Pages zu tar sowie im folgenden Abschnitt finden Sie weitere Informationen hierzu.

tar mit gzip benutzen

tar komprimiert die Dateien, die es in seinen Archiven ablegt, in keiner Weise. Wenn Sie ein Archiv aus drei Dateien zu 200 KBytes erstellen, ist das Ergebnis ein Archiv von ungefähr 600 KB. Es ist gängige Praxis, tar-Archive mit gzip (oder dem älteren compress ) zu komprimieren. Mit folgenden Befehlen könnten Sie eine gzip -te tar-Datei erstellen:

tar cvf  tar-datei   dateien...  
gzip -9  tar-datei

Allerdings ist das mühselig und erfordert, daß Sie genug Speicherplatz haben, um die unkomprimierte tar -Datei zu speichern, bevor Sie mit gzip gepackt wird.

tar bietet eine interessante Möglichkeit, ein Archiv auf die Standardausgabe zu schreiben. Wenn Sie - als zu lesende oder zu schreibende tar-Datei angeben, wird tar die Standardein- oder -ausgabe benutzen. Dies können wir bei der Erstellung eines gepackten Archivs trickreich ausnutzen. Wir können z.B. eine gzip -te tar-Datei erstellen, indem wir:

 
tar cvf -  dateien...   | gzip -9 >  tar-datei  .tar.gz

eingeben. Damit erstellt zunächst tar ein Archiv aus den benannten Dateien und schreibt es auf die Standardausgabe; danach liest gzip die Standardeingabe, komprimiert sie und schreibt das Ergebnis auf seine eigene Standardausgabe; schließlich lenken wir die gzip -te tar-Datei in die tar-datei .tar.gz .

Wir können mit:

gunzip -9c  tar-datei  .tar.gz | tar xvf -

eine solche tar-Datei entpacken. Dabei dekomprimiert gunzip zunächst das genannte Archiv und schreibt das Ergebnis auf die Standardausgabe. Diese wird dann von tar als Standardeingabe gelesen und entpackt. UNIX macht Spaß -- finden Sie nicht?

Natürlich sind solche Befehlsfolgen immer reichlich mühsam beim Eintippen. Glücklicherweise kennt die GNU-Version von tar die Option z, mit der automatisch gzip -te Archive erstellt oder entpackt werden. (Wir haben die Besprechung dieser Option bis jetzt zurückgestellt, damit Sie ihre Vorteile wirklich zu schätzen lernen.) Wir könnten z.B. mit den Befehlen:

tar cvzf  tar-datei  .tar.gz  dateien...

und

tar xvzf  tar-datei  .tar.gz

gzip -te tar-Dateien erstellen und entpacken. Achten Sie darauf, daß Sie solche Dateien mit dem Suffix .tar.gz benennen, damit ihr Format offensichtlich wird. Die Option z kann zusammen mit anderen Funktionen ebenso eingesetzt werden wie mit t.

Nur die GNU-Version von tar unterstützt die Option z; wenn Sie das tar eines anderen UNIX-Systems benutzen, müssen Sie eventuell eine der längeren Befehlsfolgen eingeben, um dieselbe Aufgabe zu bewältigen. Fast alle Linux-Systeme benutzen das GNU- tar .

Mit dem hier Gesagten im Hinterkopf könnten Sie kurze Shell-Skripts oder Aliase schreiben, die Standard-tar-Dateien für Sie erstellen und entpacken. Unter bash könnten Sie folgende Funktionen in Ihre .bashrc einfügen:

tarc () { tar czvf $1.tar.gz $1 }
tarx () { tar xzvf $1 }
tart () { tar tzvf $1 }

Mit Hilfe dieser Funktionen würden Sie:

tarc  verzeichnis

eingeben, um ein einzelnes Verzeichnis in ein komprimiertes Archiv zu verwandeln. Die Archivdatei bekäme den Namen verzeichnis .tar.gz . (Achten Sie darauf, daß der Verzeichnisname nicht mit einem Schrägstrich endet; in dem Fall würde das Archiv als .tar.gz unterhalb des angegebenen Verzeichnisses erstellt. Um den Inhalt einer komprimierten tar-Datei anzuzeigen, geben Sie ein:

tart  datei  .tar.gz

Wenn Sie ein solches Archiv entpacken möchten, geben Sie ein:

tarx  datei  .tar.gz

tar-Tricks

Wir haben bereits gesagt, daß tar die Eignerschaft und Zugriffsrechte der Dateien eines Archivs ebenso wie die Verzeichnisstruktur und alle Links erhält. Deshalb ist es hervorragend geeignet, einen kompletten Verzeichnisbaum von einer Stelle im System zu einer anderen zu kopieren oder umzustellen (das funktioniert sogar zwischen verschiedenen Systemen). Mit der Option -, die wir oben beschrieben haben, können Sie eine tar-Datei auf die Standardausgabe schreiben, von wo Sie dann als Standardeingabe an anderer Stelle im System wieder gelesen und entpackt werden kann.

Nehmen wir an, daß ein Verzeichnis existiert, welches die beiden Unterverzeichnisse from-stuff und to-stuff enthält. Unter from-stuff befindet sich ein kompletter Verzeichnisbaum mit symbolischen Links usw. -- es wäre schwierig, so etwas mit einem rekursiven cp wiederherzustellen. Um den kompletten Verzeichnisbaum unterhalb von from-stuff nach to-stuff zu bewegen, könnten wir eingeben:

cd from-stuff
tar cf - . | (cd ../to-stuff; tar xvf -)

Einfach und elegant, nicht wahr? Wir haben uns in das Verzeichnis from-stuff begeben, eine tar-Datei dieses Verzeichnisses erzeugt und sie auf die Standardausgabe geschrieben. Dieses Archiv wurde von einer Subshell eingelesen (das sind die Befehle zwischen den runden Klammern); die Subshell springt mit cd in das Zielverzeichnis ../to-stuff (also relativ zu from-stuff ) und führt dann tar xvf aus, indem die Standardeingabe gelesen wird. Bei diesem ganzen Vorgang wird keine tar-Datei auf die Festplatte geschrieben; die Daten werden lediglich durch eine Pipe von einem tar-Prozeß zu einem anderen geschickt. Mit der Option v beim zweiten tar -Prozeß haben wir jede Datei anzeigen lassen, die entpackt wird; auf diese Weise konnten wir verfolgen, daß der Befehl ordnungsgemäß funktioniert.

Tatsächlich können Sie mit diesem Trick Verzeichnisbäume sogar (über das Netzwerk) von einem Rechner auf einen anderen bewegen; fügen Sie dazu einfach den passenden rsh -Befehl innerhalb der Subshell rechts vom Pipe-Symbol ein.

Die Remote-Shell würde dann tar ausführen, indem sie das Archiv von der Standardeingabe liest. (GNU- tar bietet sogar Möglichkeiten, automatisch tar-Dateien von anderen Rechnern über das Netzwerk zu lesen und dorthin zu schreiben; Details hierzu finden Sie in der Man-Page zu tar .)


Inhaltsverzeichnis Vorherige Abschnitt Nächste Abschnitt