ZIP-bestanden zijn een universeel archief dat vaak wordt gebruikt op Windows-, macOS- en zelfs Linux-systemen. U kunt een zip-archief maken of bestanden uitpakken met een aantal algemene Linux-terminalopdrachten.
Het ZIP-gecomprimeerde archiefbestandsformaat
Dankzij de dominantie van het ZIP-formaat in het Windows-rijk, zijn ZIP-bestanden waarschijnlijk de meest voorkomende vorm van gecomprimeerd archief ter wereld.
Hoewel .tar.gz- en tar.bz2-bestanden veel voorkomen onder Linux, zullen Windows-gebruikers u waarschijnlijk een archief in ZIP-indeling sturen. En als u een aantal bestanden wilt archiveren en ze naar een Windows-gebruiker wilt sturen, is het ZIP-formaat de gemakkelijkste, meest compatibele oplossing voor iedereen.
VERWANT: Bestanden extraheren uit een .tar.gz- of .tar.bz2-bestand op Linux
zip, unzip en andere hulpprogramma’s
Je weet misschien al dat Linux en Unix-achtige besturingssystemen zoals macOS tools hebben waarmee je ZIP-bestanden kunt maken en er bestanden uit kunt extraheren, genaamd zip
en unzip
. Maar er is een hele familie van gerelateerde hulpprogramma’s zoals zipcloak
, zipdetails
, zipsplit
, en zipinfo
.
We hebben enkele Linux-distributies gecontroleerd om te zien of ze deze hulpprogramma’s in de standaardinstallatie bevatten. Alle hulpprogramma’s waren aanwezig in Ubuntu 19.04, 18.10 en 18.04. Ze waren ook aanwezig in Manjaro 18.04. Fedora 29 inbegrepen zip
en unzip
, maar geen van de andere hulpprogramma’s en dat was ook het geval voor CentOS.
Om de ontbrekende elementen op Fedora 29 te installeren, gebruik je het volgende commando:
sudo dnf install perl-IO-Compress
Gebruik het volgende commando om de ontbrekende elementen op CentOS 7 te installeren:
sudo yum install perl-IO-Compress
Als een van de zip-hulpprogramma’s ontbreekt in een Linux-distributie die hierboven niet werd genoemd, gebruik dan de pakketbeheertool van die Linux-distributie om het vereiste pakket te installeren.
Hoe maak je een ZIP-bestand aan met de zip-opdracht
Om een ZIP-bestand te maken, moet u dit aangeven zip
de naam van het archiefbestand en welke bestanden erin moeten worden opgenomen. U hoeft de extensie “.zip” niet aan de archiefnaam toe te voegen, maar het kan geen kwaad als u dat wel doet.
Om een bestand met de naam source_code.zip
met alle C-broncodebestanden en headerbestanden in de huidige map, zou je deze opdracht gebruiken:
zip source_code *.c *.h
Elk bestand wordt vermeld zoals het is toegevoegd. De naam van het bestand en de hoeveelheid compressie die op dat bestand is bereikt, worden weergegeven.
Als je naar het nieuwe ZIP-archief kijkt, kun je zien dat de bestandsextensie “.zip” automatisch is toegevoegd door zip
.
ls -l source_code.zip
Als u de uitvoer van zip
gebruik terwijl het ZIP-bestand wordt gemaakt de -q
(stille) optie.
zip -q source_code *.c *.h
Inclusief mappen in ZIP-bestanden
Om submappen in het ZIP-bestand op te nemen, gebruikt u de -r
(recursieve) optie en neem de naam van de submap op de opdrachtregel op. Gebruik deze opdracht om een ZIP-bestand te maken zoals eerder en ook de archiefsubdirectory op te nemen.
zip -r -q source_code archive/ *.c *.h
Om rekening te houden met de persoon die de bestanden gaat extraheren uit het ZIP-bestand dat u maakt, is het vaak beleefd om ZIP-bestanden te maken met de bestanden erin in een directory. Wanneer de persoon die het ZIP-bestand ontvangt, het uitpakt, worden alle bestanden netjes in een map op hun computer geplaatst.
In de volgende opdracht gaan we het work
directory en alle submappen. Merk op dat deze opdracht wordt uitgegeven vanuit de bovenliggende directory van de work
map.
zip -r -q source_code work/
Het compressieniveau instellen
U kunt instellen hoeveel compressie wordt toegepast op de bestanden wanneer ze worden toegevoegd aan het ZIP-archief. Het bereik is van 0 tot 9, waarbij 0 helemaal geen compressie is. Hoe hoger de compressie, hoe langer het duurt om het ZIP-bestand te maken. Voor ZIP-bestanden van bescheiden formaat is het tijdsverschil geen noemenswaardige straf. Maar voor ZIP-bestanden met een bescheiden formaat is de standaardcompressie (niveau 6) hoe dan ook waarschijnlijk goed genoeg.
Te krijgen zip
om een specifiek compressieniveau te gebruiken, geeft u het nummer als een optie op de opdrachtregel door met een “-“, zoals dit:
zip -0 -r -q source_code work/
Het standaard compressieniveau is 6. Het is niet nodig om het -6
optie, maar het kan geen kwaad als je dat doet.
zip -r -q source_code work/
Het maximale compressieniveau is niveau 9.
zip -9 -r -q source_code work/
Met de selectie van bestanden en mappen die hier worden gearchiveerd, is het verschil tussen geen compressie (niveau 0) en de standaardcompressie (niveau 6) 400K. Het verschil tussen de standaardcompressie en het hoogste compressieniveau (niveau 9) is slechts 4K.
Dat lijkt misschien niet veel, maar voor archieven met honderden of zelfs duizenden bestanden zou de kleine hoeveelheid extra compressie per bestand een waardevolle ruimtebesparing opleveren.
Wachtwoorden toevoegen aan ZIP-bestanden
Wachtwoorden toevoegen aan ZIP-bestanden is eenvoudig. Gebruik de -e
(versleutelen) optie en u wordt gevraagd om uw wachtwoord in te voeren en het opnieuw in te voeren ter verificatie.
zip -e -r -q source_code work/
Hoe een ZIP-bestand uit te pakken met de unzip-opdracht
Om de bestanden uit een ZIP-bestand te extraheren, gebruikt u de unzip-opdracht en geeft u de naam van het ZIP-bestand op. Merk op dat jij Doen moet de extensie “.zip” opgeven.
unzip source_code.zip
Terwijl de bestanden worden uitgepakt, worden ze weergegeven in het terminalvenster.
ZIP-bestanden bevatten geen details over het eigendom van het bestand. Alle bestanden die worden uitgepakt, hebben de eigenaar ingesteld op de gebruiker die ze uitpakt.
Net als zip
, unzip
heeft een -q
(stille) optie, zodat u de bestandslijst niet hoeft te zien terwijl de bestanden worden uitgepakt.
unzip -q source_code.zip
Bestanden uitpakken naar een doeldirectory
Om de bestanden in een specifieke map te laten uitpakken, gebruikt u de -d
(directory) optie, en geef het pad op naar de directory waarin u het archief wilt uitpakken.
unzip -q source_code.zip -d ./development
Pak wachtwoordbeveiligde ZIP-bestanden uit
Als er een ZIP-bestand is gemaakt met een wachtwoord, unzip
zal u om het wachtwoord vragen. Als u niet het juiste wachtwoord opgeeft, unzip
zal de bestanden niet uitpakken.
unzip -q source_code.zip
Als het u niet uitmaakt of uw wachtwoord door anderen wordt gezien – of dat het wordt opgeslagen in uw opdrachtgeschiedenis – kunt u het wachtwoord op de opdrachtregel opgeven met de -P
(wachtwoord) optie. (U moet een hoofdletter “P” gebruiken)
unzip -P fifty.treacle.cutlass -q source_code.zip
Exclusief bestanden
Als u een bepaald bestand of een groep bestanden niet wilt uitpakken, gebruikt u de -x
(uitsluiten) optie. In dit voorbeeld willen we alle bestanden extraheren, behalve de bestanden die eindigen op een “.h” extensie.
unzip -q source_code.zip -x *.h
Bestanden overschrijven
Stel dat u een archief heeft uitgepakt, maar u heeft per ongeluk enkele uitgepakte bestanden verwijderd.
Een snelle oplossing hiervoor zou zijn om de bestanden opnieuw uit te pakken. Maar als u het ZIP-bestand probeert uit te pakken in dezelfde map als voorheen, unzip
zal u vragen om een beslissing over het overschrijven van de bestanden. Het verwacht een van de volgende reacties.
Los van de r
(hernoemen) reactie, deze reacties zijn hoofdlettergevoelig.
- y: Ja, overschrijf dit bestand
- n: Nee, overschrijf dit bestand niet
- EEN: Alle, overschrijf alle bestanden
- N: Geen, overschrijf geen van de bestanden
- r: Hernoem, pak dit bestand uit maar geef het een nieuwe naam. U wordt om een nieuwe naam gevraagd.
Te dwingen unzip
om bestaande bestanden te overschrijven, gebruikt u de -o
(overschrijven) optie.
unzip -o -q source_code.zip
De meest efficiënte manier om de ontbrekende bestanden te vervangen zou zijn unzip
extraheer alleen bestanden in het archief die niet in de doelmap. Gebruik hiervoor de -n
(nooit overschrijven) optie.
unzip -n source_code.zip
In een ZIP-bestand kijken
Het is vaak handig en leerzaam om een lijst van de bestanden in een ZIP-bestand te zien voordat u het uitpakt. U kunt dit doen met de -l
(lijst archief) optie. Het wordt doorgesluisd less
om de output beheersbaar te maken.
unzip -l source_code.zip | less
De uitvoer toont de mappen en bestanden in het ZIP-bestand, hun lengte en de tijd en datum waarop ze aan het archief zijn toegevoegd. Druk op “q” om af te sluiten less
.
Er zijn andere manieren om in een ZIP-bestand te kijken die verschillende soorten informatie geven, zoals we zullen zien.
Voeg een wachtwoord toe met het zipcloak-commando
Als u een ZIP-bestand heeft gemaakt maar bent vergeten een wachtwoord toe te voegen, wat kunt u dan doen? U kunt snel een wachtwoord aan een ZIP-bestand toevoegen met de zipcloak
opdracht. Geef de naam van het ZIP-bestand op de opdrachtregel door. U wordt om een wachtwoord gevraagd. U moet het wachtwoord verifiëren door het een tweede keer in te voeren.
zipcloak source_code.zip
Bekijk File Details Met de zipdetails Command
De zipdetails
commando zal je een veel van informatie over het ZIP-bestand. De enige verstandige manier om om te gaan met de hoeveelheid uitvoer die dit commando kan geven, is door het door te sluizen less
.
zipdetails source_code.zip | less
Merk op dat de informatie bestandsnamen zal bevatten, zelfs als het ZIP-bestand met een wachtwoord is beveiligd. Dit type informatie wordt als metagegevens in het ZIP-bestand opgeslagen en maakt geen deel uit van de gecodeerde gegevens.
Zoek in het bestand met de opdracht zipgrep
De zipgrep
commando kunt u zoeken binnen de bestanden in een ZIP-bestand. In het volgende voorbeeld willen we weten welke bestanden in het ZIP-bestand de tekst “keyval.h” bevatten.
zipgrep keyval.h source_code.zip
We kunnen zien dat de bestanden slang.c
en getval.c
bevatten de string “keyval.h”. We kunnen ook zien dat er van elk van deze bestanden twee kopieën zijn in verschillende mappen in het ZIP-bestand.
Bekijk informatie met de zipinfo-opdracht
De zipinfo
commando geeft je nog een andere manier om in een ZIP-bestand te kijken. Zoals eerder leiden we de output door less
.
zipinfo source_code.zip | less
Van links naar rechts toont de output:
- De bestandsrechten
- De versie van de tool die is gebruikt om het ZIP-bestand te maken
- De oorspronkelijke bestandsgrootte
- Een bestandsdescriptor (hieronder beschreven)
- De methode van compressie (in dit geval deflatie)
- De gegevens en tijdstempel
- De naam van het bestand en een directory
De bestandsdescriptor bestaat uit twee karakters. Het eerste teken is een “t” of een “b” om een tekst- of binair bestand aan te duiden. Als het een hoofdletter is, is het bestand versleuteld. Het tweede teken kan een van de vier tekens zijn. Dit teken geeft aan welk type metagegevens in dit bestand is opgenomen: geen, een uitgebreide lokale header, een “extra veld” of beide.
- -: Als geen van beide bestaat, is het teken een koppelteken
- l: als er een uitgebreide lokale header is maar geen extra veld
- X: als er geen uitgebreide lokale koptekst is maar wel een extra veld
- X: als er een uitgebreide lokale header is en er is een extra veld
Splits het bestand met het zipsplit-commando
Als u het ZIP-bestand naar iemand anders moet sturen, maar er zijn groottebeperkingen of problemen met de verzending van het bestand, kunt u de zipsplit
opdracht om het originele ZIP-bestand te splitsen in een reeks kleinere ZIP-bestanden.
De -n
Met de optie (grootte) kunt u een maximale grootte instellen voor elk van de nieuwe ZIP-bestanden. In dit voorbeeld splitsen we de source_code.zip
het dossier. We willen niet dat een van de nieuwe ZIP-bestanden groter is dan 100 KB (102400 bytes).
zipsplit -n 102400 source_code.zip
De grootte die u kiest, mag niet kleiner zijn dan de grootte van de bestanden in het ZIP-bestand.
Met behulp van deze commando’s kunt u uw eigen ZIP-bestanden maken, ZIP-bestanden die u ontvangt uitpakken en er verschillende andere bewerkingen op uitvoeren zonder ooit de Linux-terminal te verlaten.