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 -li 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 (-robavezno za direktorijum)unzip ime.zip·unzip ime.zip -d /gde/unzip -l ime.zip— pogledaj sadržaj pre raspakivanjaunzip -t ime.zip— provera ispravnostizip -r ime.zip dir/ -x "*.log"— izostavi (-xide na kraj)zip -0bez kompresije ·-9najjačazip -d ime.zip fajl— ukloni iz arhiveunzip -j— bez strukture direktorijumaunzip -o/-n— uvek / nikad prepišiunzip -O cp852— arhiva sa Windowsa, naša slovazip -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
- Napravi zip arhivu direktorijuma
vezba, pa pogledaj njen sadržaj bez raspakivanja. - Raspakuj je u
/tmp/testi proveri šta se desilo sa dozvolama600i sa simboličkim linkom. - Napravi istu arhivu kao
tar.gz, raspakuj je u drugi direktorijum i uporedi rezultat sa prethodnim zadatkom. - Napravi zip arhivu koja izostavlja sve
.logfajlove, pa proveri da ih zaista nema. - 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
Post a Comment