| gzip | |
|---|---|
Hilfeanzeige in der Kommandozeile | |
| Basisdaten | |
| Maintainer | Jim Meyering, Paul Eggert |
| Entwickler | Jean-Loup Gailly und Mark Adler |
| Erscheinungsjahr | 1992 |
| Aktuelle Version | 1.14[1] (9. April 2025) |
| Betriebssystem | plattformübergreifend verfügbar |
| Programmiersprache | C |
| Kategorie | Datenkompression |
| Lizenz | GPL (Freie Software) |
| gnu.org/software/gzip | |
gzip ist einfreiesKompressionsprogramm, das – ebenso wie das entsprechendeDateiformat gzip – praktisch für alle Computerbetriebssysteme verfügbar ist (unter den Bedingungen derGPL auch imQuelltext).
Allgemein istgzip die Kurzform für „GNU zip“, wobei „zip“ vom englischen Wort für den Reißverschluss entlehnt wurde.OpenBSD hat eineBSD-lizenzierte Reimplementierung 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 (deflate wird verwendet). Es wurde ursprünglich von Jean-Loup Gailly entwickelt, um das unterUnix verwendetecompress[3] zu ersetzen.Mark Adler schrieb das Dekompressionsprogrammgunzip.
gzip basiert auf demDeflate-Algorithmus, der eine Kombination ausLZ77 undHuffman-Kodierung ist. Deflate wurde als Reaktion auf diePatente entwickelt, die aufLZW und 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.bzip2 mit 100 bis 900 KiB Blockgröße,rzip als 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 diverseMetadaten gespeichert, 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:
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 | CRC-16Prüfsumme für Header, Zusatzinformationen, Original-Dateiname und Dateikommentar |
| dynamisch | Nein | komprimierte Nutzdaten |
| 4 | Nein | CRC-32 Prüfsumme für die unkomprimierte Quelldatei |
| 4 | Nein | Größe der unkomprimierten QuelldateiModulo 232 |
| 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, dass kein Zeitstempel verfügbar ist. |
| 8 | 1 | XFL | kompressionsmethodenspezifische Zusatzinformationen FürDeflate sind 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. |
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, eine CRC-16 Prüfsumme ist vorhanden, optionale Zusatzinformationen sind nicht vorhanden, der originaleDateiname 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) |
| Byte Wert | Bedeutung |
|---|---|
| 0 | FAT (Dateisystem) |
| 1 | AmigaOS |
| 2 | VMS oder 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 |
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.
Wenn FNAME gesetzt ist, folgt der Original-Dateiname alsnullterminierte Zeichenkette mitISO 8859-1 Kodierung.
Wenn FCOMMENT gesetzt ist, folgt der Dateikommentar alsnullterminierte Zeichenkette mitISO 8859-1 Kodierung. Der Dateikommentar ist nicht programmatisch zu interpretieren und dient nur dazu vom Endbenutzer gelesen zu werden.
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).
Es folgen eine CRC-32 Prüfsumme und die Größe der unkomprimierten Originaldatei. Die Dateigröße wirdModulo 232 gespeichert, was zur Folge hat, dass das Dateigrößenfeld bei Dateigrößen > 4 GiB nicht aussagekräftig ist.
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 | |
|---|---|
| Dateiendung: | .gz |
| MIME-Type: | application/gzip[8] |
| Magische Zahl: | \x1F\x8B\x08 |
| Entwickelt von: | Jean-Loup Gailly und Mark Adler |
| Aktuelle Version | 1.14[1] (9. April 2025) |
| 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 mittar zu einerTarball genannten Archivdatei zusammengefasst, welche anschließend mit gzip komprimiert wird.

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.
UnterUnix 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 zunehmendbzip2 undLZMA verwendet (ebenso wie bei gzip in Kombination mit tar).
Das zlib-komprimierte Dateiformat, der Deflate-Algorithmus und das gzip-Dateiformat wurden 1996 alsRequest for Comments RFC 1950,[9] RFC 1951[10] und RFC 1952[5] standardisiert.
pigz ist eine von Mark Adler programmierte Version vongzip, welche sämtliche verfügbarenProzessorkerne und-threads benutzt, und so die Kompression merklich beschleunigtgzip(1): gzip, gunzip, zcat – Dateien komprimieren und expandieren – Debian GNU/Linux Ausführbare Programme oder Shell-BefehleHandbuchseitegzip(1): compress and expand data (deflate mode) – OpenBSD General CommandsManualcompress: compress data – Open Group Base Specification2^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”