...braucht man, um z.B. große Dateien auf relativ kleine Disketten speichern zu können, oder einfach um Platz auf der Festplatte zu sparen oder schneller an Daten aus dem Netz zu kommen. Komprimiert werden kann natürlich nur etwas, das ausreichend Redundanz aufweist, wie z.B. ein Textdokument. Bilder (z.B. in gif-Format) hingegen, die ja an sich schon eine komplexe Darstellung von Pixeln repräsentieren, lassen sich meist nur schlecht oder gar nicht komprimieren.
Kompressionswerkzeuge lesen Dateien ein und erzeugen eine Ausgabe, die dann (hoffentlich) wesentlich weniger Platz in Anspruch nimmt. Im Normalfall wird die unkomprimierte Datei bei diesem Vorgang gelöscht (man will ja Platz einsparen) und die neu entstandene kann so nicht direkt verwendet werden. Um sie wieder in ihren ursprünglichen Zustand zurück zu versetzen, benötigt man das entsprechende Dekompressionsprogramm, dessen Name häufig bis auf einen Parameter genauso lautet, wie der des Kompressionsprogrammes.
Im Gegensatz zu den Kompressionswerkzeugen versuchen diese Tools nicht die Daten an sich zu verringern. Sie sind dazu da, die manchmal endlos langen Dateistrukturen, die auch schon bei kleineren Projekten auftreten können, in einen sogenannten "Container" abzulegen. Dabei werden nicht nur die Inhalte der einzelnen Dateien, sondern auch Informationen über die Baumstruktur an sich gespeichert. Dabei muß man in der Regel nicht alle Dateien bzw. Unterverzeichnisse explizit angeben, sondern kann durch ein Joker-Zeichen oder durch die Angabe der die einzelnen Dateien beinhaltenden Verzeichnisse auf bequeme Weise sehr viele Dateien auf einmal in den Container überführen.
Diese Containerdatei wird dann als Ganzes z.B. übers Netz verschickt, um -am Zielort angekommen- von einem entsprechenden Entpackungstool wieder in die ursprüngliche Baumstruktur überführt zu werden.
Der Vorteil dieser Vorgehensweise mag vielleicht nicht sofort ersichtlich sein, da ja im direkten Sinne kein Platz eingespart wird; dieser "Platz" entsteht aber beim Datentransfer, wenn man bedenkt, daß jede noch so kleine zu übermittelnde Datei einen Overhead für Einleitung und Abschluss der Übertragungsaktion benötigt. Packt man alle Dateien in eine große Container-Datei, werden alle diese "unnötigen" Informationen eingespart.
Das von Jean-Loup Gailly ursprünglich für Unix entwickelte Kompressionsprogramm gzip wird im Rahmen des GNU-Projektes auf unzähligen FTP-Servern angeboten. Gzip komprimiert Dateien mit dem LZ77 Lempel-Ziv Algorithmus und erzielt dadurch erheblich bessere Kompressionsraten als das mit dem LZW-Algorithmus arbeitende compress-Programm. Weil es sich ansonsten sehr ähnlich verhält, ist abzusehen, daß es compress als Standardpacker im Bereich der freien (also lizenzfreien) Software verdrängen
wird. Mit gzip können auch Dateien ausgepackt werden, die mit compress oder pack gepackt wurden. Archive, die mit zip gepackt wurden, können mit gzip nur dann ausgepackt werden, wenn sie nur eine einzige Datei enthalten und mit der "deflation" Methode gepackt wurden.
gzip komprimiert einzelne Dateien und ersetzt die Urdatei durch die komprimierte, indem es an den Dateinamen die Endung ".gz" anhängt. Wenn der Dateiname durch Anhängen der Endung unzulässig lang würde, verkürzt gzip automatisch den Namen, um die erforderliche Anzahl von Zeichen. Es werden dabei die einzelnen Blöcke gekürzt, nicht der ganze Dateinamen. Also angenommen, man hätte 11 Zeichen zur Verfügung, würde z.B. datei.x.abcdef.h zu dat.x.sbc.h gekürzt und nicht zu datei.x.abc.
Die Zeitmarke der Datei und die Zugriffsrechte unter Unix bleiben beim Komprimieren erhalten. Um die Wiederherstellung der Zeitmarke und des Dateinamens sicherzustellen, werden diese Daten miteingepackt und können beim Dekomprimieren verwendet werden. Außerdem wird eine CRC-Checksumme mit eingepackt, mit der beim Auspacken automatisch die Integrität der Daten geprüft wird.
Wenn gzip ohne Dateinamen aufgerufen wird, liest es von der Standardeingabe und schreibt auf die Standardausgabe. Der gleiche Effekt wird erzielt, wenn anstelle einer Eingabedatei ein Minuszeichen "-" angegeben wird.
Unter dem Namen gunzip arbeitet das Programm wie gzip -d, packt also komprimierte Dateien der oben aufgeführten Formate aus. gunzip erwartet die Endung ".gz", "-gz", ".tgz", ".taz", ".z", "-z", "-z" oder ".Z" an dem Dateinamen. Außerdem wird die Datei auf eine "magische Zahl" überprüft, die mit gzip komprimierte Dateien identifiziert. Nach dem Auspacken bleiben die Zugriffsrechte und das Erstellungsdatum der Datei erhalten.
zcat arbeitet wie gzip -dc, schreibt also die entkomprimierte Datei auf die Standardausgabe und läßt die komprimierte Datei unberührt. Wenn die Eingabedatei die korrekte magische Zahl enthält, wird sie ausgepackt, egal welche Endung der Dateiname hat.
Da übers Internet zunehmend Daten zwischen verschiedenen Betriebssystemen ausgetauscht werden, steht für Otto-Normalverbraucher auch eine Windows-Version von gzip zur Verfügung. In der Eingabeaufforderung benutzt man dann exakt denselben Programmaufruf wie in einer Unix-Shell:
Um eine Datei zu komprimieren benutzt man den Aufruf "gzip datei.xyz ". Dadurch entsteht eine neue Datei "datei.xyz.gz" und die alte wird gelöscht.
Um eine Datei zu dekomprimieren, verwendet man "gunzip datei.xyz.gz". Dadurch wird die alte Datei ("datei.xyz") wiederhergestellt und die komprimierte Version automatisch gelöscht.
Man kann auch durch einen einzigen Aufruf von gzip mehrere Dateien gleichzeitig komprimieren: "gzip datei1.abc datei2.uvw datei3.xyz"
oder ein Joker-Zeichen verwenden: " *.[ch] " komprimiert alle Dateien des aktuellen Verzeichnisses, die auf "c" oder "h" enden.
Die vollständige Syntax lautet gzip [-cdfhlLnNqrtvV19] [-S Endung [Datei ...]
bzw gunzip [-cfhlLnNqrtvV] [-S Endung [Datei ...]
Beispiel:

Bemerkung:
Da die Dekompression einer Datei sehr viel schneller geht als ein Kompressionsvorgang, ist es manchmal (bei sehr großen Dateien) sinnvoll folgenden Aufruf zu benutzen:
gunzip < riesendatei.dat.gz riesendatei.dat
----Benutzung-----
rm riesendatei.dat
Dann wird die komprimierte Variante der riesendatei bei der Dekompression nicht gelöscht, so dass man sie nachher nicht wieder komprimieren muss (was notwendig ist, weil unser Platz für so eine riesendatei zu klein ist). Die Löschung der jetzt unkomprimierten Datei geht dann blitzschnell.
-c
schreibt die (ent)komprimierte Datei auf die Standardausgabe, anstatt die Datei zu ersetzen
-d
(decompress) dekomprimiert die Datei (s.o.)
-f
(force) siehe Kompressionsraten und unkomprimierbare Dateien
-h
(help) gibt eine Kurzhilfe zum Programm aus
-l
(list) zeigt den in einer mit gzip komprimierten Datei gespeicherten originalen Dateiname, sowie
die originale und die gepackte Größe an; wenn die -v-Option gesetzt ist, wird zusätzlich die
Zeitmarke und die Checksumme ausgegeben
-L
(license) gibt eine Kurzfassung des Lizenztextes aus
-n
(noname) unterdrückt beim Einpacken das Speichern des Dateinamen und der Zeitmarke
(nur wenn der Name nicht gekürzt werden muß); beim Auspacken wird die Wiederherstellung
des originalen Namens mit der Zeitmarke unterdrückt; diese Option ist Voreinstellung
zum Entpacken
-N
(name) veranlasst beim Einpacken die Sicherung des originalen Namens und der Zeitmarke in der
gepackten Datei und beim Auspacken die Wiederherstellung dieser Daten an der
dekomprimierten Datei; diese Option ist Voreinstellung beim Einpacken
-q
(quiet) unterdrückt alle Warnungen
-r
(recursive) packt alle Dateien in den angegebenen Unterverzeichnissen
-S Endung
veranlaßt die Verwendung der neuen Endung anstelle von ".gz"
-t
(test) prüft die Integrität der angegebenen Datei
-v
(verbose) gibt den Namen und den Kompressionsfaktor für jede Datei aus
-V
(Version) gibt die Versionsnummer des Programms aus
- Ziffer
bestimmt mit einer Ziffer von 1 bis 9 die Kompressionstiefe; 1 bedeutet schnell und schlecht
komprimiert, 9 bedeutet langsam und optimal komprimiert (siehe nächster Abschnitt)
Bei gzip werden Optionen angeboten, mit denen man die Kompressionsrate beeinflussen kann. -9 sorgt für die bestmögliche Kompression, -1 für die schnellste. Zwischen diesen beiden Extrema liegen Zwischenlösungen , bei denen CPU-Zeitbedarf und Kompressionsrate gegeneinander entsprechend abgewogen werden. Da aller Erfahrung nach Plattenplatz immer ein (zu) knapp bemessenes Gut ist, könnte man meinen, die Option -9 böte den vernünftigsten Ansatz. Dies trifft jedoch nicht immer zu. In vielen Fällen ist nämlich der durch den Optionswert -9 im Vergleich zu einem moderaten Wert (-5 oder-6) erreichbare Kompressionswert äußerst dürftig; dabei verbraucht man aber leicht das Zwei - bis Vierfache an CPU-Zeit gegenüber dem -5 oder -6 Fall.
Es gibt allerdings auch einige schwarze Schafe unter den zu komprimierenden Dateien, sog. "verrauschte" Dateien, deren Bytes nicht einem der üblichen Schemata, wie z.B. in einem normalen Text, folgen. Bei einer solchen Datei kann selbst die Benutzung von Option -9 zu einer Vergrößerung führen. In einem solchen Fall verwirft gzip normalerweise die komprimierte Variante und lässt dem Benutzer die ursprüngliche Datei. Man kann gzip aber mit dem Parameter -f (force) dazu zwingen "unvernünftig" zu handeln und die alte Datei durch die größere, pseudokomprimierte Datei zu ersetzen.
Für einige der üblichen Dateiformate hier eine kleine Tabelle mit den entsprechenden Kompressionsraten:
|
Dateiformat |
Endung |
Kompressionsrate |
|
Textdatei |
txt |
63% |
|
Word Dokument |
doc |
77% |
|
jpg-oder gif-Datei |
jpg/gif |
0% |
|
dll-Datei |
dll |
50% |
|
Netscape-Datei |
htm/html |
61% |
|
Bitmap-Datei |
bmp |
73% |
Der Name "tar" ist aus historische Gründen aus "tape archiver" abgeleitet. Falls die Option -f nicht angegeben ist, versucht tar auf ein Tape-Device zu schreiben und da das im Normalfall nicht erwünscht ist, ist dieser Parameter sinnvollerweise immer anzugeben.
Für tar gilt dasselbe wie für gzip, was die Benutzung unter den verschiedenen Betriebssysteme angeht: Unter Unix/Linux ist es automatisch vorhanden, für den Windows-Rechner daheim kann man sich die Windows-Version von tar besorgen, deren Aufruf in der Windows-Eingabeaufforderung exakt dem in einer Unix-Shell entspricht.
tar cvf container files
Wobei "c" für create steht und den Container mit dem gewünschten Namen erzeugt. "v" steht für verbose mode und gibt Informationen über die ausgeführte Aktion aus.
In files werden die Dateien angegeben, die in den Container aufgenommen werden sollen. z.B.erzeugt " tar cvf mycontainer *.txt Makefile" den Container mycontainer und die Ausgabe
text1.txt
text2.txt
text3.txt
text4.txt
Makefile
tar tvf container
wobei "t" für table of contents steht
Wenn man nur bestimmte Dateien entpacken will, so werden diese mit folgendem Aufruf aus dem Container kopiert:
tar xvf container files
wobei "x" für extract steht
Ist die Liste der files leer, so entpackt tar den ganzen Container.
Beispiel:

...findet man auf folgender Seite: http://www.ctyme.com/linuxdoc/MAN0761.HTM .
Pipeling ist ein unter Unix häufig verwendetes Verfahren, bei dem man durch Hintereinanderschalten verschiedener einfacher Werkzeuge eine komplexere Dateitransformation bewirkt. Die Werkzeuge werden von links nach rechts hintereinander benutzt, wobei jede Aktion auf die Standardausgabe geschrieben und von dort vom nächsten Werkzeug gelesen wird.
tool1 meineDatei | tool2| tool3| tool4| tool5| tool6| tool7 meineDatei.xyz
meineDatei wird dann am Ende in meineDatei.xyz abgelegt.
Für gzip kann man Pipelining natürlich genauso verwenden:
z.B.
tool1 meineDatei | tool2| tool3| tool4| tool5| tool6| gzip meineDatei.xyz.gz
Will man tar und gzip zusammen verwenden gibt es bei gtar (GNU-Version von tar) die Spezialoption "-z". Sie erzwingt eine automatische Komprimierung des entstandenen Containers.
Bsp. Aufbau: gtar cvzf doc.tar.gz. *.txt
Bsp. Extraktion: gtar xvzf doc.tar.gz. me.txt
Der FTP-Server der University of Texas in Austin bietet eine Sammlung von Windows-Versionen der Standard-Tool des GNU-Projektes an. Der Server ist unter folgender URL zu erreichen:
ftp://microlib.cc.utexas.edu/microlib/nt/gnu
Diese ist allerdings nicht mehr auf dem neuesten Stand und enthält viele unnötige Programme. Besser:
http://rynt02.rz.uni-karlsruhe.de/Kurse/CompArch-Kurs/gnutools.zip
Die zip-Datei muss mit pkzip oder winzip ausgepackt werden und alle .exe und die win32gnu.dll Dateien sollten in ein Verzeichnis, für das eine Umgebungsvariable eingetragen ist, kopiert werden (z.B. C:/Bin).
Die Mac-Versionen sind auf der faq-Seite verfügbar, deren Adresse im nächsten Absatz angegeben ist.
http://www.uni-karlsruhe.de/~Harald.Meyer/CompArch/
http://wonko.kammer.uni-hannover.de/AIX/GTar.html
http://www.faqs.org/faqs/compression-faq/
Anja Kleber 25.Januar 1999