ZIP-filer er et universelt arkiv, der almindeligvis bruges på Windows, macOS og endda Linux-systemer. Du kan oprette et zip-arkiv eller udpakke filer fra et med nogle almindelige Linux-terminalkommandoer.
Indholdsfortegnelse
ZIP-komprimeret arkivfilformat
Takket være dominansen af ZIP-formatet i Windows-riget, er ZIP-filer sandsynligvis den mest almindelige form for komprimeret arkiv i verden.
Mens .tar.gz- og tar.bz2-filer er almindelige på Linux, vil Windows-brugere sandsynligvis sende dig et arkiv i ZIP-format. Og hvis du vil arkivere nogle filer og sende dem til en Windows-bruger, vil ZIP-formatet være den nemmeste og mest kompatible løsning for alle.
zip, unzip og andre hjælpeprogrammer
Du ved måske allerede, at Linux- og Unix-lignende operativsystemer såsom macOS har værktøjer, der giver dig mulighed for at oprette ZIP-filer og udpakke filer fra dem, kaldet zip og unzip. Men der er en hel familie af relaterede værktøjer såsom zipcloak, zipdetails, zipsplit og zipinfo.
Vi tjekkede nogle Linux-distributioner for at se, om de inkluderede disse hjælpeprogrammer i standardinstallationen. Alle hjælpeprogrammerne var til stede i Ubuntu 19.04, 18.10 og 18.04. De var også til stede i Manjaro 18.04. Fedora 29 inkluderede zip og unzip, men ingen af de andre værktøjer, og det var også tilfældet for CentOS.
For at installere de manglende elementer på Fedora 29, brug følgende kommando:
sudo dnf install perl-IO-Compress
For at installere de manglende elementer på CentOS 7 skal du bruge følgende kommando:
sudo yum install perl-IO-Compress
Hvis nogen af zip-værktøjerne mangler i en Linux-distribution, der ikke er nævnt ovenfor, skal du bruge den pågældende Linux-distributions pakkehåndteringsværktøj til at installere den nødvendige pakke.
Sådan opretter du en ZIP-fil med zip-kommandoen
For at oprette en ZIP-fil skal du fortælle zip navnet på arkivfilen, og hvilke filer der skal inkluderes i den. Du behøver ikke tilføje udvidelsen “.zip” til arkivnavnet, men det skader ikke, hvis du gør det.
For at oprette en fil kaldet source_code.zip, der indeholder alle C-kildekodefiler og headerfiler i den aktuelle mappe, skal du bruge denne kommando:
zip source_code *.c *.h
Hver fil vises, efterhånden som den tilføjes. Navnet på filen og mængden af komprimering, der blev opnået på denne fil, vises.
Hvis du ser på det nye ZIP-arkiv, kan du se, at filtypen “.zip” er blevet tilføjet automatisk af zip.
ls -l source_code.zip
Hvis du ikke ønsker at se output fra zip, mens ZIP-filen oprettes, skal du bruge -q (stille) mulighed.
zip -q source_code *.c *.h
Inklusive mapper i ZIP-filer
For at inkludere undermapper i ZIP-filen skal du bruge indstillingen -r (rekursiv) og inkludere navnet på undermappen på kommandolinjen. For at oprette en ZIP-fil som før og også inkludere arkivunderbiblioteket, skal du bruge denne kommando.
zip -r -q source_code archive/ *.c *.h
For at tage hensyn til den person, der skal udpakke filerne fra den ZIP-fil, du opretter, er det ofte høfligt at oprette ZIP-filer med filerne inde i det indeholdt i en mappe. Når den person, der modtager ZIP-filen, udpakker den, placeres alle filerne pænt i en mappe på deres computer.
I den følgende kommando skal vi arkivere arbejdsmappen og alle undermapper. Bemærk, at denne kommando udsendes fra arbejdsmappens overordnede mappe.
zip -r -q source_code work/
Indstilling af kompressionsniveauet
Du kan indstille, hvor meget komprimering der skal anvendes på filerne, når de føjes til ZIP-arkivet. Området er fra 0 til 9, hvor 0 ikke er nogen komprimering overhovedet. Jo højere komprimering, jo længere tid tager det at oprette ZIP-filen. For ZIP-filer af beskeden størrelse er tidsforskellen ikke en væsentlig straf. Men for en beskeden størrelse ZIP-filer er standardkomprimeringen (niveau 6) sandsynligvis god nok alligevel.
For at få zip til at bruge et bestemt niveau af komprimering, skal du sende nummeret som en mulighed på kommandolinjen med et “-“, som dette:
zip -0 -r -q source_code work/
Standardkomprimeringsniveauet er 6. Der er ingen grund til at give muligheden -6, men det vil ikke skade, hvis du gør det.
zip -r -q source_code work/
Det maksimale kompressionsniveau er niveau 9.
zip -9 -r -q source_code work/
Med valget af filer og mapper, der arkiveres her, er forskellen mellem ingen komprimering (niveau 0) og standardkomprimeringen (niveau 6) 400K. Forskellen mellem standardkomprimeringen og det højeste kompressionsniveau (niveau 9) er kun 4K.
Det virker måske ikke meget, men for arkiver, der indeholder hundredvis eller endda tusindvis af filer, ville den lille mængde ekstra komprimering pr. fil lægge op til en værdifuld pladsbesparelse.
Tilføjelse af adgangskoder til ZIP-filer
Det er nemt at tilføje adgangskoder til ZIP-filer. Brug muligheden -e (krypter), og du vil blive bedt om at indtaste din adgangskode og indtaste den igen til verifikation.
zip -e -r -q source_code work/
Sådan udpakkes en ZIP-fil med unzip-kommandoen
For at udpakke filerne fra en ZIP-fil skal du bruge unzip-kommandoen og angive navnet på ZIP-filen. Bemærk, at du skal angive udvidelsen “.zip”.
unzip source_code.zip
Efterhånden som filerne udpakkes, vises de i terminalvinduet.
ZIP-filer indeholder ikke oplysninger om filejerskab. Alle de filer, der udpakkes, har ejeren indstillet til den bruger, der udpakker dem.
Ligesom zip har unzip en -q (stille) mulighed, så du ikke behøver at se fillisten, når filerne udpakkes.
unzip -q source_code.zip
Udpakning af filer til en målmappe
For at få filerne udpakket i en specifik mappe, skal du bruge -d (mappe) mulighed og angive stien til den mappe, du ønsker at arkivet skal udpakkes i.
unzip -q source_code.zip -d ./development
Udpak adgangskodebeskyttede ZIP-filer
Hvis en ZIP-fil er blevet oprettet med en adgangskode, vil unzip bede dig om adgangskoden. Hvis du ikke angiver den korrekte adgangskode, vil unzip ikke udpakke filerne.
unzip -q source_code.zip
Hvis du er ligeglad med, at din adgangskode bliver set af andre – og heller ikke om, at den bliver gemt i din kommandohistorik – kan du angive adgangskoden på kommandolinjen med -P (adgangskode). (Du skal bruge et stort “P.”)
unzip -P fifty.treacle.cutlass -q source_code.zip
Ekskluderer filer
Hvis du ikke vil udpakke en bestemt fil eller gruppe af filer, skal du bruge muligheden -x (ekskluder). I dette eksempel ønsker vi at udpakke alle filerne bortset fra dem, der ender med en “.h”-udvidelse.
unzip -q source_code.zip -x *.h
Overskrivning af filer
Antag, at du har udtrukket et arkiv, men du har slettet et par af de udpakkede filer ved en fejl.
En hurtig løsning på det ville være at udpakke filerne igen. Men hvis du forsøger at udpakke ZIP-filen i samme mappe som før, vil unzip bede dig om en beslutning om at overskrive filerne. Den vil forvente et af følgende svar.
Bortset fra r-svaret (omdøb) skelnes der mellem store og små bogstaver i disse svar.
y: Ja, overskriv denne fil
n: Nej, overskriv ikke denne fil
A: Alle, overskriv alle filerne
N: Ingen, overskriv ingen af filerne
r: Omdøb, udpak denne fil, men giv den et nyt navn. Du vil blive bedt om et nyt navn.
For at tvinge unzip til at overskrive eksisterende filer, brug -o (overskriv).
unzip -o -q source_code.zip
Den mest effektive måde at erstatte de manglende filer på ville være at lade unzip kun udpakke filer i arkivet, som ikke er i målmappen. For at gøre dette skal du bruge muligheden -n (overskriv aldrig).
unzip -n source_code.zip
Ser inde i en ZIP-fil
Det er ofte nyttigt og lærerigt at se en liste over filerne i en ZIP-fil, før du udpakker den. Du kan gøre dette med muligheden -l (listearkiv). Det gennemstrømmes mindre for at gøre output overskueligt.
unzip -l source_code.zip | less
Outputtet viser mapperne og filerne i ZIP-filen, deres længde og tidspunktet og datoen, de blev tilføjet til arkivet. Tryk på “q” for at afslutte fra mindre.
Der er andre måder at kigge ind i en ZIP-fil, som giver forskellige typer information, som vi skal se.
Tilføj en adgangskode med zipcloak-kommandoen
Hvis du har oprettet en ZIP-fil, men har glemt at tilføje en adgangskode, hvad kan du så gøre? Du kan hurtigt tilføje en adgangskode til ZIP-fil ved hjælp af zipcloak-kommandoen. Send navnet på ZIP-filen på kommandolinjen. Du vil blive bedt om en adgangskode. Du skal bekræfte adgangskoden ved at indtaste den endnu en gang.
zipcloak source_code.zip
Se fildetaljer med kommandoen zipdetails
Kommandoen zipdetails vil vise dig en masse information om ZIP-filen. Den eneste fornuftige måde at håndtere mængden af output, denne kommando kan give, er at røre den igennem mindre.
zipdetails source_code.zip | less
Bemærk, at oplysningerne vil inkludere filnavne, selvom ZIP-filen er beskyttet med adgangskode. Denne type information gemmes i ZIP-filen som metadata og er ikke en del af de krypterede data.
Søg inde i filen med zipgrep-kommandoen
Zipgrep-kommandoen giver dig mulighed for at søge i filerne i en ZIP-fil. I det følgende eksempel ønsker vi at vide, hvilke filer i ZIP-filen der har teksten “keyval.h” i sig.
zipgrep keyval.h source_code.zip
Vi kan se, at filerne slang.c og getval.c indeholder strengen “keyval.h”. Vi kan også se, at der er to kopier af hver af disse filer i forskellige mapper i ZIP-filen.
Se oplysninger med zipinfo-kommandoen
Zipinfo-kommandoen giver dig endnu en måde at se inde i en ZIP-fil. Som før rører vi output mindre igennem.
zipinfo source_code.zip | less
Fra venstre mod højre viser outputtet:
Filtilladelserne
Den version af værktøjet, der blev brugt til at oprette ZIP-filen
Den originale filstørrelse
En filbeskrivelse (beskrevet nedenfor)
Kompressionsmetoden (deflation, i dette tilfælde)
Data og tidsstempling
Navnet på filen og enhver mappe
Filbeskrivelsen består af to tegn. Det første tegn vil være et “t” eller et “b” for at angive en tekst eller binær fil. Hvis det er et stort bogstav, er filen krypteret. Det andet tegn kan være et af fire tegn. Dette tegn repræsenterer, hvilken type metadata der er inkluderet for denne fil: ingen, en udvidet lokal header, et “ekstra felt” eller begge dele.
-: Hvis ingen af dem findes, vil tegnet være en bindestreg
l: hvis der er en udvidet lokal overskrift, men intet ekstra felt
x: hvis der ikke er en udvidet lokal header, men der er et ekstra felt
X: hvis der er en udvidet lokal header og der er et ekstra felt
Opdel filen med zipsplit-kommandoen
Hvis du har brug for at sende ZIP-filen til en anden, men der er størrelsesbegrænsninger eller problemer med transmissionen af filen, kan du bruge zipsplit-kommandoen til at opdele den originale ZIP-fil i et sæt mindre ZIP-filer.
Indstillingen -n (størrelse) giver dig mulighed for at indstille en maksimal størrelse for hver af de nye ZIP-filer. I dette eksempel opdeler vi filen source_code.zip. Vi ønsker ikke, at nogen af de nye ZIP-filer skal være større end 100 KB (102400 bytes).
zipsplit -n 102400 source_code.zip
Den størrelse, du vælger, kan ikke være mindre end størrelsen på nogen af filerne i ZIP-filen.
Ved at bruge disse kommandoer kan du oprette dine egne ZIP-filer, udpakke ZIP-filer, du modtager, og udføre forskellige andre handlinger på dem uden nogensinde at forlade Linux-terminalen.