ZIP-filer representerar ett allmänt använt arkivformat, flitigt förekommande i miljöer som Windows, macOS och även Linux-system. Genom att använda några enkla kommandon i Linux-terminalen, kan du enkelt skapa egna ZIP-arkiv eller extrahera filer från befintliga.
ZIP-formatet för komprimerade arkiv
ZIP-formatets dominerande ställning inom Windows-världen har gjort det till en av de mest frekventa metoderna för komprimerade arkiv globalt.
Medan .tar.gz- och .tar.bz2-filer är vanliga i Linux-sammanhang, är det troligt att Windows-användare skickar dig filer i ZIP-format. Likaså, om du behöver arkivera filer för överföring till en Windows-användare, utgör ZIP-formatet den mest kompatibla och lättanvända lösningen för alla inblandade.
Verktyg som zip, unzip och andra
Det är kanske redan välkänt att Linux och Unix-baserade operativsystem, inklusive macOS, tillhandahåller verktyg som underlättar skapandet och extraheringen av ZIP-filer, vanligtvis benämnda zip och unzip. Emellertid finns det även andra relaterade verktyg, såsom zipcloak, zipdetails, zipsplit och zipinfo.
Vi genomförde tester på ett antal Linux-distributioner för att utvärdera om dessa verktyg var en del av standardinstallationen. Vi fann samtliga verktyg i Ubuntu 19.04, 18.10 och 18.04, samt Manjaro 18.04. Fedora 29 och CentOS innehöll dock endast zip och unzip.
För att komplettera de saknade verktygen i Fedora 29, kan du använda följande kommando:
sudo dnf install perl-IO-Compress
Och för att installera dem på CentOS 7, använd detta kommando:
sudo yum install perl-IO-Compress
Om någon av ZIP-verktygen saknas i en Linux-distribution som inte nämnts, använd distributionens pakethanterare för att installera det aktuella paketet.
Skapa ZIP-filer med zip-kommandot
För att initiera skapandet av en ZIP-fil, specificera det önskade namnet på arkivfilen samt de filer som ska inkluderas. Även om det inte är obligatoriskt att lägga till filändelsen ”.zip”, kan det vara bra att göra det för tydlighetens skull.
Om du exempelvis vill skapa en fil med namnet source_code.zip, innehållande alla C-källkodsfiler och rubrikfiler i den aktuella katalogen, kan du använda följande kommando:
zip source_code *.c *.h
Varje fil listas vid tillägg, tillsammans med dess namn och den uppnådda komprimeringsnivån.
Om du granskar det nybildade ZIP-arkivet, kommer du att märka att filändelsen ”.zip” har lagts till automatiskt av zip.
ls -l source_code.zip
Om du vill undvika att se utmatningen från zip under skapandet av ZIP-filen, kan du använda alternativet -q (tyst).
zip -q source_code *.c *.h
Inkludera kataloger i ZIP-filer
För att införliva underkataloger i ZIP-filen, använd alternativet -r (rekursivt) och ange namnet på underkatalogen i kommandot. För att skapa en ZIP-fil som tidigare men även med underkatalogen archive, använd detta kommando:
zip -r -q source_code archive/ *.c *.h
För att underlätta för den person som ska extrahera filer från din skapade ZIP-fil, är det ofta bra att strukturera ZIP-filer så att filerna hamnar i en katalog. När mottagaren extraherar filen, hamnar alla filer prydligt i en specifik mapp på dennes dator.
I det följande kommandot kommer arbetskatalogen och alla dess underkataloger att arkiveras. Notera att detta kommando körs från den överordnade katalogen till arbetsmappen.
zip -r -q source_code work/
Justera komprimeringsnivån
Du kan reglera mängden komprimering som appliceras på filerna när de läggs till i ZIP-arkivet. Skalan sträcker sig från 0 till 9, där 0 innebär ingen komprimering alls. Högre komprimeringsnivåer leder till längre skapandetid av ZIP-filen. För mindre ZIP-filer är tidsskillnaden obetydlig. För medelstora ZIP-filer är den standardmässiga komprimeringsnivån (nivå 6) oftast tillräcklig.
För att specificera en särskild komprimeringsnivå för zip, ange numret som ett alternativ med ett ”-” i kommandot:
zip -0 -r -q source_code work/
Standardkomprimeringsnivån är 6. Att specificera alternativet -6 är valfritt.
zip -r -q source_code work/
Maximal komprimeringsnivå är 9.
zip -9 -r -q source_code work/
Med de valda filerna och katalogerna för arkivering, skiljer sig mellan ingen komprimering (nivå 0) och standardkomprimering (nivå 6) med 400K. Skillnaden mellan standardkomprimeringen och högsta komprimeringsnivå (nivå 9) är endast 4K.
Detta kanske inte verkar mycket, men för arkiv med hundratals eller tusentals filer kan den extra komprimeringen per fil resultera i en betydande platsbesparing.
Lägg till lösenord till ZIP-filer
Att lägga till lösenord i ZIP-filer är enkelt. Använd alternativet -e (kryptera), så kommer du att bli ombedd att ange ett lösenord och bekräfta det genom att ange det igen.
zip -e -r -q source_code work/
Extrahera ZIP-filer med unzip-kommandot
För att extrahera filer från en ZIP-fil, använd kommandot unzip och specificera namnet på ZIP-filen. Kom ihåg att ange filändelsen ”.zip”.
unzip source_code.zip
När filerna extraheras, listas de i terminalfönstret.
ZIP-filer lagrar inte information om filägande. Alla filer som extraheras tilldelas ägaren som extraherade dem.
Liksom zip, erbjuder unzip ett alternativ -q (tyst) för att slippa se filförteckningen under extraheringen.
unzip -q source_code.zip
Extrahera filer till en specificerad katalog
För att extrahera filerna till en särskild katalog, använd alternativet -d (katalog) och specificera sökvägen till önskad katalog.
unzip -q source_code.zip -d ./development
Extrahera lösenordsskyddade ZIP-filer
Om en ZIP-fil har skapats med lösenord, kommer unzip att begära lösenordet. Om du inte anger korrekt lösenord, kommer unzip inte att extrahera filerna.
unzip -q source_code.zip
Om du inte är rädd för att ditt lösenord ska synas för andra, och inte bryr dig om att det lagras i din kommandohistorik, kan du ange lösenordet direkt i kommandot med alternativet -P (lösenord). (Observera användningen av stort ”P”.)
unzip -P fifty.treacle.cutlass -q source_code.zip
Exkludera filer
Om du vill undvika att extrahera en viss fil eller en grupp filer, använd alternativet -x (exkludera). I detta exempel kommer alla filer utom de som slutar på filändelsen ”.h” att extraheras.
unzip -q source_code.zip -x *.h
Skriva över filer
Antag att du har extraherat ett arkiv och sedan av misstag raderat några av de extraherade filerna.
En snabb lösning på detta kan vara att extrahera filerna på nytt. Om du däremot försöker extrahera ZIP-filen till samma katalog som tidigare, kommer unzip att be dig om ett beslut om överskrivning. Programmet förväntar sig ett av följande svar.
Förutom r-svaret (byt namn), är dessa svar skiftlägeskänsliga.
y: Ja, skriv över denna fil
n: Nej, skriv inte över denna fil
S: Alla, skriv över alla filer
N: Ingen, skriv inte över någon fil
r: Byt namn, extrahera den här filen men ge den ett nytt namn. Du kommer att bli tillfrågad om ett nytt namn.
Använd alternativet -o (skriv över) för att tvinga unzip att skriva över befintliga filer.
unzip -o -q source_code.zip
Det mest effektiva sättet att återskapa de förlorade filerna är att endast extrahera de filer i arkivet som saknas i målkatalogen. För att åstadkomma detta, använd alternativet -n (skriv aldrig över).
unzip -n source_code.zip
Granska innehållet i en ZIP-fil
Det är ofta hjälpsamt och lärorikt att granska en lista över filerna i en ZIP-fil innan man extraherar dem. Du kan göra detta med alternativet -l (listarkiv). Utmatningen kopplas vidare till less för att hantera visningen.
unzip -l source_code.zip | less
Utmatningen visar katalogerna och filerna i ZIP-filen, deras storlek samt tid och datum när de lades till i arkivet. Tryck på ”q” för att avsluta less.
Det finns andra sätt att granska en ZIP-fil som ger olika typer av information, vilket vi kommer att utforska.
Lägg till lösenord med zipcloak-kommandot
Om du har skapat en ZIP-fil men glömt att lägga till ett lösenord, vad gör du? Du kan snabbt lägga till ett lösenord till ZIP-filen genom att använda zipcloak-kommandot. Ange namnet på ZIP-filen i kommandot, så kommer du att bli ombedd att ange ett lösenord och bekräfta det genom att ange det en andra gång.
zipcloak source_code.zip
Visa filinformation med zipdetails-kommandot
Kommandot zipdetails visar detaljerad information om ZIP-filen. För att kunna hantera den stora mängden information som detta kommando kan ge, är det lämpligt att leda resultatet genom less.
zipdetails source_code.zip | less
Observera att informationen kommer att inkludera filnamn, även om ZIP-filen är lösenordsskyddad. Denna typ av information lagras i ZIP-filen som metadata och är inte en del av den krypterade datan.
Sök i filen med zipgrep-kommandot
Med zipgrep kan du söka efter filer i ett ZIP-arkiv. I följande exempel vill vi ta reda på vilka filer i ZIP-filen som innehåller texten ”keyval.h”.
zipgrep keyval.h source_code.zip
Vi kan se att filerna slang.c och getval.c innehåller strängen ”keyval.h”. Vi ser även att det finns två versioner av var och en av dessa filer i olika kataloger i ZIP-filen.
Visa information med zipinfo-kommandot
Kommandot zipinfo ger ytterligare ett sätt att inspektera en ZIP-fil. Som tidigare leds utmatningen genom less.
zipinfo source_code.zip | less
Från vänster till höger visar utmatningen följande:
Filbehörigheter
Den version av verktyget som användes för att skapa ZIP-filen
Den ursprungliga filstorleken
En filbeskrivning (beskrivs nedan)
Metoden för komprimering (deflation, i detta fall)
Data och tidsstämpel
Namnet på filen samt eventuell katalog
Filbeskrivningen består av två tecken. Det första tecknet är ”t” eller ”b” för att indikera en text- eller binär fil. Om tecknet är en versal, är filen krypterad. Det andra tecknet kan vara ett av fyra. Detta tecken representerar vilken typ av metadata som finns med för den här filen: ingen, ett utökat lokalt huvud, ett extra fält eller båda.
-: Om inget av ovanstående finns, är tecknet ett bindestreck
l: Om det finns ett utökat lokalt huvud, men inget extra fält
x: Om det inte finns ett utökat lokalt huvud, men det finns ett extra fält
X: Om det finns både ett utökat lokalt huvud och ett extra fält
Dela filen med zipsplit-kommandot
Om du behöver skicka ZIP-filen till någon, men det finns begränsningar i storlek eller problem med filöverföringen, kan du använda zipsplit-kommandot för att dela upp den ursprungliga ZIP-filen i mindre ZIP-filer.
Alternativet -n (storlek) låter dig ange en maximal storlek för varje ny ZIP-fil. I detta exempel delas filen source_code.zip. Vi vill att ingen av de nya ZIP-filerna ska vara större än 100 KB (102400 byte).
zipsplit -n 102400 source_code.zip
Den valda storleken får inte vara mindre än storleken på någon enskild fil i ZIP-filen.
Med dessa kommandon kan du skapa dina egna ZIP-filer, packa upp ZIP-filer som du tar emot och utföra en mängd andra operationer på dem, allt utan att behöva lämna Linux-terminalen.