Cookies voor statistiek en advertenties
We gebruiken cookies voor statistiek en voor advertenties, allebei naar Google. Weigeren verandert niets aan wat je te zien krijgt.Lees de privacypagina
GZ
Comprimeert één enkel bestand. Samen met TAR vormt het het gebruikelijke archief op Unix.
GZ
GZ is een stroomformaat dat van voor naar achter wordt geschreven en gelezen. Het wordt gebruikt voor het web en archivering.
De extensie is .gz en de volledige naam Gzip Archive. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.
Het gaat terug tot 1992. De specificatie is RFC 1952.
Aan een formaat dat zo lang leesbaar is gebleven kun je iets toevertrouwen dat je over tien jaar terug wilt hebben.
Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.
GZ bewaart zijn inhoud precies. Opnieuw opslaan verandert niets, dus je kunt het zo vaak openen, bewerken en wegschrijven als je wilt zonder dat er schade opstapelt — en dat is wat er een werkformaat van maakt in plaats van een afleverformaat.
GZ comprimeert één enkele stroom en kent geen bestandsnamen of mappen. Daarom zie je het zo vaak naast TAR staan, dat de ontbrekende structuur aanlevert.
GZ kan een opbouw waarmee het kan beginnen af te spelen voordat het volledig is aangekomen bevatten.
Dat telt vooral bij het converteren: wat het doel niet kan bevatten valt weg, meestal zonder waarschuwing.
Het werkt met 32 KB tegelijk: binnen dat stuk moet een herhaling vallen voordat ze weggerekend kan worden.
Dat ene getal verklaart het grootste deel van het verschil tussen het ene archiefformaat en het andere. Een groter stuk vindt meer herhaling en heeft daar meer tijd en meer geheugen voor nodig — dat is de hele ruil.
GZ brengt een controlegetal, zodat een beschadigd bestand opvalt in plaats van stilzwijgend verkeerd gelezen te worden mee.
Repareren doet een controlegetal niets. Het vertelt je dat het bestand stuk is — dat is het verschil tussen het nu ontdekken en het horen van degene aan wie je het gestuurd hebt.
gzip, 7-Zip en Keka lezen het, en de meeste programma’s van dezelfde soort ook.
Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.
Geen enkele browser leest het.
Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.
GZ is bedoeld om door te geven, niet om in te werken. Er een bewerken kan en is zelden prettig; de verstandige weg loopt via de bron en een nieuwe export.
De terugkerende klachten: het houdt één stroom vast en kan geen map beschrijven.
Niets daarvan is een reden om het formaat te mijden. Het zijn de dingen die je beter kent voordat een ervan je verrast, en dat is een andere en een nuttigere bewering.
Gzip comprimeert één stroom. Het heeft geen map, geen lijst met namen, geen begrip van meerdere bestanden. Comprimeer `notities.txt` en je krijgt `notities.txt.gz`; er zit niets anders in, en decomprimeren geeft precies één bestand terug.
Dat is waarom `.tar.gz` de normale vorm is en waarom de extensie twee delen heeft. Tar bundelt een mapstructuur tot één stroom, gzip comprimeert die stroom, en de keten leest van rechts naar links. Decomprimeer je een kale `.gz` in de verwachting een map te krijgen, dan krijg je het ene bestand dat gecomprimeerd was — meer heeft het formaat nooit bevat.
Het is een HTTP-antwoord. Vrijwel elke webserver comprimeert HTML, CSS, JavaScript en JSON met gzip voordat het verzonden wordt, de browser decomprimeert transparant, en geen van beide kanten schrijft ooit een `.gz` weg. Dat gebeurt miljarden keren per dag en is onzichtbaar.
Dat is waarom gzip overal is en waarom zijn snelheid meer telt dan zijn ratio. Een server die een antwoord comprimeert heeft milliseconden, geen seconden — een compressor die tien procent harder perst voor tien keer de moeite zou op die schaal de verkeerde ruil zijn, en dat is precies de ruil die xz maakt en gzip weigert.
Gzip gebruikt DEFLATE — LZ77-matching tegen een venster van 32 KB, gevolgd door Huffman-codering. Hetzelfde algoritme comprimeert elk bestand in een ZIP en elke PNG-afbeelding, wat verklaart waarom die drie formaten zulke vergelijkbare compressie-eigenschappen hebben.
Het venster van 32 KB is de bepalende limiet. Herhaling verder weg dan dat kan niet gevonden worden, wat verklaart waarom gzip flink verliest van xz en 7z op grote bestanden met langeafstandsstructuur — en waarom het zo weinig kost om te draaien, want de zoekruimte is met opzet klein.
Jean-loup Gailly en Mark Adler brachten gzip in 1992 uit om Unix `compress` te vervangen, dat LZW gebruikte — het algoritme waarop Unisys octrooien had en begon te handhaven, hetzelfde geschil dat PNG opleverde als vervanger van GIF.
DEFLATE werd ontworpen om onbelast te zijn, en het werd gepubliceerd als RFC 1951 zodat iedereen het kon implementeren. Die beslissing verklaart waarom het uiteindelijk in ZIP, PNG, HTTP en talloze protocollen belandde: het was de goed-genoeg compressor waarvoor niemand toestemming hoefde te vragen.
Gzip biedt niveaus 1 tot en met 9. Niveau 1 is snel en losjes, 9 zoekt het hardst, en 6 is de standaard. De spreiding tussen 6 en 9 is doorgaans een paar procent grootte voor een aanzienlijke tijdstoename, wat vrijwel overal een slechte ruil is.
Decompressiesnelheid is vrijwel constant ongeacht het gebruikte niveau, en snel — honderden megabytes per seconde op gewone hardware. Die asymmetrie is het bepalende kenmerk van het formaat: goedkoop om te lezen, goedkoop genoeg om te schrijven, nooit uitzonderlijk in beide.
De header kan de oorspronkelijke bestandsnaam, een wijzigingstijdstip en een commentaar bevatten, en een CRC32-checksum van de oncomprimeerde data staat aan het eind. De checksum betekent dat beschadiging bij decompressie wordt gedetecteerd in plaats van stilzwijgend een verkeerd resultaat te geven.
De opgeslagen naam is waarom decomprimeren soms een bestand oplevert met een andere naam dan waar de `.gz` naar heette. Het is ook een klein privacydetail dat de moeite waard is om te kennen: een `.gz` kan het oorspronkelijke pad of de naam dragen zelfs nadat het bestand voor verzending is hernoemd.
Twee gzip-bestanden aan elkaar plakken met niets meer dan een bestandskopie levert een geldig gzip-bestand op met beide erin, in volgorde. Decompressors verwerken het zonder te weten dat dat gebeurd is.
Dat is waarom logrotatie, streamingpijplijnen en dataverzamelsystemen erop leunen: een proces kan gecomprimeerde brokken toevoegen zodra ze binnenkomen zonder ooit te herschrijven of te herlezen wat eerder kwam. Noch ZIP noch 7z kan dat, en het is een groot deel van waarom gzip in infrastructuur blijft bestaan.
xz comprimeert ongeveer dertig procent kleiner op tekst en duurt veel langer, wat past bij een release die vaak gedownload wordt. zstd evenaart gzip’s snelheid terwijl het dicht bij xz comprimeert, en verdringt gzip in pakketformaten en back-upsystemen precies daarom. Brotli wint van gzip op het web en elke browser ondersteunt het.
Gzip’s resterende voordeel is dat het overal aanwezig is zonder geïnstalleerd, geconfigureerd of uitgelegd te hoeven worden. Dat is niet niks — maar voor een nieuw systeem in plaats van een bestaand is zstd nu meestal de betere standaard.
Wanneer het naar een persoon gaat in plaats van een machine. ZIP is wat een gewone Windows- of macOS-installatie opent zonder hulp, en een `.tar.gz` naar een collega sturen die niet technisch is, vraagt hem stilletjes een probleem op te lossen.
Zet niet om als het teruggaat naar een Unix-systeem. Opnieuw verpakken als ZIP gooit de rechten, eigendom en symbolische koppelingen weg die tar droeg, en het uitgepakte resultaat werkt mogelijk niet. Voor een serverback-up of een broncoderelease is `.tar.gz` geen obstakel om te omzeilen — het is de reden dat het archief functioneert.
| Extensie | .gz, .tgz |
|---|---|
| Mediatype | application/gzip |
| Voor het eerst gepubliceerd | 1992 |
| Specificatie | RFC 1952 |