Arhivele ZIP sunt un format universal utilizat frecvent pe diverse sisteme, inclusiv Windows, macOS și Linux. În cadrul sistemelor Linux, se pot gestiona (crea sau extrage) fișiere din arhivele ZIP cu ajutorul unor comenzi simple, executate direct în terminal.
Formatul Arhivelor Comprimate ZIP
Formatul ZIP este dominant în mediul Windows, ceea ce îl face probabil cel mai răspândit tip de arhivă comprimată la nivel global.
Deși în Linux sunt populare formatele .tar.gz și tar.bz2, utilizatorii de Windows vor opta, de obicei, pentru arhivele ZIP. Așadar, dacă dorești să trimiți fișiere comprimate către un utilizator Windows, formatul ZIP reprezintă soluția cea mai compatibilă și facilă pentru ambele părți.
Utilitarele zip
, unzip
și Altele Conexe
Sistemele de operare Linux și Unix, cum ar fi macOS, pun la dispoziție instrumente de linie de comandă, zip
și unzip
, care permit crearea și extragerea fișierelor din arhive ZIP. Alături de acestea, există și alte utilitare auxiliare, cum ar fi zipcloak
, zipdetails
, zipsplit
și zipinfo
.
Am examinat mai multe distribuții Linux pentru a verifica dacă aceste utilitare sunt incluse în instalarea standard. În distribuții precum Ubuntu 19.04, 18.10, 18.04 și Manjaro 18.04, toate utilitarele menționate erau prezente. În schimb, Fedora 29 și CentOS includeau doar zip
și unzip
.
Pentru a instala utilitarele lipsă în Fedora 29, se folosește următoarea comandă:
sudo dnf install perl-IO-Compress
Pentru a instala utilitarele lipsă în CentOS 7, se utilizează comanda:
sudo yum install perl-IO-Compress
În cazul în care utilitarele zip lipsesc în alte distribuții Linux, se poate folosi instrumentul de gestionare a pachetelor specific distribuției respective pentru a instala pachetul corespunzător.
Crearea Arhivelor ZIP cu Comanda zip
Pentru a crea o arhivă ZIP, comanda zip
trebuie urmată de numele dorit pentru arhivă și de lista fișierelor ce urmează a fi incluse. Deși extensia „.zip” este opțională, nu este greșit dacă o adaugi.
De exemplu, pentru a crea o arhivă numită `source_code.zip` ce conține toate fișierele sursă C și fișierele header din directorul curent, se va folosi:
zip source_code *.c *.h
Pe parcursul adăugării, fiecare fișier este listat, împreună cu nivelul de compresie obținut.
Verificând arhiva creată, se poate observa că extensia „.zip” a fost adăugată automat.
ls -l source_code.zip
Pentru a evita afișarea detaliilor procesului de creare a arhivei, se poate folosi opțiunea `-q` (quiet):
zip -q source_code *.c *.h
Includerea Directoarelor în Arhivele ZIP
Pentru a include subdirectoare, se folosește opțiunea `-r` (recursivă), adăugând numele subdirectoarelor în linia de comandă. Astfel, pentru a include directorul „archive” în arhiva creată anterior:
zip -r -q source_code archive/ *.c *.h
Din considerație pentru destinatarul arhivei, este recomandat ca fișierele să fie grupate într-un director. Când arhiva este extrasă, fișierele vor fi plasate automat într-un director, evitându-se astfel dezordinea.
Următoarea comandă va arhiva directorul „work” și toate subdirectoarele acestuia, presupunând că este executată din directorul părinte:
zip -r -q source_code work/
Ajustarea Nivelului de Compresie
Nivelul de compresie poate fi controlat, variind de la 0 (fără compresie) la 9 (compresie maximă). Compresia mai mare implică un timp mai lung de creare a arhivei, dar pentru arhivele mici, diferența este neglijabilă. Compresia implicită (nivelul 6) este adesea suficientă.
Pentru a specifica un nivel de compresie, se adaugă numărul corespunzător, precedat de un „-„. De exemplu, pentru a folosi nivelul 0:
zip -0 -r -q source_code work/
Nivelul implicit de compresie este 6. Specificarea opțiunii `-6` este opțională.
zip -r -q source_code work/
Pentru compresie maximă, se folosește nivelul 9:
zip -9 -r -q source_code work/
În exemplul prezentat, diferența de dimensiune între compresia 0 și 6 a fost de 400K, iar între compresia 6 și 9 de doar 4K. Chiar și diferențele mici de compresie, pot deveni semnificative pentru arhive foarte mari, cu sute sau mii de fișiere.
Adăugarea Parolă la Arhivele ZIP
Parolarea arhivelor ZIP este simplă. Se folosește opțiunea `-e` (encrypt), iar sistemul va solicita introducerea și confirmarea parolei.
zip -e -r -q source_code work/
Extragerea Fișierelor din Arhivele ZIP cu unzip
Pentru a extrage fișierele dintr-o arhivă ZIP, se folosește comanda unzip
, urmată de numele arhivei (inclusiv extensia „.zip”):
unzip source_code.zip
Pe parcursul extragerii, fișierele sunt listate.
Fișierele ZIP nu conțin informații despre proprietarul fișierelor. Astfel, toate fișierele extrase vor avea ca proprietar utilizatorul curent.
Similar cu `zip`, `unzip` are opțiunea `-q` (quiet) pentru a evita afișarea listei fișierelor extrase:
unzip -q source_code.zip
Extragerea Fișierelor într-un Director Anume
Pentru a extrage fișierele într-un director specific, se folosește opțiunea `-d` (director), urmată de calea către directorul țintă:
unzip -q source_code.zip -d ./development
Extragerea Arhivelor ZIP Parolate
Dacă o arhivă ZIP a fost parolată, `unzip` va solicita introducerea acesteia. Fără parola corectă, extragerea nu va fi posibilă.
unzip -q source_code.zip
Pentru a introduce parola direct în linia de comandă (cu riscul vizibilității în istoricul comenzilor), se folosește opțiunea `-P`, urmată de parolă:
unzip -P fifty.treacle.cutlass -q source_code.zip
Excluderea Fișierelor din Extragere
Pentru a exclude anumite fișiere sau grupuri de fișiere de la extragere, se folosește opțiunea `-x` (exclude). De exemplu, pentru a exclude fișierele cu extensia „.h”:
unzip -q source_code.zip -x *.h
Suprascrierea Fișierelor
În cazul în care unele fișiere au fost extrase anterior și șterse din greșeală, la reextragere `unzip` va solicita confirmarea suprascrierii. Opțiunile disponibile sunt:
y | Da, suprascrie fișierul curent |
n | Nu, nu suprascrie fișierul curent |
R | Suprascrie toate fișierele |
N | Nu suprascrie niciun fișier |
r | Redenumire, solicită un nou nume |
Pentru a forța suprascrierea fișierelor existente, se folosește opțiunea `-o` (overwrite):
unzip -o -q source_code.zip
Pentru a extrage doar fișierele care nu există deja în directorul țintă, se folosește opțiunea `-n` (never overwrite):
unzip -n source_code.zip
Vizualizarea Conținutului unei Arhive ZIP
Pentru a vizualiza lista fișierelor dintr-o arhivă ZIP înainte de extragere, se folosește opțiunea `-l` (list archive). Ieșirea este redirecționată către `less` pentru o vizualizare mai facilă:
unzip -l source_code.zip | less
Ieșirea afișează directoarele și fișierele din arhivă, dimensiunea și data adăugării. Se apasă tasta „q” pentru a ieși din `less`.
Există și alte utilitare care oferă informații diverse despre conținutul arhivelor ZIP.
Adăugarea Parolă cu zipcloak
Dacă s-a uitat adăugarea parolei la crearea arhivei, se poate folosi comanda `zipcloak`, urmată de numele arhivei. Sistemul va solicita parola și confirmarea acesteia:
zipcloak source_code.zip
Vizualizarea Detaliilor cu zipdetails
Comanda `zipdetails` oferă informații detaliate despre arhivele ZIP. Datorită volumului mare de informații, ieșirea este redirecționată către `less`:
zipdetails source_code.zip | less
Informațiile includ numele fișierelor, chiar dacă arhiva este parolată. Aceste informații sunt stocate ca metadate, nefiind criptate.
Căutarea în Arhivele ZIP cu zipgrep
Comanda `zipgrep` permite căutarea textului în fișierele unei arhive ZIP. De exemplu, pentru a căuta fișierele care conțin textul „keyval.h”:
zipgrep keyval.h source_code.zip
Rezultatul indică fișierele și directoarele unde a fost găsit textul căutat.
Informații Suplimentare cu zipinfo
Comanda `zipinfo` oferă încă o modalitate de vizualizare a informațiilor din arhivele ZIP, ieșirea fiind direcționată către `less`:
zipinfo source_code.zip | less
Informațiile afișate includ permisiunile fișierului, versiunea instrumentului folosit la creare, dimensiunea originală, un descriptor de fișier, metoda de compresie, data și ora, numele fișierului și directorul.
Descriptorul fișierului este format din două caractere: primul indică tipul (text sau binar), iar o majusculă indică faptul că fișierul este criptat. Al doilea caracter indică tipul de metadate (niciuna, antet extins, câmp suplimentar, sau ambele).
Simboluri folosite pentru descriptor:
- -: Niciuna
- l: Antet local extins
- x: Câmp suplimentar
- X: Antet local extins și câmp suplimentar
Divizarea Arhivelor ZIP cu zipsplit
Comanda `zipsplit` permite divizarea unei arhive ZIP mari în mai multe arhive mai mici, util pentru transferul fișierelor cu restricții de dimensiune. Opțiunea `-n` (size) permite specificarea dimensiunii maxime a fișierelor rezultate. De exemplu, pentru a diviza arhiva în fișiere de maximum 100KB:
zipsplit -n 102400 source_code.zip
Dimensiunea specificată nu poate fi mai mică decât dimensiunea oricărui fișier din arhiva originală.
Prin utilizarea acestor comenzi, gestionarea arhivelor ZIP poate fi realizată direct din terminalul Linux, oferind o metodă eficientă și rapidă pentru manipularea fișierelor comprimate.