gzip

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
gzip
Logo
Screenshot
Hilfeanzeige in der Kommandozeile
Basisdaten
Entwickler Jean-Loup Gailly und Mark Adler
Aktuelle Version 1.8
(26. April 2016)
Betriebssystem plattformübergreifend verfügbar
Programmiersprache C
Kategorie Datenkompression
Lizenz GPL (Freie Software)
www.gnu.org/software/gzip

gzip ist ein freies Kompressionsprogramm, das, ebenso wie das entsprechende Dateiformat gzip, praktisch für alle Computerbetriebssysteme verfügbar ist (unter den Bedingungen der GPL auch im Quelltext).

Allgemein ist gzip die Kurzform für „GNU zip“, wobei „zip“ vom englischen Wort für den Reißverschluss entlehnt wurde. OpenBSD hat eine BSD-lizenzierte Reimplementierung unter den Namen gzip(1), gunzip(1) sowie gzcat(1) vorgenommen, die völlig kompatibel zu den GNU-Werkzeugen ist.[1]

gzip bietet einen guten Kompressionsgrad und ist frei von patentierten Algorithmen. Es wurde ursprünglich von Jean-Loup Gailly entwickelt, um das unter Unix verwendete compress[2] zu ersetzen. Mark Adler schrieb das Dekompressionsprogramm gunzip.

Technik[Bearbeiten | Quelltext bearbeiten]

gzip basiert auf dem Deflate-Algorithmus, der eine Kombination aus LZ77 und Huffman-Kodierung ist. Deflate wurde als Reaktion auf die Patente entwickelt, die auf LZW und anderen Kompressionsalgorithmen bestanden. Auch das ZIP-Dateiformat verwendet hauptsächlich Deflate zur Komprimierung, darf aber ansonsten nicht mit gzip verwechselt werden.

Die Blockgröße bei gzip beträgt 32.000 Bytes. Wenn eine Abfolge von Bytes sich in den vorherigen 32.000 Bytes nicht wiederholt, wird sie unkomprimiert in der .gz-Datei gespeichert.[3] Diese Blockgröße ist gegenüber modernen Kompressionsprogrammen (z. B. bzip2 mit 100 bis 900 KB, rzip als Extremfall mit 900 MB) veraltet, jedoch ist gzip immer noch eines der schnellsten Kompressions-Programme und kann vielseitig eingesetzt werden, zum Beispiel in Verbindung mit einer sogenannten Pipeline – die Ausgabe ("standard out") eines Programms kann die Eingabe ("standard in") von gzip darstellen und umgekehrt.

Um die Entwicklung von Software zu vereinfachen, die Datenkompression nutzt, wurde die zlib-Bibliothek geschrieben. Sie unterstützt das gzip-Dateiformat und die Deflate-Kompression. Die Bibliothek ist weit verbreitet, da sie klein, effizient und vielseitig ist.

Aufbau[4][Bearbeiten | Quelltext bearbeiten]

Initialisierung [0-1][Bearbeiten | Quelltext bearbeiten]

Die ersten beiden Bytes bilden den sogenannten "Identification-Code" des Formats, dieser ist bei dem gzip-Format inimmer der selbe. Genormt ist dieser Header mit den Bytes 0x1f und 0x8b (Hexadezimal) oder auch 31 und 139 (Dezimal). Diese Bytes sind zur Verifizierung des Datei-Formats (gzip) und um erste, auffällige Mängel der Datei aufzuzeigen. Wenn diese Initialisierung falsch oder gar nicht erfolgt, wird es Fehler geben, die entweder einen Fehler verursachen oder falsche End-Dateien (nach der Dekompression) hervorbringen.

Kompressionsmethode [2][Bearbeiten | Quelltext bearbeiten]

Das Byte auf dem Index (von 0 ["null"] beginnend) 2 gibt an, um welche Kompressionsmethode es sich handelt, bzw. welche Aktion verwendet wurde, um die Datei(en) ab zu speichern.

Byte Wert Bedeutung
0 Kopie der Datei (keine Aktion durchgeführt)
1 Komprimierung
2 (Ver-)Packen
3 LZH-Format
4 Reserviert
5 Reserviert
6 Reserviert
7 Reserviert
8 "Deflate" soll eine schnellere Alternative zum Komprimieren bereitstellen (derzeitig nur wenig Informationen)

Spezielle Informationen ("Flags") [3][Bearbeiten | Quelltext bearbeiten]

Auf dem Index (von 0 ["null"] beginnend) 3, liegt das Byte, das für besondere Informationen genutzt wird. Hier gibt es wieder bestimmte Werte, die eine festgelegte Bedeutung haben.

Wichtig: Hier werden immer die Bits beachtet! Das bedeutet, dass 10111000 (binär) (19 [dezimal]; 0x13 [hexadezimal]) die Bedeutung: Die Datei ist ASCII-Text, ist eine einzige Datei, hat eine CRC16-Nummer, besitzt extra Informationen und der originale Name ist bekannt

Byte Wert Bedeutung
1 (Bit-Stelle 1) Datei hat einen ASCII-Text
2 (Bit-Stelle 2) CRC16 vorhanden. (Dient als Prüfwert. Damit wird bestimmt, ob die Datei möglicherweise

beschädigt oder nicht richtig übertragen wurde.)

4 (Bit-Stelle 3) Bestimmt, ob extra Informationen bereitgestellt werden
8 (Bit-Stelle 4) Original Name vorhanden
16 (Bit-Stelle 5) Kommentar vorhanden
32 (Bit-Stelle 6) Reserviert (muss 0 ["null"] sein)
64 (Bit-Stelle 7) Reserviert (muss 0 ["null"] sein)
128 (Bit-Stelle 8) Reserviert (muss 0 ["null"] sein)

Letzte Modifikation (Zeit) [4-7][Bearbeiten | Quelltext bearbeiten]

Dieser Wert wird von 4 Bytes bestimmt und gibt eine Zeit in Unixzeit an.

Betriebssystem [8][Bearbeiten | Quelltext bearbeiten]

Dieses Byte gibt an, auf welchem Betriebssystem die Datei Komprimiert wurde.

Byte Wert Bedeutung
0 FAT-System (alte Microsoft Betriebssysteme)
1 Amiga
2 VMS oder OpenVMS
3 Unix
4 VM oder CMS
5 Atari TOS
6 HPFS
7 Macintosh
8 Z-System
9 CP/M
10 TOPS-20
11 NTFS (NT) (neuere Microsoft Betriebssysteme)
12 QDOS
13 Acorn RISC OS
255 Unbekannt

Beispielaufrufe[Bearbeiten | Quelltext bearbeiten]

Eine Datei packen:

gzip <Dateiname>

Eine gepackte Datei entpacken:

gzip -d <Dateiname>

oder

gunzip <Dateiname>

Rekursiv alle Dateien in einem Verzeichnis packen, und die Kompressionsrate angeben:

gzip -rv <Verzeichnis>

Eine komprimierte Text-Datei ausgeben:

zcat <Dateiname>

Eine defekte komprimierte Datei bis zur Fehlerstelle entpacken:

zcat <gzip-Datei> > <Ziel-Datei>

gzip-komprimierte Dateien[Bearbeiten | Quelltext bearbeiten]

gzip
Dateiendung:
.gz
MIME-Type:
application/gzip[5]
Magische Zahl:

\x1F\x8B\x08 (ASCII-C-Notation)

Entwickelt von: Jean-Loup Gailly und Mark Adler
Art: Datenkompression
Container für: eine beliebige Datei
Erweitert von: compress
Standard(s): RFC 1952
Website: gzip.org

Die übliche Dateiendung für gzip-komprimierte Dateien ist heute .gz, früher auch .z.

Da gzip nur einzelne Dateien komprimieren kann, werden mehrere Dateien bzw. Verzeichnisbäume üblicherweise zunächst mit tar zu einer Tarball genannten Archivdatei zusammengefasst, welche anschließend mit gzip komprimiert wird.

Zunächst werden Dateien (Kreise) mit tar gepackt, anschließend wird dieses Archiv mit gzip komprimiert.

Solche komprimierten Archivdateien tragen dann meist die doppelte Endung .tar.gz oder auch einfach .tgz.

Diese Methode ermöglicht insgesamt bessere Komprimierung, da so Redundanzen zwischen den einzelnen Dateien ausgenutzt werden können (progressive Kompression), erschwert aber den Zugriff auf die einzelnen Bestandteile.

Verbreitung[Bearbeiten | Quelltext bearbeiten]

Unter Unix ist die Komprimierung mit gzip heute Standard, weil sie für viele Aufgaben einen guten Kompromiss aus hoher Geschwindigkeit und guter Datenreduktion ermöglicht. Wo es weniger auf Geschwindigkeit als auf minimale Dateigrößen ankommt (etwa bei der breiten Verteilung von Daten über relativ langsame Netze), werden allerdings zunehmend bzip2 und LZMA verwendet (ebenso wie bei gzip in Kombination mit tar).

Das zlib-komprimierte Dateiformat, der Deflate-Algorithmus und das gzip-Dateiformat wurden 1996 als Request for Comments RFC 1950, RFC 1951 und RFC 1952 standardisiert.

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. vgl. gzip(1): compress and expand data (deflate mode) – OpenBSD General Commands Manual
  2. vgl. compress: compress data – Open Group Base Specification
  3. http://www.gzip.org/algorithm.txt, abgerufen am 17. Mai 2014
  4. RFC 1952 GZIP File Format Specification version 4.3. Abgerufen am 3. August 2017.
  5. http://tools.ietf.org/html/rfc6713