Er zijn veel hulpprogramma’s voor bestandscompressie, maar degene die je gegarandeerd op elke Linux-distributie zult vinden, is gzip
. Als u slechts één compressietool leert gebruiken, zou dat moeten zijn: gzip
.
Algoritmen en bomen
De gzip
datacompressietool werd begin jaren negentig geschreven en wordt nog steeds in elke Linux-distributie aangetroffen. Er zijn andere compressietools beschikbaar, maar op welke Linux-computer je ook moet werken, je zult merken dat gzip
ben ermee bezig. Dus als je weet hoe je het moet gebruiken? gzip
bent u klaar om te gaan zonder dat u iets hoeft te installeren.
gzip
is een implementatie van het DEFLATE-algoritme dat is uitgevonden en gepatenteerd door Phil Katz, bekend van PKZIP. Het DEFLATE-algoritme is verbeterd ten opzichte van eerdere compressie-algoritmen die allemaal op variaties van een thema werkten. De te comprimeren gegevens worden gescand en unieke strings worden geïdentificeerd en toegevoegd aan een binaire boom.
De unieke strings krijgen een uniek ID-token toegewezen op grond van: hun positie in de boom. De tokens worden gebruikt om de strings in de gegevens te vervangen en omdat de tokens kleiner zijn dan de gegevens die ze vervangen, wordt het bestand gecomprimeerd. Door de tokens te vervangen door de originele strings, worden de gegevens opnieuw opgeblazen naar de niet-gecomprimeerde staat.
Het DEFLATE-algoritme voegde de wending toe dat de meest voorkomende strings de kleinste tokens kregen en de minst vaak voorkomende strings grotere. Het DEFLATE-algoritme bevatte ook ideeën van twee eerdere compressiemethoden, Huffman-codering en LZ77-compressie.
Op het moment van schrijven is het DEFLATE-algoritme bijna drie decennia oud. Drie decennia geleden waren de kosten voor gegevensopslag hoog en waren de transmissiesnelheden laag. Datacompressie was van cruciaal belang.
Gegevensopslag is tegenwoordig veel goedkoper en transmissiesnelheden zijn orden van grootte sneller. Maar we hebben zoveel meer gegevens om op te slaan en over de hele wereld hebben mensen toegang tot cloudopslag en streamingdiensten. Gegevenscompressie is nog steeds vitaal belangrijk, zelfs als je alleen maar iets doet dat je moet uploaden of verzenden, of je probeert wat ruimte terug te winnen op een lokale harde schijf.
Het gzip-commando
Hoe groter een bestand, hoe beter de compressie kan zijn. Dit heeft twee redenen. Een daarvan is dat er veel herhaalde, identieke reeksen bytes in een groot bestand zullen zijn. De tweede reden is dat de lijst met strings en tokens in het gecomprimeerde bestand moet worden opgeslagen zodat decompressie kan plaatsvinden. Met een heel klein bestand kan die overhead de voordelen van de compressie tenietdoen. Maar zelfs met een vrij klein bestand zal er waarschijnlijk enige verkleining optreden.
Een bestand comprimeren
Om een bestand te comprimeren, hoeft u alleen maar de naam van het bestand door te geven aan de gzip
opdracht. We controleren de oorspronkelijke grootte van het bestand, comprimeren het en controleren vervolgens de grootte van het gecomprimeerde bestand.
ls -lh calc-sheet.ods
gzip calc-sheet.ods
ls -lh cal-*
Het originele bestand, een spreadsheet genaamd “calc-sheet.ods” is 11 KB, en het gecomprimeerde bestand – ook wel een archiefbestand genoemd – is 9,3 KB. Merk op dat de naam van het archiefbestand de naam is van het originele bestand met “.gz” eraan toegevoegd.
Het eerste gebruik van de ls
opdracht is gericht op een specifiek bestand, de spreadsheet. Het tweede gebruik van ls
zoekt naar alle bestanden die beginnen met “calc-“, maar vindt alleen het gecomprimeerde bestand. Dat komt omdat, standaard, gzip
maakt het archiefbestand aan en verwijdert het originele bestand.
Dat is geen probleem. Als u het originele bestand nodig heeft, kunt u het ophalen uit het archiefbestand. Maar als u liever het originele bestand wilt behouden, kunt u de -k
(behouden) optie.
gzip -k calc-sheet.ods
ls -lh calc-sheet.*
Deze keer blijft het originele ODS-bestand behouden.
Een bestand decomprimeren
Om een GZ-archiefbestand te decomprimeren, gebruikt u de -d
(decomprimeren) optie. Hiermee wordt het gecomprimeerde bestand uit het archief gehaald en gedecomprimeerd zodat het niet te onderscheiden is van het originele bestand.
ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*
Deze keer kunnen we dat zien gzip
heeft het archiefbestand verwijderd na het uitpakken van het originele bestand. Om het archiefbestand te behouden, moeten we de -k
(bewaar) optie opnieuw, evenals de -d
(decomprimeren) optie.
ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*
Deze keer verwijdert gzip het archiefbestand niet.
Decomprimeren en overschrijven
Als u een bestand probeert uit te pakken in een map waar het originele bestand – of een ander bestand met hetzelfde – bestaat, gzip
zal u vragen om te kiezen om de extractie te stoppen of om het bestaande bestand te overschrijven.
gzip -d text-file.txt.gz
Als je van tevoren weet dat je het bestand in de directory graag wilt laten overschrijven door het bestand uit het archief, gebruik dan de -f (force) optie.
gzip -df text-file.txt.gz
Het bestand wordt overschreven en u keert in stilte terug naar de opdrachtregel.
Mapbomen comprimeren
De -r
(recursieve) optie oorzaken gzip
om de bestanden in een volledige mappenboom te comprimeren. Maar het resultaat is misschien niet wat je verwacht.
Dit is de directorystructuur die we in dit voorbeeld gaan gebruiken. De mappen bevatten elk een tekstbestand.
tree level1
Laten we gebruiken gzip
in de mappenboom en kijk wat er gebeurt.
gzip -r level1/
tree level1
Het resultaat is gzip
heeft voor elk tekstbestand in de directorystructuur een archiefbestand aangemaakt. Het creëerde geen archief van de volledige mappenboom. In werkelijkheid, gzip
kan slechts één bestand in een archief plaatsen.
We kunnen een archiefbestand maken dat een mappenboom en al zijn bestanden bevat, maar we moeten een ander commando in het spel brengen. De tar
programma wordt gebruikt om archieven van veel bestanden te maken, maar het heeft geen eigen compressieroutines. Maar door de juiste opties te gebruiken met tar
we kunnen veroorzaken tar
om het archiefbestand door te duwen gzip
. Op die manier krijgen we een gecomprimeerd archiefbestand en een archief met meerdere bestanden of meerdere mappen.
tar -czvf level1.tar.gz level1
De tar
opties zijn:
- c: Maak een archief aan.
-
z: Duw de bestanden door
gzip
. -
v: Uitgebreide modus. Print in het terminalvenster wat?
tar
is aan. - f niveau1.tar.gz: Bestandsnaam die moet worden gebruikt voor het archiefbestand.
Hiermee worden de mappenboomstructuur en alle bestanden in de mappenboom gearchiveerd.
Informatie krijgen over archieven
De -l
(lijst) optie geeft wat informatie over een archiefbestand. Het toont u de gecomprimeerde en ongecomprimeerde grootte van het bestand in het archief, de compressieverhouding en de naam van het bestand.
gzip -l leve1.tar.gz
gzip -l text-file.txt.gz
U kunt de integriteit van een archiefbestand controleren met de -t
(test) optie.
gzip -t level1.tar.gz
Als alles goed is, keert u in stilte terug naar de opdrachtregel. Geen nieuws is goed nieuws.
Als het archief corrupt is of geen archief, wordt u hierover geïnformeerd.
gzip -t not-an-archive.gz
Snelheid versus compressie
U kunt ervoor kiezen om prioriteit te geven aan de snelheid van het maken van het archief of de mate van compressie. Dit doe je door als optie een nummer op te geven, van -1
door boven -9
. De -1
optie geeft de hoogste snelheid ten koste van compressie en -9
geeft de hoogste compressie ten koste van snelheid.
Tenzij u een van deze opties opgeeft, gebruikt gzip -6
.
gzip -1 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -9 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -6 calc-sheet.ods
ls -lh calc-sheet.ods.gz
Met een bestand zo klein als dit zagen we geen significant verschil in uitvoeringssnelheid, maar er was een klein verschil in compressie.
Interessant is dat er geen verschil is tussen het gebruik van compressie van niveau 9 en compressie van niveau 6. Je kunt alleen zoveel compressie uit een bepaald bestand wringen en in dit geval werd die limiet bereikt met compressie van niveau 6. Door het op 9 te zetten, werd de bestandsgrootte niet verder verminderd. Bij grotere bestanden zou het verschil tussen niveau 6 en niveau 9 meer uitgesproken zijn.
Gecomprimeerd, niet beschermd
Verwar compressie niet met codering of enige vorm van bescherming. Het comprimeren van een bestand geeft het geen veiligheid of verbeterde privacy. Iedereen met toegang tot uw bestand kan gebruikmaken van gzip
om het te decomprimeren.