Archivieren und Datenkomprimierung

tar: Tape ARchiver

Wie find ist auch tar eines der älteren UNIX®-Werkzeuge. Dementsprechend „speziell“ ist die Syntax:

tar [Option(en)] [Datei(en)]

Hier finden Sie eine Liste mit einigen Optionen. Alle Optionen haben auch eine längere Schreibweise, die Sie aber bitte in der man page von tar nachlesen wollen.

[Note]Anmerkung

der den kurzen Optionsangaben vorangehende Strich (-) kann bei der aktuellen Version von tar weggelassen werden, es sei denn, es folgt eine kurze Schreibweise nach einer Langversion.

  • c: erstellt ein neues Archiv.

  • x: extrahiert Dateien aus einem bestehenden Archiv.

  • t: listet die Dateien eines bestehenden Archives auf.

  • v: listet die einem Archiv hinzugefügten oder daraus extrahierten Dateien auf. In Verbindung mit der Option t (siehe oben) wird eine lange Liste von Dateien anstelle einer Kurzform ausgegeben.

  • f <datei_name>: erstellt ein Archiv mit dem Namen datei_name, extrahiert Dateien aus einem Archiv mit diesem Namen oder listet die Dateien eines Archivs mit dem Namen file_name auf. Wird dieser Parameter weggelassen so wird als Standard /dev/rmt0 angenommen, da dies im Allgemeinen der spezielle Dateiname für einen Streamer ist. Ist der Parameter für die Datei ein - (ein Strich) so wird die Ein- oder Ausgabe (je nachdem, ob es sich um eine Erstellung eines Archivs oder eine Extrahierung aus einem Archiv handelt) auf die Standard-Ein-/Ausgabe geleitet.

  • z: weist tar an, das zu erstellende Archiv mit gzip zu komprimieren. Bei einer Extraktion wird damit angegeben, dass das Archiv mit gzip komprimiert wurde.

  • j: bedeutet das Gleiche wie z, nur, dass es sich bei dem Komprimierungsprogramm um bzip2 handelt.

  • p: bei der Extraktion von Dateien aus einem Archiv werden alle Dateiattribute beibehalten (Besitzrechte, letzter Zugriff, usw.). Sehr hilfreich bei Sicherungen eines Systems.

  • r: fügt eine auf der Kommandozeile angegebene Liste von Dateien zu einem existierenden Archiv hinzu. Beachten Sie hierbei, dass das Archiv, dem Sie die Dateien hinzufügen wollen, nicht komprimiert sein darf!

  • A: fügt auf der Kommandozeile angegebene Archive zu einem mit der Option f erstellten Archiv hinzu. Wie bei der Option r dürfen auch hier die Archive nicht komprimiert sein.

Es gibt eine Unmenge weiterer Optionen, die Sie ihrer Gesamtheit in tar(1) finden können. Schauen Sie sich dort beispielsweise die Option d an. Lassen Sie uns mit einem kleinen Beispiel fortfahren. Sie wollen ein Archiv erstellen, dass alle Bilder im Verzeichnis /shared/images enthält, mit bzip2 komprimiert ist, den Namen images.tar.bz2 trägt und in Ihrem persönlichen Verzeichnis gespeichert wird. Dazu verwenden Sie die folgende Befehlszeile:

 #
 # Achtung: Sie müssen sich dazu in dem Verzeichnis befinden, aus dem
 # die zu archivierenden Dateien stammen!
 #
$ cd /shared
$ tar cjf ~/images.tar.bz2 images/

Wie Sie sehen, haben wir hier drei Optionen benutzt: c zur Erstellung des Archivs, j zur Komprimierung mit bzip2 und f ~/images.tar.bz2 zur Angabe, dass das Archiv den Namen images.tar.bz2 bekommt und in Ihrem persönlichen Verzeichnis abgelegt wird. Nun prüfen wir, ob das Archiv valide ist und lassen uns dazu die archivierten Dateien auflisten:

 #
 # Gehen Sie dazu in Ihr persönliches Verzeichnis
 #
$ cd
$ tar tjvf images.tar.bz2

Wir weisen also tar an, die Dateien des Archivs images.tar.bz2 (f images.tar.bz2) aufzulisten (t), teilen ihm mit, dass das Archiv mit bzip2 komprimiert wurde (j) und dass wir eine ausführliche Liste sehen wollen (v). Angenommen, Sie haben das Verzeichnis mit den Bildern mittlerweile gelöscht. Glücklicherweise ist das Archiv in Ordnung und Sie können es wieder an den ursprünglichen Platz (/shared) entpacken. Dabei wollen Sie aber die Funktionalität Ihres find-Befehls für neue Bilder nicht durcheinander bringen. Daher müssen Sie nun die Option zur Erhaltung aller Dateiattribute benutzen:

 #
 # Wechseln Sie zum Zielverzeichnis
 #
$ cd /shared
$ tar jxpf ~/images.tar.bz2

Das wars!

Als Nächstes wollen Sie vielleicht das Verzeichnis images/cars aus dem Archiv extrahieren, aber nur dieses Verzeichnis, sonst nichts. Dazu geben Sie die folgende Befehlszeile ein:

$ tar jxf ~/images.tar.bz2 images/cars

Falls Sie versuchen, spezielle Dateien zu archivieren wird tar die Dateien behandeln, als das, was sie sind (spezielle Dateien) und ihren Inhalt nicht sichern. Daher können Sie beispielsweise die Datei /dev/mem in ein Archiv einfügen. tar geht auch korrekt mit Links um, also brauchen Sie sich darum ebenfalls keine Sorgen machen. Zum Thema „symbolische Links“ sollten Sie sich die Option h im Handbuchauszug ansehen.

bzip2 und gzip: Programme zur Datenkompression

Wir haben diese beiden Programm bereits bei der Behandlung von tar erwähnt. Entgegen der Funktionsweise von WinZip® unter Windows® wird das Archivieren und Komprimieren von Daten von zwei verschiedenen Programmen erledigt – tar zur Archivierung und die die zwei Programme, über die wir jetzt schreiben, zur Datenkompession: bzip2 und gzip. Sie können auch andere Komprimierungs-Programme benutzen: zip, arj oder rar existieren auch unter GNU/Linux, werden aber seltener benutzt.

Am Anfang wurde bzip2 eigentlich als Nachfolger für gzip entwickelt. Seine Kompressionsrate war im Allgemeinen besser als bei gzip, dafür braucht es mehr Arbeitsspeicher zur Bearbeitung der Daten. gzip wird allerdings aus Kompatibilitätsgründen immer noch oft benutzt.

Beide Programme haben eine ähnliche Syntax:

gzip [Option(en)] [Datei(en)]

Wenn kein Dateiname angegeben wird warten beide Befehle auf Daten von der Standardeingabe und geben das Resultat ihrer Verarbeitung an die Standardausgabe aus. Daher können beide Programme auch in Pipes benutzt werden. Beide Programme besitzen auch eine Reihe von gemeinsamen Optionen:

  • -1, ..., -9: setzt die Kompressionsrate fest. Je höher die Ziffer, desto stärker die Komprimierung, aber auch desto langsamer die Verarbeitung.

  • -d: de-komprimieren von Dateien. Ein Äquivalent zu den Befehlen gunzip oder bunzip2.

  • -c: gibt das Ergebnis der Kompression/Dekompression von als Parameter angegebenen Dateien an die Standardausgabe.

[Warning]Warnung

Standardmäßig löschen beide Programme ohne die Angabe der Option -c die Dateien, die sie komprimiert oder dekomprimiert haben. Bei bzip2 können Sie das durch die Benutzung der Option -k vermeiden. gzip besitzt keine ähnliche Option.

Es folgen ein paar Beispiele. Nehmen wir an, Sie möchten alle Dateien im aktuellen Verzeichnis mit der Endung .txt komprimieren und benutzen dazu bzip2 mit maximaler Kompressionsrate. Dazu geben Sie diesen Befehl ein:

# bzip2 -9 *.txt

Nun wollen Sie Ihr Bildarchiv jemandem zeigen, der aber anstelle von bzip2 nur gzip benutzen kann. Dazu müssen Sie das ganze Archiv nicht entpacken und wieder komprimieren. Entpacken Sie es auf die Standardausgabe, nutzen eine Pipe, komprimieren die Daten der Standardeingabe und leiten die Ausgabe in das neue Archiv. Und das geht so:

bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz

Sie könnten auch bzcat anstelle von bzip2 -dc nehmen. Es gibt ein Äquivalent für gzip, der Name ist aber zcat, nicht gzcat. Sie können auch bzless statt bzip2 Datei und zless statt gzip verwenden, falls Sie die komprimierten Dateien direkt ansehen wollen anstatt sie erst zu dekomprimieren. Als Übung sollten Sie jetzt den Befehl finden, mit dem Sie – ohne bzless oder zless zu benutzen – komprimierte Dateien direkt ansehen können, ohne sie vorher zu entpacken.