zip i unzip — arhiva koja radi i na Windowsu

Uprkos sličnom imenu, zip i gzip nemaju mnogo zajedničkog. gzip samo smanjuje jedan fajl, a tar samo spaja više njih. zip radi oba posla odjednom.

Zbog toga na Linuxu nije podrazumevan izbor — ali ima jednu prednost koju tar nema: otvara se dvoklikom na svakom sistemu, bez ijednog dodatnog programa. Kad arhivu šalješ nekome ko nije na Linuxu, zip je pravi izbor.

Osnovno

$ zip arhiva.zip fajl1.txt fajl2.txt
  adding: fajl1.txt (deflated 62%)
  adding: fajl2.txt (deflated 58%)

Za direktorijum je -r obavezno:

$ zip -r sajt.zip sajt/
  adding: sajt/ (stored 0%)
  adding: sajt/index.html (deflated 71%)
  adding: sajt/css/style.css (deflated 68%)

Bez -r dobijaš arhivu sa praznim direktorijumom i ničim unutra — što je najčešća greška sa ovom komandom.

Nastavak .zip se dodaje sam ako ga nisi napisao.

Raspakivanje

$ unzip sajt.zip
$ unzip sajt.zip -d /gde/hocu/

Za razliku od tar-a, gde je odredište -C, ovde je -d.

Pregled pre raspakivanja

$ unzip -l paket.zip
Archive:  paket.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2026-08-22 09:14   paket-1.2/
     1284  2026-08-22 09:14   paket-1.2/README
     4102  2026-08-22 09:14   paket-1.2/src/main.c
---------                     -------
     5386                     3 files

Uradi ovo sa svakom nepoznatom arhivom. Ako fajlovi nisu u jednom direktorijumu, raspakivanje bi ih prosulo posvuda:

$ mkdir raspakovano && unzip lose.zip -d raspakovano

Šta zip ne čuva

Ovo je razlog zašto se backup Linux sistema ne pravi u zip formatu.

Vlasnik i grupa ne čuva se
Simbolički linkovi podrazumevano se prate i pakuje se sadržaj
Dozvole delimično, i zavisi od alata koji raspakuje
Vreme izmene čuva se

U praksi to izgleda ovako:

$ ls -l tajna.txt
-rw------- 1 alen urednici 128 Aug 22 11:02 tajna.txt

$ zip arhiva.zip tajna.txt
$ mkdir /tmp/test && unzip arhiva.zip -d /tmp/test
$ ls -l /tmp/test/tajna.txt
-rw-r--r-- 1 alen alen 128 Aug 22 11:02 tajna.txt

Dozvole su se otvorile, grupa je promenjena. Ako tako vratiš /var/www na drugi server, svi fajlovi pripadaju tebi umesto web serveru — i sajt ne radi.

Za simbolički link postoji zastavica:

$ zip -ry arhiva.zip direktorijum/

-y pakuje link kao link. Ali to poništava glavnu prednost formata, jer Windows sa tim ne zna šta će. Ako ti treba da link preživi, koristi tar. Više o linkovima u lekciji Inode-ovi i linkovi.

Korisne opcije

Izostavljanje

$ zip -r projekat.zip projekat/ -x "*.log" "*/node_modules/*" "*/.git/*"

Dve stvari: navodnici su obavezni, a -x ide na kraj komande — suprotno od tar-a, gde --exclude mora doći pre imena direktorijuma.

Nivo kompresije

$ zip -r -0 arhiva.zip slike/     # bez kompresije, samo spajanje
$ zip -r -9 arhiva.zip dokumenti/ # najjača

Podrazumevano je -6. Za JPEG i MP4 fajlove koristi -0 — kompresija tu ne donosi ništa, a troši vreme.

Deljenje na delove

$ zip -r -s 100m velika.zip direktorijum/
$ ls
velika.z01  velika.z02  velika.z03  velika.zip

Za slanje mejlom ili prenos preko medija sa ograničenjem veličine. Za raspakivanje moraju biti prisutni svi delovi:

$ zip -s 0 velika.zip --out spojena.zip
$ unzip spojena.zip

Dodavanje i uklanjanje

$ zip arhiva.zip novi.txt        # dodaj
$ zip -d arhiva.zip stari.txt    # ukloni iz arhive
$ zip -u arhiva.zip *.txt        # osveži samo izmenjene

Ovde je zip praktičniji od tar-a, koji komprimovanu arhivu ne može menjati uopšte.

Samo određeni fajl iz arhive

$ unzip arhiva.zip "dokumenti/*"
$ unzip -j arhiva.zip "*.txt" -d /tmp/

Opcija -j odbacuje strukturu direktorijuma i vadi sve fajlove u jedan.

Bez pitanja pri prepisivanju

$ unzip -o arhiva.zip     # prepiši sve bez pitanja
$ unzip -n arhiva.zip     # nikad ne prepisuj

Bez ovih zastavica unzip pita za svaki postojeći fajl, što u skripti znači da se zaglavi čekajući odgovor.

Provera ispravnosti

$ unzip -t arhiva.zip
    testing: sajt/index.html         OK
    testing: sajt/css/style.css      OK
No errors detected in compressed data of arhiva.zip.

Lozinka — i zašto joj ne treba verovati

$ zip -er poverljivo.zip dokumenti/
Enter password:
Verify password:

Opcija -e traži lozinku, -r je za direktorijum. Radi, i otvara se na svakom sistemu.

Ali ima dve ozbiljne mane:

  • Imena fajlova ostaju vidljiva. Bilo ko može pokrenuti unzip -l i videti šta je unutra, bez lozinke.
  • Starija zip zaštita se probija za nekoliko minuta. Novija AES varijanta je bolja, ali je ne podržavaju svi alati.

Za nešto stvarno osetljivo koristi gpg:

$ tar -czf - dokumenti/ | gpg -c > dokumenti.tar.gz.gpg

I nikako ne kucaj lozinku u samu komandu:

$ zip -P tajna123 -r arhiva.zip dir/     # NE

Lozinka ostaje u history fajlu i vidi se u ps ispisu svakom korisniku na sistemu.

Problemi sa arhivama sa Windowsa

Naša slova u imenima fajlova

$ unzip dokumenti.zip
  inflating: Izve_taj o_.pdf

Windows je imena upisao u cp852 ili cp1250, a Linux očekuje UTF-8. Rešenje:

$ unzip -O cp852 dokumenti.zip

Ako tvoja verzija ne podržava -O, postoji alternativni alat:

$ sudo apt install unar
$ unar -e cp852 dokumenti.zip

Obrnute kose crte u putanjama

$ unzip -l stara.zip
   dokumenti\izvestaj.pdf

Arhiva iz vrlo starog Windows programa. Alat unar to razrešava ispravno, dok unzip pravi fajl sa obrnutom kosom crtom u imenu.

Krajevi reda

$ file skripta.sh
skripta.sh: Bourne-Again shell script, with CRLF line terminators

Nije problem zip-a nego sadržaja. Popravka je dos2unix, kao što je objašnjeno na stranici Tekstualni editori.

Fajl __MACOSX

$ unzip -l sa-maca.zip
   __MACOSX/
   __MACOSX/._dokument.pdf
   dokument.pdf

macOS dodaje sopstvene pomoćne fajlove. Izbaci ih pri raspakivanju:

$ unzip sa-maca.zip -x "__MACOSX/*"

zip protiv tar-a

Koristi zip kad Arhiva ide nekome ko nije na Linuxu · treba dodati ili ukloniti fajl iz postojeće arhive · treba izvući jedan fajl bez čitanja cele arhive
Koristi tar kad Backup Linux sistema · dozvole i vlasništvo moraju preživeti · treba jača kompresija (xz) · sve ostaje u Linux svetu

Jedna tehnička razlika koja objašnjava treću stavku: zip svaki fajl pakuje zasebno i ima spisak na kraju arhive, pa se pojedinačan fajl vadi direktno. tar.gz je jedan neprekidan tok, pa se za jedan fajl mora raspakovati sve do njega.

Otud i suprotna posledica: pošto tar pakuje sve odjednom, kompresija je bolja — ponavljanja između fajlova se iskorišćavaju. Zip to ne može.

Kratka referenca

  • zip -r ime.zip dir/ — napravi (-r obavezno za direktorijum)
  • unzip ime.zip · unzip ime.zip -d /gde/
  • unzip -l ime.zip — pogledaj sadržaj pre raspakivanja
  • unzip -t ime.zip — provera ispravnosti
  • zip -r ime.zip dir/ -x "*.log" — izostavi (-x ide na kraj)
  • zip -0 bez kompresije · -9 najjača
  • zip -d ime.zip fajl — ukloni iz arhive
  • unzip -j — bez strukture direktorijuma
  • unzip -o / -n — uvek / nikad prepiši
  • unzip -O cp852 — arhiva sa Windowsa, naša slova
  • zip -er — sa lozinkom (slaba zaštita, imena ostaju vidljiva)

Vežba

$ mkdir -p ~/vezba/{dokumenti,logovi}
$ echo "tekst" > ~/vezba/dokumenti/beleska.txt
$ echo "greska" > ~/vezba/logovi/app.log
$ chmod 600 ~/vezba/dokumenti/beleska.txt
$ ln -s dokumenti ~/vezba/precica
  1. Napravi zip arhivu direktorijuma vezba, pa pogledaj njen sadržaj bez raspakivanja.
  2. Raspakuj je u /tmp/test i proveri šta se desilo sa dozvolama 600 i sa simboličkim linkom.
  3. Napravi istu arhivu kao tar.gz, raspakuj je u drugi direktorijum i uporedi rezultat sa prethodnim zadatkom.
  4. Napravi zip arhivu koja izostavlja sve .log fajlove, pa proveri da ih zaista nema.
  5. Iz arhive ukloni jedan fajl bez raspakivanja, pa proveri sadržaj.

Drugi i treći zadatak zajedno objašnjavaju zašto se Linux backup ne pravi u zip formatu.


Pregled cele oblasti je na stranici Arhiviranje i raspakivanje datoteka, standardna Linux arhiva na stranici tar, a kompresija pojedinačnih fajlova na stranici gzip, bzip2 i xz.

Cela lekcija je deo vodiča Linux osnove.

Comments

Popular posts from this blog

Početak u Linuxu — šta je i zašto se uči

Konverzija tipova podataka u Pythonu

groupadd