gzip
gzip | |
---|---|
![]() | |
![]() Help-weergave in de opdrachtregel | |
Basis data | |
ontwikkelaar | Jean-Loup Gailly en Mark Adler |
Jaar van uitgave | 1992 |
Huidige versie | 1.10[1] ( 30 december 2018 ) |
besturingssysteem | beschikbaar op verschillende platforms |
programmeertaal | C. |
categorie | Data compressie |
Licentie | GPL ( vrije software ) |
www.gnu.org/software/gzip |
gzip is een gratis compressieprogramma dat, als de boor Gzipbestand formaat beschikbaar is voor vrijwel alle computer operationele systemen (in het kader van de GPL, ook in de broncode).
Over het algemeen is gzip de korte vorm voor " GNU zip", waarbij "zip" is geleend van het Engelse woord voor zip. OpenBSD heeft een BSD-gelicentieerde gzcat(1)
onder de namen gzip(1), gunzip(1)
en gzcat(1)
, die volledig compatibel is met de GNU-tools. [2]
gzip biedt een bevredigend compressieniveau voor tekst en bevat geen gepatenteerde algoritmen ( deflate wordt gebruikt). Het werd oorspronkelijk ontwikkeld door Jean-Loup Gailly ter vervanging van het kompres [3] dat onder Unix werd gebruikt . Mark Adler schreef het gunzip- decompressieprogramma.
technologie
gzip is gebaseerd op het Deflate- algoritme, een combinatie van LZ77- en Huffman-codering . Deflate is ontwikkeld als reactie op de patenten die LZW en andere compressiealgoritmen hebben doorgegeven. Het ZIP- bestandsformaat gebruikt ook voornamelijk Deflate voor compressie, maar moet anders niet worden verward met gzip.
De venstergrootte met gzip is 32 KiB. Als een reeks bytes zich niet herhaalt in de vorige 32 KiB, wordt deze ongecomprimeerd opgeslagen in het .gz-bestand. [4] Deze venstergrootte is verouderd in vergelijking met moderne compressieprogramma's (bijv. bzip2 met een blokgrootte van 100 tot 900 KiB, rzip als een extreem geval met een venstergrootte van 900 MiB), maar gzip is nog steeds een van de snelste compressieprogramma's en kan op vele manieren te gebruiken Voorbeeld in verband met een zogenaamde pijplijn - de uitvoer ("standaard uit") van een programma kan de invoer ("standaard in") van gzip vertegenwoordigen en vice versa.
Om de ontwikkeling van software die datacompressie gebruikt te vereenvoudigen, is de zlib- bibliotheek geschreven. Het ondersteunt het gzip-bestandsformaat en deflate-compressie. De bibliotheek wordt veel gebruikt omdat deze klein, efficiënt en veelzijdig is.
bouw
Het archiefbestandsformaat voor gzip is gespecificeerd in overeenstemming met RFC 1952 in versie 4.3 van mei 1996. [5] Als individuele bestanden worden gecomprimeerd met gzip, worden ook verschillende metadata opgeslagen, waaronder het besturingssysteem waaronder het archief is gemaakt, evenals de individuele bestandsnamen en hun wijzigingstijden.
Op moderne besturingssystemen zijn de volgende beperkingen van toepassing op de metadata in deze laatste versie van het archiefformaat:
- De bestandsgrootte van het bronbestand is beperkt tot modulo 2 ^ 32 (komt overeen met 4 GiB), zodat niet-gecomprimeerde bestandsgroottes> 4 GiB niet correct kunnen worden weergegeven, hoewel de bestanden zelf correct zijn gecomprimeerd en ook kunnen worden gedecomprimeerd. Er zijn echter oplossingen om de juiste niet-gecomprimeerde bestandsgrootte te bepalen.
- In de toekomst is de wijzigingstijd beperkt tot 7 februari 2106, 06:28:15 UTC en wordt alleen opgeslagen tot de tweede. Moderne 64-bits systemen ondersteunen echter meestal ook microseconden en nanoseconden - deze kunnen niet worden opgeslagen in een GZIP-archief en ook niet worden hersteld. Op sommige 32-bits systemen is de werkelijke limiet voor de wijzigingstijd in de toekomst echter lager als ze worden beïnvloed door het jaar 2038-probleem , wat het geval is op alle oudere Unix-achtige besturingssystemen. [6]
Initialisatie [0-1]
De eerste twee bytes vormen de zogenaamde "identificatiecode" van het formaat, dat in het gzip-formaat altijd hetzelfde is. Deze header is gestandaardiseerd met bytes 0x1f en 0x8b ( hexadecimaal ) of 31 en 139 ( decimaal ). Deze bytes worden gebruikt om het bestandsformaat (gzip) te verifiëren en om de eerste merkbare tekortkomingen in het bestand te identificeren. Als deze initialisatie niet correct of helemaal niet gebeurt, zullen er fouten optreden die ofwel een fout veroorzaken ofwel resulteren in incorrecte eindbestanden (na decompressie).
Compressie methode [2]
De byte op de index (vanaf 0) 2 geeft aan om welke compressiemethode het gaat of welke actie is gebruikt om het bestand(en) op te slaan.
Bytewaarde | betekenis |
---|---|
0 | Kopie van het bestand (geen actie ondernomen) |
1 | Compressie |
2 | (Verpakking) verpakken |
3 | LZH-formaat |
4e | Gereserveerd |
5 | Gereserveerd |
6e | Gereserveerd |
7e | Gereserveerd |
8ste | "Deflate" zou een sneller alternatief moeten bieden voor comprimeren (momenteel weinig informatie) |
Speciale informatie ("vlaggen") [3]
De byte die wordt gebruikt voor speciale informatie staat op index 3. Ook hier zijn er weer bepaalde waarden die een vaste betekenis hebben.
Het is belangrijk dat hier altijd rekening wordt gehouden met de bits. Dit betekent dat z. B. "00010011" (binair) (19 [decimaal]; 0x13 [hexadecimaal]) zegt het volgende: Het bestand is ASCII- tekst, is een enkel bestand, heeft een CRC-16- nummer, heeft extra informatie en de oorspronkelijke naam is beroemd .
Bytewaarde | betekenis |
---|---|
1 (bitpositie 1) | Het bestand heeft een ASCII-tekst |
2 (bitpositie 2) | CRC-16 aanwezig (dient als controlewaarde om te bepalen of het bestand mogelijk beschadigd is of niet correct overgezet). |
4 (bitpositie 3) | Bepaalt of aanvullende informatie wordt verstrekt |
8 (bitpositie 4) | Originele naam beschikbaar |
16 (bitpositie 5) | Reactie beschikbaar |
32 (bitpositie 6) | Gereserveerd (moet 0 zijn) |
64 (bitpositie 7) | Gereserveerd (moet 0 zijn) |
128 (bitpositie 8) | Gereserveerd (moet 0 zijn) |
Laatste wijziging (tijd) [4-7]
Deze waarde wordt bepaald door 4 bytes en geeft een tijd in Unix- tijd aan.
Aanvullende speciale informatie ("Extra Vlaggen") [8]
De definitie is analoog aan "Speciale informatie" op byte 3.
Voorbeeld voor compressiemethode "Deflate":
Bytewaarde | betekenis |
---|---|
2 (bitpositie 2) | Compressor gebruikt maximale compressie en het langzaamste algoritme |
4 (bitpositie 3) | Compressor gebruikt het snelste algoritme |
Besturingssysteem [9]
Deze byte geeft aan op welk besturingssysteem het bestand is gecomprimeerd.
Bytewaarde | betekenis |
---|---|
0 | FAT (bestandssysteem) |
1 | AmigaOS |
2 | VMS of OpenVMS |
3 | Unix |
4e | VM of CMS |
5 | Atari TOS |
6e | HPFS (bestandssysteem) |
7e | Macintosh (platform), Mac OS (besturingssysteem) |
8ste | Z-systeem |
9 | CP / M |
10 | TOPS-20 |
11 | NTFS (bestandssysteem) |
12e | QDOS |
13e | Acorn RISC OS |
255 | onbekend |
Voorbeeldoproepen
Pak een bestand in:
gzip <bestandsnaam>
Pak een ingepakt bestand uit:
gzip -d <bestandsnaam>
of
gunzip <bestandsnaam>
Pak alle bestanden recursief in een map en specificeer de compressiesnelheid:
gzip -rv <map>
Voer een gecomprimeerd tekstbestand uit:
zcat <bestandsnaam>
Pak een defect gecomprimeerd bestand uit tot het punt van falen:
zcat <gzip-bestand>> <doelbestand>
Bepaling van de ongecomprimeerde bestandsgrootte voor gearchiveerde bestanden die groter zijn dan 4 GiB: [7]
zcat <gzip-bestand> | wc -c
gzip gecomprimeerde bestanden
gzip | |
---|---|
Bestandsextensie : | .gz |
MIME-type : | applicatie / gzip [8] |
Magisch nummer : | \ x1F \ x8B \ x08 ( ASCII-C-notatie ) |
Ontwikkeld door: | Jean-Loup Gailly en Mark Adler |
Type: | Data compressie |
Bak voor: | elk bestand |
Verlengd met: | samendrukken |
Standaard(en) : | RFC 1952 |
Website : | gzip.org |
De gebruikelijke bestandsextensie voor met gzip gecomprimeerde bestanden is tegenwoordig .gz
, vroeger ook .z
.
Aangezien gzip alleen individuele bestanden kan comprimeren, worden verschillende bestanden of directorystructuren meestal eerst gecombineerd met tar om een archiefbestand te vormen met de naam tarball , dat vervolgens wordt gecomprimeerd met gzip.
Dergelijke gecomprimeerde archiefbestanden hebben meestal de dubbele uitgang .tar.gz
of gewoon .tgz
. Deze methode maakt in het algemeen een betere compressie mogelijk, aangezien redundanties tussen de afzonderlijke bestanden kunnen worden uitgebuit ( progressieve compressie ), maar de toegang tot de afzonderlijke componenten bemoeilijkt.
verdeling
Onder Unix is compressie met gzip tegenwoordig standaard omdat het een goed compromis mogelijk maakt tussen hoge snelheid en goede gegevensreductie voor veel taken. Waar snelheid echter minder belangrijk is dan minimale bestandsgroottes (bijvoorbeeld wanneer gegevens wijdverspreid zijn over relatief trage netwerken), worden bzip2 en LZMA steeds vaker gebruikt (zoals het geval is bij gzip in combinatie met tar).
Het met zlib gecomprimeerde bestandsformaat, het deflate-algoritme en het gzip-bestandsformaat werden in 1996 gestandaardiseerd als Request for Comments RFC 1950 , RFC 1951 en RFC 1952 .
Zie ook
- Lijst met programma's voor gegevenscompressie
- zopfli is een encoder die is geprogrammeerd door Google- medewerkers en die compatibele en kleinere gzip-bestanden maakt, maar dit gaat ten koste van zeer lange compressietijden
-
pigz
is een versie vangzip
geprogrammeerd door Mark Adler, die alle beschikbare processorkernen en -threads gebruikt en zo de compressie merkbaar versnelt
web links
- gzip.org - originele projectpagina (Engels)
- P. Deutsch: RFC 1952 . - Specificatie GZIP-bestandsindeling versie 4.3 . Mei 1996. (Engels). (Engels)
-
gzip(1)
: gzip, gunzip, zcat - bestanden comprimeren en uitbreiden - Debian GNU / Linux uitvoerbare bestanden of shell-commando's man- pagina - goethe.ira.uka.de ( Memento van 8 september 2012 in het internetarchief ) - een gemakkelijk te begrijpen beschrijving van de verschillende compressie-opties
Individueel bewijs
- ↑ gzip-1.10 vrijgegeven [stabiel] . 30 december 2018 (toegankelijk op 30 december 2018).
- ↑
gzip(1)
: data comprimeren en uitbreiden (leegloopmodus) - OpenBSD General Commands Manual - ↑
compress
: comprimeer gegevens - Open Group Base-specificatie - ^ Jean-loup Gailly, Mark Adler: Compressie-algoritme (deflate) ( Memento van 16 februari 2014 in het internetarchief ) op gzip.org. 1 september 1997 ( laatst gewijzigd ).
- ↑ P. Duits: RFC 1952 . - Specificatie GZIP-bestandsindeling versie 4.3 . Mei 1996. (Engels).
- ↑ GNU Gzip-documentatie. Free Software Foundation, Inc., geraadpleegd op 15 september 2020 .
- ↑ GNU Gzip-documentatie. Free Software Foundation, Inc., geraadpleegd op 15 september 2020 (Engels): "Het gzip-formaat vertegenwoordigt de invoergrootte modulo 2 ^ 32 , dus de niet-gecomprimeerde grootte en compressieverhouding worden onjuist weergegeven voor niet-gecomprimeerde bestanden van 4 GiB en groter. U kunt dit probleem omzeilen door de volgende opdracht te gebruiken om de ware grootte van een groot niet-gecomprimeerd bestand te
zcat file.gz | wc -c
:zcat file.gz | wc -c
" - ↑ tools.ietf.org