Uvod
Unix predstavlja jedan od najuticajnijih operativnih sistema u istoriji računarstva. Njegova arhitektura, filozofija dizajna i alati oblikovali su gotovo sve moderne operativne sisteme — od Linuxa i macOS-a, do Androida i sistema koji pokreću internet infrastrukturu. Ovaj rad opisuje istorijski razvoj Unix-a, njegovu filozofiju, tehničku arhitekturu, kao i napredne tehnike rada u Unix/Unix-like okruženjima namenjene iskusnim korisnicima.
1. Istorijski nastanak Unix-a
1.1 Koreni: Multics projekat
Krajem šezdesetih godina 20. veka, Bell Laboratories (u vlasništvu AT&T-a), Massachusetts Institute of Technology (MIT) i General Electric zajednički su razvijali ambiciozan operativni sistem pod nazivom Multics (Multiplexed Information and Computing Service). Cilj je bio da se stvori sistem sa vremenskom deobom (time-sharing) koji bi omogućio da veliki broj korisnika istovremeno koristi jedan računar, uz napredne mehanizme zaštite i sigurnosti podataka.
Projekat je bio izuzetno kompleksan i sporo je napredovao. Zbog rastućih troškova i kašnjenja, Bell Labs je 1969. godine povukao svoje učešće iz Multics projekta.
1.2 Rođenje Unix-a u Bell Labs-u
Nakon povlačenja iz Multics-a, grupa istraživača u Bell Labs-u — pre svega Ken Thompson i Dennis Ritchie, uz doprinose Douglasa McIlroya, Joea Ossanne i drugih — nastavila je da eksperimentiše sa idejama iz Multics-a, ali u znatno jednostavnijoj formi.
Thompson je 1969. godine, na napuštenom PDP-7 računaru, napisao prvi prototip novog operativnog sistema, uključujući primitivni fajl-sistem, planer procesa i nekoliko osnovnih alata. Naziv “Unix” (u početku pisan kao “Unics” — Uniplexed Information and Computing Service) nastao je kao igra reči, ironičan kontrast prema kompleksnom Multics-u — sistem je bio namerno mnogo jednostavniji i “jednokorisnički” u ranoj fazi.
1.3 Prelazak na C jezik
Prve verzije Unix-a bile su napisane u asembleru, što je ograničavalo prenosivost sistema na druge tipove hardvera. Dennis Ritchie je 1972–1973. godine razvio programski jezik C, delimično inspirisan jezikom B (koji je i sam bio izveden iz BCPL-a). Godine 1973. Thompson i Ritchie su preneli (rewrite) veći deo Unix kernela na jezik C.
Ova odluka imala je istorijski značaj: po prvi put je operativni sistem u velikoj meri bio napisan u višem programskom jeziku, što je omogućilo:
- Prenosivost — Unix se mogao relativno lako prilagoditi različitim arhitekturama procesora.
- Čitljivost i održivost koda u odnosu na asembler.
- Brz razvoj novih funkcionalnosti.
1.4 Širenje van Bell Labs-a
Zbog antitrust regulacija, AT&T u to vreme nije smeo komercijalno da prodaje softver, pa je Unix distribuiran univerzitetima uz simboličnu naknadu, zajedno sa izvornim kodom. Ovo je imalo ogroman uticaj — generacije studenata i istraživača učile su i modifikovale Unix kod, što je dovelo do eksplozije inovacija.
Najznačajniji akademski centar razvoja bio je Univerzitet Berkli (UC Berkeley), gde je nastala grana poznata kao BSD (Berkeley Software Distribution), uz doprinose ključnih ličnosti poput Billa Joya.
1.5 Unix ratovi i fragmentacija
Tokom osamdesetih godina, AT&T je počeo komercijalno da licencira System V verziju Unix-a, dok se paralelno razvijao BSD Unix na Berkliju. Različite kompanije (Sun Microsystems, IBM, HP, DEC, Silicon Graphics) razvile su sopstvene varijante: SunOS/Solaris, AIX, HP-UX, Ultrix, IRIX. Ova fragmentacija, poznata i kao “Unix ratovi”, dovela je do nekompatibilnosti između sistema.
Kao odgovor na fragmentaciju, uspostavljen je standard POSIX (Portable Operating System Interface), koji je definisao zajednički skup API-ja i alata kako bi se osigurala prenosivost softvera između različitih Unix implementacija.
1.6 GNU projekat i Linux
Godine 1983. Richard Stallman je pokrenuo GNU projekat (GNU’s Not Unix), sa ciljem da stvori potpuno slobodan operativni sistem kompatibilan sa Unix-om. GNU projekat je proizveo ključne alate (GCC kompajler, Bash ljusku, coreutils), ali mu je nedostajao funkcionalan kernel.
Taj nedostajući deo popunio je Linus Torvalds, koji je 1991. godine, kao student u Finskoj, objavio prvu verziju Linux kernela. Kombinacijom Linux kernela i GNU alata nastao je GNU/Linux sistem, koji je danas dominantan u serverskom, cloud i embedded okruženju.
Paralelno, iz BSD linije razvili su se slobodni sistemi kao što su FreeBSD, OpenBSD i NetBSD, dok je Apple-ov macOS izgrađen na osnovi Unix-sertifikovanog jezgra (Darwin, zasnovanog na BSD i Mach kernelu).
2. Filozofija Unix-a
Unix filozofija, koju su artikulisali Doug McIlroy, Ritchie i drugi, sastoji se od nekoliko ključnih principa koji su duboko uticali na dizajn softvera uopšte:
- “Piši programe koji rade jednu stvar i rade je dobro.” Svaki alat treba da bude specijalizovan i jednostavan.
- “Piši programe koji rade zajedno.” Izlaz jednog programa treba da bude čitljiv ulaz za drugi — otuda koncept pipe-ova (cevi).
- “Piši programe koji obrađuju tekstualne tokove”, jer je tekst univerzalni interfejs.
- Sve je fajl — uređaji, procesi, čak i mrežne veze predstavljeni su kroz fajl-sistemski interfejs, što pojednostavljuje interakciju sa sistemom.
- Modularnost i kompozabilnost iznad monolitnih, “sve-u-jednom” rešenja.
Ova filozofija je direktan koren moćnog koncepta kombinovanja malih alata pomoću pipe-ova, koji i danas predstavlja osnovu rada u terminalu.
3. Arhitektura Unix sistema
Unix arhitektura sastoji se iz nekoliko slojeva:
- Kernel (jezgro) — upravlja hardverom, memorijom, procesima, fajl-sistemom i I/O operacijama. Radi u privilegovanom režimu (kernel space).
- System call interfejs — sloj preko kojeg korisnički programi (user space) komuniciraju sa kernelom (npr.
open(),read(),write(),fork(),exec()). - Shell (ljuska) — komandno-linijski interpreter (npr.
sh,bash,zsh,fish) koji služi kao interfejs između korisnika i sistema. - Korisnički alati i biblioteke — standardni Unix alati (
ls,grep,awk,sed, itd.) i biblioteke poputlibc.
Ključni koncepti kernela uključuju:
- Procesi — svaki proces ima jedinstveni PID, roditeljski proces (PPID), i nastaje pozivom
fork(), dok se novi program pokreće pozivom izexec()familije funkcija. - Fajl-sistem — hijerarhijska struktura sa jedinstvenim korenim direktorijumom (
/), gde su uređaji predstavljeni kao fajlovi u/dev. - Permisije — svaki fajl ima vlasnika (owner), grupu (group) i “ostale” (others), sa pravima čitanja (r), pisanja (w) i izvršavanja (x).
- Signali — mehanizam asinhrone komunikacije sa procesima (npr.
SIGTERM,SIGKILL,SIGHUP).
4. Napredna upotreba Unix-a
Ovaj deo rada fokusira se na tehnike i alate koje iskusni korisnici koriste za efikasan i moćan rad u Unix/Linux okruženju.
4.1 Rad sa ljuskom (shell) na naprednom nivou
Redirekcija i cevi (pipes)
# Preusmeravanje standardnog izlaza u fajl
komanda > izlaz.txt
# Dodavanje na kraj fajla
komanda >> izlaz.txt
# Preusmeravanje standardne greške
komanda 2> greske.log
# Kombinovanje stdout i stderr
komanda > sve.log 2>&1
# Povezivanje više komandi pomoću pipe-a
ps aux | grep nginx | awk '{print $2}' | xargs kill -9
Supstitucija komandi i procesa
# Command substitution echo "Danas je $(date +%Y-%m-%d)" # Process substitution — poredi izlaze dve komande kao da su fajlovi diff <(sort fajl1.txt) <(sort fajl2.txt)
Kontrola toka i skriptovanje
#!/usr/bin/env bash
set -euo pipefail # prekini skriptu pri grešci, nedefinisanoj varijabli ili grešci u pipe-u
for fajl in *.log; do
if grep -q "ERROR" "$fajl"; then
echo "Pronađene greške u: $fajl"
fi
done
set -euo pipefail je standardna praksa u profesionalnim bash skriptama jer sprečava tihe greške da prođu neopaženo.
4.2 Manipulacija tekstom — srce Unix filozofije
Napredni korisnici oslanjaju se na moćne alate za obradu teksta:
grep— pretraga po regularnim izrazima (grep -rEn "pattern" .)sed— stream editor za zamenu i transformaciju teksta (sed -i 's/staro/novo/g' fajl.txt)awk— jezik za obradu strukturiranih tekstualnih podataka po kolonama (awk -F, '{sum+=$3} END{print sum}' podaci.csv)sort,uniq,cut,tr,xargs,wc— kombinuju se kroz pipe-ove za brzu analizu logova, CSV fajlova i izlaza drugih komandi.
Primer analize logova:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
Ova komanda izvlači IP adrese iz log fajla, broji ponavljanja i prikazuje 10 najčešćih posetilaca — klasičan primer “Unix philosophy” pristupa kombinovanja malih alata.
4.3 Upravljanje procesima
ps aux # lista svih procesa top / htop # interaktivni monitoring resursa kill -SIGTERM <PID> # graciozno gašenje procesa kill -9 <PID> # prinudno gašenje (SIGKILL) nohup komanda & # pokretanje procesa nezavisno od terminala disown # odvajanje procesa od trenutne ljuske jobs, fg, bg # kontrola pozadinskih (background) i prednjih (foreground) poslova nice / renice # promena prioriteta izvršavanja procesa
Za analizu resursa u realnom vremenu, napredni korisnici koriste strace (praćenje sistemskih poziva), lsof (lista otvorenih fajlova), i ltrace (praćenje poziva biblioteka).
4.4 Permisije i sigurnost
chmod 750 skripta.sh # rwx za vlasnika, r-x za grupu, ništa za ostale chmod u+x skripta.sh # dodavanje prava izvršavanja vlasniku chown korisnik:grupa fajl # promena vlasništva umask 022 # podrazumevane permisije za nove fajlove # Napredne permisije chmod +t /tmp # sticky bit — sprečava brisanje tuđih fajlova chmod g+s direktorijum # SGID — novi fajlovi nasleđuju grupu direktorijuma
Za finiju kontrolu pristupa koriste se ACL-ovi (setfacl, getfacl), a za izolaciju procesa alati poput chroot, namespaces i cgroups (osnova kontejnerizacije, npr. Docker-a).
4.5 Rad sa fajl-sistemom i skladištem
df -h # pregled iskorišćenosti particija du -sh */ | sort -rh # veličina direktorijuma, sortirano mount / umount # montiranje fajl-sistema find / -type f -size +100M # pretraga velikih fajlova lsblk, fdisk, parted # upravljanje diskovima i particijama
Napredniji korisnici koriste LVM (Logical Volume Manager) za fleksibilno upravljanje diskovnim prostorom i rsync za efikasnu sinhronizaciju i backup podataka:
rsync -avz --delete izvor/ korisnik@server:/odrediste/
4.6 Mrežni alati
ss -tulpn # aktivni portovi i konekcije (naslednik netstat) ip a / ip route # konfiguracija mrežnih interfejsa curl -I https://example.com # HTTP zaglavlja dig domena.com # DNS upiti tcpdump -i eth0 port 80 # snimanje mrežnog saobraćaja ssh -L 8080:localhost:80 user@server # SSH tuneliranje (port forwarding)
4.7 Automatizacija i upravljanje sistemom
- cron / crontab — planiranje periodičnih zadataka (
crontab -e) - systemd — moderan sistem za upravljanje uslugama i procesima pokretanja na Linuxu (
systemctl start,journalctl -u servis) - Environment varijable i
.bashrc/.zshrc— prilagođavanje radnog okruženja - Alias-i i funkcije u ljusci za ubrzavanje čestih zadataka
- dotfiles — verzionisana konfiguracija ličnog Unix okruženja (često čuvana na Git-u)
4.8 Regularni izrazi
Regularni izrazi (regex) predstavljaju moćan alat za pretragu i manipulaciju tekstom, i koriste se kroz grep, sed, awk, i mnoge programske jezike:
grep -E "^[0-9]{3}-[0-9]{4}$" telefoni.txt
Poznavanje regex sintakse (kvantifikatori, grupe, lookahead izrazi kod naprednijih implementacija) smatra se ključnom veštinom za rad sa tekstualnim podacima u Unix okruženju.
5. Značaj i nasleđe Unix-a
Unix je postavio temelje za:
- Internet infrastrukturu — većina servera na svetu radi na Linux/Unix sistemima.
- Programske jezike i alate — C, kasnije C++, Perl, Python i mnogi drugi razvijeni su u Unix okruženju ili su duboko oblikovani njegovom filozofijom.
- Moderne operativne sisteme — macOS, iOS, Android (Linux kernel), sistemi ugrađeni u mrežnu opremu, superkompjuteri (gotovo svi superkompjuteri na Top500 listi rade na Linuxu).
- Kontejnerizaciju i cloud computing — tehnologije poput Dockera i Kubernetesa oslanjaju se direktno na Unix koncepte procesa, namespace-ova i fajl-sistema.
- Kulturu otvorenog koda — GNU projekat i Linux inspirisali su čitav pokret slobodnog softvera.
Zaključak
Unix nije samo operativni sistem — on predstavlja filozofiju dizajna softvera koja je nadživela pola veka tehnološkog razvoja. Njegova jednostavnost, modularnost i princip kombinovanja malih, specijalizovanih alata i danas oblikuju način na koji se grade softverski sistemi. Za naprednog korisnika, ovladavanje Unix alatima — od ljuske i regularnih izraza, preko upravljanja procesima i permisijama, do automatizacije i mrežnih alata — predstavlja temeljnu veštinu koja omogućava efikasan, precizan i moćan rad sa računarskim sistemima svih razmera, od embedded uređaja do najvećih cloud infrastruktura na svetu.
Literatura i izvori (za dalje čitanje)
- Ritchie, D. M., & Thompson, K. (1974). The UNIX Time-Sharing System. Communications of the ACM.
- Kernighan, B. W., & Pike, R. (1984). The UNIX Programming Environment.
- Raymond, E. S. (2003). The Art of Unix Programming.
- Salus, P. H. (1994). A Quarter Century of UNIX.
- POSIX standard dokumentacija (IEEE Std 1003.1)
