gzipist einfreiesKompressionsprogramm,das – ebenso wie das entsprechende Dateiformat gzip – praktisch für alle Computerbetriebssystemeverfügbar ist (unter den Bedingungen derGPLauch im Quelltext).

gzip

Logo
Screenshot
Hilfeanzeige in der Kommandozeile
Basisdaten

Maintainer Jim Meyering, Paul Eggert
Entwickler Jean-Loup Gailly und Mark Adler
Erscheinungsjahr 1992
AktuelleVersion 1.13[1]
(19. August 2023)
Betriebssystem plattformübergreifendverfügbar
Programmier­sprache C
Kategorie Datenkompression
Lizenz GPL(Freie Software)
gnu.org/software/gzip

Allgemein istgzipdie Kurzform für „GNUzip “, wobei „zip “vom englischen Wort für den Reißverschluss entlehnt wurde.OpenBSDhat eineBSD-lizenzierteReimplementierung unter den Namengzip(1), gunzip(1)sowiegzcat(1)vorgenommen, die völlig kompatibel zu den GNU-Werkzeugen ist.[2]

gzip bietet einen für Text zufriedenstellenden Kompressionsgrad und ist frei von patentierten Algorithmen (deflatewird verwendet). Es wurde ursprünglich von Jean-Loup Gailly entwickelt, um das unterUnixverwendetecompress[3]zu ersetzen.Mark Adlerschrieb das Dekompressionsprogrammgunzip.

gzip basiert auf demDeflate-Algorithmus, der eine Kombination ausLZ77undHuffman-Kodierungist. Deflate wurde als Reaktion auf diePatenteentwickelt, die aufLZWund anderen Kompressionsalgorithmen bestanden. Auch dasZIP-Dateiformat verwendet hauptsächlich Deflate zur Komprimierung, darf aber ansonsten nicht mit gzip verwechselt werden.

Die Fenstergröße bei gzip beträgt 32 KiB. Wenn eine Abfolge von Bytes sich in den vorherigen 32 KiB nicht wiederholt, wird sie unkomprimiert in der.gz-Datei gespeichert.[4]Diese Fenstergröße ist gegenüber modernen Kompressionsprogrammen (z. B.bzip2mit 100 bis 900 KiB Blockgröße,rzipals Extremfall mit 900 MiB Fenstergröße) veraltet, jedoch ist gzip immer noch eines der schnellsten Kompressions-Programme und kann vielseitig eingesetzt werden, zum Beispiel in Verbindung mit einer sogenanntenPipeline– 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 diezlib-Bibliothek geschrieben. Sie unterstützt das gzip-Dateiformat und die Deflate-Kompression. Die Bibliothek ist weit verbreitet, da sie klein, effizient und vielseitig ist.

Das Archiv-Dateiformat für gzip ist gemäß RFC 1952 in Version 4.3 vom Mai 1996 spezifiziert.[5]Wenn einzelne Dateien mit gzip komprimiert werden, werden auch diverseMetadatengespeichert, u. a. das Betriebssystem, unter dem das Archiv erstellt wurde, sowie die einzelnen Dateinamen und ihre Modifikationszeiten.

Auf modernen Betriebssystemen ergeben sich in dieser letzten Version des Archivformats bei den Metadaten folgende Einschränkungen:

  • Die Dateigröße der Quelldatei ist aufModulo232(entspricht 4 GiB) begrenzt, sodass unkomprimierte Dateigrößen > 4 GiB nicht korrekt angezeigt werden können, obwohl die Dateien selbst korrekt komprimiert wurden und auch dekomprimiert werden können. Es gibt jedochWorkaroundsum die korrekten unkomprimierten Dateigrößen zu ermitteln.
  • Die Modifikationszeit ist in der Zukunft auf den 7. Februar 2106, 06:28:15UTC,beschränkt und speichert nur Sekundengenau. Moderne64-Bit-Systeme unterstützen jedoch meist auch Mikro- und Nanosekunden – diese können in einem GZIP-Archiv weder gespeichert werden noch können sie wiederhergestellt werden. Auf einigen32-Bit-Systemen hingegen ist das reale Limit für die Modifikationszeit in der Zukunft real niedriger, wenn diese vomJahr-2038-Problembetroffen sind, was auf allen älterenUnix-artigenBetriebssystemen der Fall ist.[6]

Eine Gzip-Datei besteht aus folgenden Komponenten in dieser Reihenfolge:

Größe(bytes) Optional Komponente
10 Nein Header
dynamisch Ja Zusatzinformationen
dynamisch Ja Original-Dateiname
dynamisch Ja Dateikommentar
2 Ja CRC16 Prüfsumme für Header, Zusatzinformationen, Original-Dateiname und Dateikommentar
dynamisch Nein komprimierte Nutzdaten
4 Nein CRC32 Prüfsumme für die unkomprimierte Quelldatei
4 Nein Größe der unkomprimierten QuelldateiModulo232
Position Länge(bytes) Kürzel Bedeutung
0 2 ID1, ID2 Magische Zahl(immer 0x1F, 0x8B)
2 1 CM Kompressionsmethode

0x00 bis 0x07 sind reserviert. 0x08 bedeutet „Deflate“.

3 1 FLG Bitfeld,sieheFLG-Bitfeld
4 4 MTIME Modifikationszeitstempel alsUnixzeit,ein Nullwert bedeutet das kein Zeitstempel verfügbar ist.
8 1 XFL kompressionsmethodenspezifische Zusatzinformationen

FürDeflatesind folgende Werte definiert: 0x02 = Des Kompressionsprogramm hat den stärksten, langsamsten Algorithmus angewandt. 0x04 = Das Kompressionsprogramm hat den schnellsten Algorithmus angewandt.

9 1 OS Art des Dateisystems bzw. Betriebssystems von welchem aus die Kompression durchgeführt wurde.

SieheBetriebssystemtabelle.

FLG-Bitfeld

Bearbeiten

Wichtig ist, dass hier immer die Bits beachtet werden. Das bedeutet, dass z. B. 00010011 (binär) = 19 (dezimal) = 0x13 (hexadezimal) folgendes aussagt: Die Datei ist wahrscheinlichASCII-Text, eineCRC-16Prüfsumme ist vorhanden, optionale Zusatzinformationen sind nicht vorhanden, der originale Dateiname ist nicht vorhanden und ein Dateikommentar ist vorhanden.

Bitposition Dezimalwert Kürzel Bedeutung
0 1 FTEXT Datei ist wahrscheinlich ASCII-Text
1 2 FHCRC CRC-16 Prüfsumme ist vorhanden
2 4 FEXTRA Zusatzinformationen sind vorhanden
3 8 FNAME Original-Dateiname ist vorhanden
4 16 FCOMMENT Dateikommentar ist vorhanden
5 32 Reserviert (muss 0 sein)
6 64 Reserviert (muss 0 sein)
7 128 Reserviert (muss 0 sein)

Betriebssystemtabelle

Bearbeiten
Byte Wert Bedeutung
0 FAT(Dateisystem)
1 AmigaOS
2 VMSoder OpenVMS
3 Unix
4 VM oder CMS
5 AtariTOS
6 HPFS(Dateisystem)
7 Macintosh(Plattform),Mac OS(Betriebssystem)
8 Z-System
9 CP/M
10 TOPS-20
11 NTFS(Dateisystem)
12 QDOS
13 AcornRISC OS
255 Unbekannt

Optionale Felder

Bearbeiten

Zusatzinformationen

Bearbeiten

Wenn FEXTRA gesetzt ist, folgt ein zwei Byte großes Feld, welches die Größe der Zusatzinformationen angibt, gefolgt von den Zusatzinformationen selbst in einem speziellen Format.

Original-Dateiname

Bearbeiten

Wenn FNAME gesetzt ist, folgt der Original-Dateiname alsnullterminierte ZeichenkettemitISO 8859-1Kodierung.

Dateikommentar

Bearbeiten

Wenn FCOMMENT gesetzt ist, folgt der Dateikommentar alsnullterminierte ZeichenkettemitISO 8859-1Kodierung. Der Dateikommentar ist nicht programmatisch zu interpretieren und dient nur dazu vom Endbenutzer gelesen zu werden.

CRC-16 Prüfsumme

Bearbeiten

Wenn FHCRC gesetzt ist, folgt die CRC-16 Prüfsumme, bestehend aus den zwei niedrigen Bytes der CRC-32 Prüfsumme des Headers inklusive der optionalen Felder(mit Ausnahme der Prüfsumme selbst).

CRC-32 Prüfsumme und Dateigröße

Bearbeiten

Es folgen eine CRC-32 Prüfsumme und die Größe der unkomprimierten Originaldatei. Die Dateigröße wirdModulo232gespeichert, was zur Folge hat, dass das Dateigrößenfeld bei Dateigrößen > 4 GiB nicht aussagekräftig ist.

Beispielaufrufe

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>

Ermittlung der unkomprimierten Dateigröße bei archivierten Dateien, die größer als 4 GiB sind:[7]

zcat <gzip-Datei> |wc-c

gzip-komprimierte Dateien

Bearbeiten
gzip
Dateiendung: .gz
MIME-Type: application/gzip[8]
Magische Zahl: \x1F\x8B\x08

(ASCII-C-Notation)

Entwickelt von: Jean-Loup Gailly und Mark Adler
AktuelleVersion 1.13[1]
(19. August 2023)
Art: Datenkompression
Container für: eine beliebigeDatei
Erweitert von: compress
Standard(s): RFC 1952[5]
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 mittarzu einerTarballgenannten 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.gzoder 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

UnterUnixist 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 zunehmendbzip2undLZMAverwendet (ebenso wie bei gzip in Kombination mit tar).

Das zlib-komprimierte Dateiformat, der Deflate-Algorithmus und das gzip-Dateiformat wurden 1996 alsRequest for CommentsRFC 1950,[9]RFC 1951[10]und RFC 1952[5]standardisiert.

Siehe auch

Bearbeiten
  • Brotliist ein Datenkompressions-Algorithmus auf Basis von LZ77 und Huffman-Kodierung, der von Zoltán Szabadka und Jyrki Alakuijala entwickelt wurde
  • Zopfliwird als der dateigrößeneffizienteste verfügbare Deflate-Kodierer angesehen
  • pigzist eine von Mark Adler programmierte Version vongzip,welche sämtliche verfügbaren Prozessorkerne und -threads benutzt, und so die Kompression merklich beschleunigt
  • Liste von Datenkompressionsprogrammen
Bearbeiten
  • gzip.org– ursprüngliche Projektseite (englisch)
  • P. Deutsch:RFC1952GZIP File Format Specification version 4.3.Mai 1996 (englisch).
  • gzip(1):gzip, gunzip, zcat – Dateien komprimieren und expandieren –Debian GNU/LinuxAusführbare Programme oder Shell-BefehleHandbuchseite
  • goethe.ira.uka.de(Mementovom 8. September 2012 imInternet Archive) ira.uka.de – gut verständliche Beschreibung der verschiedenen Komprimiermöglichkeiten

Einzelnachweise

Bearbeiten
  1. abJim Meyering:gzip-1.13 released [stable].19. August 2023 (abgerufen am 20. August 2023).
  2. gzip(1):compress and expand data (deflate mode) –OpenBSDGeneral CommandsManual
  3. compress:compress data –Open GroupBase Specification
  4. Jean-loup Gailly, Mark Adler:Compression algorithm (deflate)(Mementovom 16. Februar 2014 imInternet Archive) gzip.org. 1. September 1997 (Last-Modified).
  5. abc P. Deutsch:RFC1952GZIP File Format Specification version 4.3.Mai 1996 (englisch).
  6. GNU Gzip Documentation.Free Software Foundation,abgerufen am 15. September 2020(englisch).
  7. GNU Gzip Documentation.Free Software Foundation,abgerufen am 15. September 2020(englisch).The gzip format represents the input size modulo2^32,so the uncompressed size and compression ratio are listed incorrectly for uncompressed files 4 GiB and larger. To work around this problem, you can use the following command to discover a large uncompressed file’s true size:zcat file.gz | wc -c
  8. RFC6713The ‘application/zlib’ and ‘application/gzip’ Media Types.August 2012 (englisch).
  9. RFC1950ZLIB Compressed Data Format Specification version 3.3.Mai 1996 (englisch).
  10. RFC1951DEFLATE Compressed Data Format Specification version 1.3.Mai 1996 (englisch).