ŠTA JE JEZGRO (kernel)?  

Svaki operativni sistem ima program koji startuje boot (inicijalni) proces (u Linux-ovom slučaju to je LILO (Linux Loader)). Program je smešten u MBR (master boot records) na prvom hard disku i brine o tome da se jezgro inicijalizuje u memoriju. Kada se jezgro inicijalizuje, ujedno montira (mount ) svoj lični root (koren) fajl sistem (/ ). Nakon toga vrši dijagnostiku (učitavanje - prepoznavanje) sistema.

UNIX jezgro je softver koji upravlja pristupom korisnikovog programa sistemskom hardveru i softverskim resursima. Ovi resursi kreću se od dobijanja procesorskog (CPU ) vremena, pristupanja memoriji, čitanja i pisanja na diskove, povezivanja u mrežu, pa do interakcije sa terminalom. Jezgro sve ovo omogućava kontrolisanjem i omogućavanjem pristupa memoriji, procesoru, fajlovima na disku ulazno/izlaznim uređajima, i specijalnim servisima za korisničke programe.

Osnovno UNIX jezgro može se podeliti na sledeća četiri glavna podsistema:

* Upravljanje procesima;

* Upravljanje memorijom;

* Upravljanje ulazom/izlazom;

* Upravljanje fajlovima

Ovi podsistemi treba da se posmatraju kao posebni entiteti, ali rade saglasno, stavljajući na raspolaganje servise za programe, koji mu omogućavaju da obavi koristan posao (slika 3.1). U bilo kom trenutku u sistemu, brojni programi mogu zahtevati servise od ovih podsistema. Jezgro je odgovorno da rasporedi posao i da, ako je taj proces ovlašćen, omogući pristup da se koriste ovi podsistemi.

Ovakav način rada dopušta jezgru da se izvršava, a da mu pri tom ne smetaju drugi programi koji su trenutno aktvini. Mikroprocesor nameće ovu liniju razgraničenja između korisničkog i nivoa rada jezgra. Jezgrom koje se izvodi u vlastitom zaštićenom adresnom prostoru garantuje se održavanje integriteta njegovih struktura i struktura podataka drugih procesa. Jezgro koristi ove strukture podataka za upravljanje i kontrolu samog sebe i svih drugih programa koji se izvode u sistemu.

 UPRAVLJANJE PROCESIMA  

Podsistem za upravljajne procesima kontroliše kreiranje, završavanje, računanje statistike i planiranje procesa. On nadgleda prelaske iz jednog stanja procesa u neko drugo, kao i prebacivanje između privilegovanih i neprivilegovanih načina izvođenja. Jednostavna definicija procesa je da je to zadatak koji se izvodi. To je entitet koji zahteva sistemske resurse i ima ograničeno vreme trajanja. Ukratko, to je način elektronskog predstavljanje korisnikove, ili programerove želje da obavi deo nekog korisnog posla. Proces ima određenu strukturu (slika 3.2).

Jezgro posmatra ovaj niz bitova kao kopiju procesa. Ova binarna kopija sastoji se od korisnikovog i sistemskog adresnog prostora, kao i od registara koji čuvaju podatke tog procesa, vreme njegovog izvođenja. Korisnikov adresni prostor sastoji se od pet posebnih područja: tekst, podaci, Bss, stek i korisničko područje.

Tekst segment  je prvo područje jednog procesa. Ono sadrži kod programa u izvršnom obliku za taj proces. Ovo područje zajednički koriste drugi procesi koji izvršavaju taj program. Usled toga, on je fiksan i nepromenjiv i obično ga sistem prebacuje na disk, kada memorija postane ,,tesna”.

Područje sa podacima  sadrži i globalne i statičke varijable koje koristi program. Na primer, programer može znati unapred da određna varijabla sa podacima treba da bude postavljena na određenu vrednost.

Bss područje, slično području sa podacima, čuva informacije o programskim varijablama. Razlika je u tome da Bss područje čuva varijable kojima će njihove vrednosti biti dodeljene za vreme izvršavanja programa. Na primer, programer može znati da su mu neohodne varijable za čuvanje izvesnih podatak, koje će uneti korisnik za vreme izvođenja programa.

Područje steka čuva lokalne varijable procesa, parametre koji se koriste u funkcijama i vrednosti koje vraćaju funkcije. Na primer, program može da sadrži kod koji poziva neki drugi blok koda. Pozivajući blok koda predaje podatke primajućem blok kodu kroz stek. Zatim, pozvani blok koda procesira podatke i vraća ih nazad pozivajućem kodu. Skladište igra važnu ulogu u omogućavanju procesa da radi sa privremenim podacima.

Korisničko područje čuva podatke koje koristi jezgro, dok se proces izvršava. Korisničko područje sadrži stvarne i efikasne korisničke identifikatore, stvarne i efikasne grupne identifikatore, trenutni direktorijum i listu otvorenih fajlova. Korisničko područje koristi jezgro za upravljanje procesom. Ovo područje čuva većinu informacija koje predstavljaju razne statistike o tom procesu. Ono je deo adresnog prostora procesa i koristi ga samo jezgro, dok se proces izvršava. Kada se proces ne izvršava, ovo područje može prebaciti na disk program za upravljanje memorijom. Kod većine verzije UNIX-a korisničko područje se preslikava na fiksne virtuelne memorijske adrese. Fajl /usr/include/sys/user.h sadrži definicije struktura u korisničkom području za verzije UNIX-a.

 UPRAVLJANJE MEMORIJOM  

Upravljanje memorijom prati izvesna pravila koja upravljaju i fizičkom i virtuelnom memorijom. Fizička memorija (RAM - Random Access Memory - memorija sa direktnim pristupom) je skup memorijskih modula (čipova) koji služi za smeštanje podataka o procesu koji se trenutno izvodi na računaru. Virtuelna memorija koristi prostor na hard disku i pri tome smešta adresne memorijske lokacije, na koje se može preslikati neki proces, nezavisno od fizički ograničenog adresnog prostora procesora (CPU ). Govoreći uopšteno, proces može nadmašiti fizički adresni prostor/veličinu glavne memorije, a da se ipak može učitati i izvršiti.

Upravljanje memorijom može se definisati kao efikasno upravljanje i zajedničko korišćenje resursa sistemske memorije ,,u režiji” jezgra i korisničkih procesa. Jezgro koristi uređenja putem straničenja i segmentiranja da organizuje memoriju procesa. Jedan od vrlo važnih struktura podataka, koju jezgro koristi, jeste virtuelni adresni prostor.

Virtuelni adresni prostor  postoji za svaki proces i koristi se da prati logičke segmente procesa, ili regione koji pokazuju na određene segmente procesa: tekst (kod), podaci, u_područje, korisničko i skladište jezgra, zajednička memorija, zajednička biblioteka i delovi fajla preslikani u memoriju. Regioni, koji postoje za svaki proces, štite i čuvaju broj stranica preslikanih u segmente. Segment podataka čuva inicijalizovane i neinicijalizovane podatke jednog procesa. Ova područja mogu menjati veličinu prilikom izvođenja programa.

U_područje i skladište jezgra sadrže informacije koje koristi jezgro i one su fiksne veličine. Korisničko skladište se nalazi u u_području, njegova veličina će se menjati prilikom njegovog izvođenja. Segmente memorije za zajedničko korišćenje obično postavlja i koristi proces, da bi zajednički koristio podatke sa drugim proce-sima.

Biblioteke za zajedničko korišćenje dozvoljavaju programima da povežu kod koji se često koristi prilikom izvođenja. Samim tim smanjuju iznos potrebne memorije za programe koji se izvršavaju, zato što je potrebno da bude jedna kopija koda u memoriji. Svaki program pristupiće kodu na toj lokaciji kada je potrebno.

Jedinica za upravljanje memorijom je hardverska komponenta, koja vrši prevođenje virtualnog adresnog prostora u fizičke memorijske adrese. Ona takođe sprečava da neki proces pristupi adresnom prostoru nekog drugog procesa.

 UPRAVLJANJE ULAZOM I IZLAZOM  

Najjednostavnija definicija ulaza/izlaza je kontrola podataka između softvera i hardverskih uređaja. Sistem administrator se bavi ulazom/izlazom na dva posebna nivoa. Prvi nivo se bavi ulazom/izlazom između korisnikovog adresnog prostora i adresnog prostora jezgra; drugi nivo se bavi ulazom/izlazom između adresnog prostora jezgra i fizičkih hardverskih uređaja.

Kada se podaci upisuju na disk, prvi nivo U/I sistema kopira podatke iz korisničkog prostora u prostor jezgra. Podaci se zatim prenose iz adresnog prostora jezgra do drugog nivoa U/I podsistema. Sada fizički hardverski uređaj aktivira svoje vlastite U/I podsisteme, da odredi najbolju lokaciju za podatke na raspoloživim diskovima.

UNIX se isporučuje sa mnoštvom raznih alata koji nadgledaju performanse sistema. Neki od najboljih alata za nadgledanje osnovnih U/I performansi su sar, iostat i monitor. Komanda sar  ispisuje na standardni izlaz sadržaj odabranih brojača komulativnih aktivnosti u operativnom sistemu. Sledeća lista je analiza onih brojača aktivnosti koje komanda sar akumulira:

* pristup fajlu;

* korišćenje bafera;

* aktivnost sistemskih poziva;

* ulazno/izlazne aktvinosti diska;

* slobodna memorija i prostor podučja za zamenu;

* dodela memorije jezgru;

* komunikacija između procesa;

* straničenje;

* aktivnost reda čekanja;

* centralna procesorska jedinica (CPU);

* prebacivanje;

* aktivnost terminalskog uređaja.

Iostat  daje statistiku koja se odnosi na CPU, ulazno/izlaznu statistiku za diskove i kompakt diskove (CDROM-ove).

Monitor  je komanda slična sar komandi, ali sa vizuelnim predstavljanjem stanja računara.

 ULAZ/IZLAZ MEMORIJE SA DIREKTNIM PRISTUPOM (RAM U/I)  

Memorijski podsistem dolazi do izražaja kada programi počnu zahtevati više fizičke RAM memorije nego što je instalirano na našem sistemu. Kada dođe do ovoga, UNIX će startovati procese koji se zovu straničenje i zamenjivanje.

Svi UNIX sistemi koriste ove procedure da oslobode fizičku memoriju kako bi je upotrebljavali drugi programi. Ova dva procesa pomažu UNIX-u da ostvari memorijske zahteve za sve procese. UNIX sistemi koriste i straničenje i zamenjivanje da smanje ulazno/izlazni saobraćaj i ostvare bolju kontrolu nad kompletnom memorijom sistema.

Zamenjivanje prenosi cele procese, koji nemaju nikakvih aktivnosti, na disk radi povećanja slobodne memorije. Ono se dešava u dve posebne situacije. Poslovi koji ,,spavaju” više od određenog broja sekundi smatraju se ,,dokonim” i mogu biti izbačeni iz memorije u bilo kom trenutku. Zamenjivanje je takođe tehnika koja se koristi da bismo se borili sa ekstremno velikim nedostatkom memorije.

Straničenje, sa druge strane, prenose pojedinačne stranice (delove) procesa na disk i popravlja oslobođenu memoriju. Ono koristi algoritam, da nadgleda korišćenje stranica, da ostavlja u memoriji one stranice kojima se nedavno pristupalo i da prenosi stranice koje ništa ne rade na disku. To ima za posledicu optimizaciju performansi ulaza/izlaza i smanjuje iznos ulazno/izlaznog saobraćaja.

 ŠTA JE LJUSKA (shell)?  

Skoro svaki čovekov izum ako može da se koristi ima ,,tačku interfejsa”, pomoću koje se sa njim stupa u interakciju. Bez obzira da li se nalazimo na prednjem sedištu kočije koju vuku konji, u pilotskoj kabini aviona ili za klavirom, to je mesto odakle se rukuje i upravlja različitim aspektima izuma o kome se radi, da bi se dobio željeni rezultat. Ovu tačku interfejsa sa UNIX-om predstavlja shell.

Shell je programski sloj za stvaranje okruženja u koje unosimo komande i parametre, u cilju dobijanja zadatih rezultata. Kao što je slučaj sa svakim drugim pronalaskom, što više o shell-u budemo znali i imali iskustva u radu sa njim, to ćemo više pomoću njega moći da ostvarimo.

UNIX ima različite shell-ove koji omogućavaju da se zadovolje različite po-trebe. Svaki od Bourne, Bourne Again, Korn i C shell-ova nudi funkcije i načine na koje može da se stupi u interakciju sa UNIX-om.

Kada se podiže UNIX sistem, program Unix (Kernel) učitava se u glavnu memoriju računara, gde ostaje sve dok se računar ne ugasi. U toku bootup procesa izvršava se program init kao background task. On nastavlja da se izvršava, sve do zatvaranja sistema. Ovaj program skenira fajl/etc/inittab sa portovima na kojima se i njihove karakteristike.

Kada pronađe aktivan, otvoren terminal, init pozove program getty - on na terminal monitora izdaje login:prompt. Sve dok se ovi procesi nalaze u izvršavanju, korisnik može da stupa u interakciju sa sistemom. Slika 3.3 prikazuje tok procesa, od kernel-a do login procesa. Korisnik se u ovom trenutku nalazi u aktivnom shell-u i spreman je da izda komandu sistemu.

U toku login-a, kada otkucamo svoje korisničko ime, getty na monitoru terminala izdaje password prompt. Kada otkucamo svoj password, getty poziva login, koji formira fajl /etc/passwd, tražeći upis koji odgovara onom što je uneto. Ukoliko ga pronađe login nastavlja da se izvršava, odvodeći nas u  naš home direktorijum, posle čega predaje kontrolu programu za startup sesije; ime korisnika i password specificirani su kao upis u fajl /etc/passwd. Iako program za startup sesije može da bude i poseban aplikativni, kao što je, na primer, za meni, normalno je to shell program, kao što je /bin/sh, Bourne shell.

Od ovog trenutka, shell program čita fajlove /etc/profile i profile, koji za određenog korisnika postavljaju kriterijume za okruženje; oni će za tog korisnika važiti na celom sistemu i izdaje prompt za komandu, kao što je $ (u zavisnosti od varijante shell-a koji koristimo). Sam tok izvršavanja zadate komande možemo sagledati na sledećoj slici (3.4).

  Kada se završi izvršavanje shell-a, kernel vraća kontrolu programu init , koji ponovo startuje login proces. Do završetka izvršavanje shell-a može da dođe na jedan od sledeća dva načina: kada se izda komanda exit, ili kada kernel izda komandu kill za shell proces. Po završetku shell-a, kernel preuzima sve resurse koje su koristili korisnik i shell program.

U UNIX sistemu ima mnogo programskih slojeva koji startuju iz kernel-a kada se pozovu iz aplikativnog programa, ili kada se izda neka komanda. Međusoban odnos ovih slojeva prikazan je na slici 3.5.

Kada se završi naše logovanje, sloj shell program je u direktnom kontaktu sa kernel-om, kao što je prikazano na slici 3.4. Kada otkucamo komandu kao što je $ ls, shell pronalazi fajl koji se odnosi na odgovarajući program /bin/ls i predaje ga na izvršavanje kernel-u. Kernel kreira novo područje za ,,deteproces, učitava program i izvodi instrukcije koje se nalaze u /bin/ls. Kada se završi izvršavanje tog programa, kernel preuzima područje za proces i vraća kontrolu roditeljskom ,,shell ” programu. Da bismo videli primer ovoga kucaćemo sledeću komandu:
              $ps
Ova komanda prikazuje listi procesa koji se trenutno izvršavaju. Videćemo shell program i ps program. Sada kucamo sledeće:
              $sleep 10&
              $ps
Prva komanda kreira ,,deteproces - sleep koji se izvodi u background-u, možemo da ga vidimo u listi koja se dobija ps komandom. Uvek kada unesemo neku komandu, kreira se ,,deteproces i izvršava nezavisno od ,,roditeljskog” procesa ili shell-a. Na ovaj način ,,roditelj” se ostavlja da neometano nastavi obavljanje drugih poslova.
Svejedno je koji ćemo od standardnih shell-ova izabrati, zato što svi oni ima-ju istu svrhu: stvaraju korisnički interfejs za UNIX.
Da bi obezbedili ovaj interfejs, svi shell-ovi nude iste osnovne karakteristike:

* Interpretaciju komandnog reda;

* Rezervisane reči;

* Shell meta-karaktere (džoker znake);

* Pristup programskim komandama i rukovanje komandama;

* Rukovanje fajlovima, preusmerenje input-a/output-ova i pipe-ova;

* Održavanje varijabli;

* Kontrolu okruženja;

* Shell programiranje.

 INTERPRETACIJA KOMANDNOG REDA  

Kada se logujemo na sistem, u zavisnosti od verzije shell-a, vidimo shell prompt, koji je obično, u obliku dolarskog znaka ($ ), znaka za procenat (%), ili znaka za funtu (# ). Kada na shell prompt otkucamo jedan red kao input, shell pokušava da ga interpretira. Input za shell prompt zove se komandni red. Osnovni format komandnog reda je:
command arguments

Command
je izvršila UNIX komanda, program, utility ili shell program. Arguments se predaju komandi. Na primer, u komandnom redu:
$ ls –-l file1 file 2
komanda  ls ima tri argumenta; prva je opcija, a ostala dva su imena fajlova.

Jedan od postupaka koji shell obavlja za kernel je odstranjivanje nepotrebnih informacija. Jednu vrstu nepotrebnih informacija za računar predstavljaju whitespace (prazan prostor). Zbog toga je važno propratiti šta u stvari shell čini kada vidi whitespace, koji se sastoji iz space karaktera, horizontalnih tabova i karaktera za novi red. Pogledajmo sledeći primer:

$ echo   part A                       part B              part C

part A part B part C

Ovde je shell interpretirao komandni red kao echo komandu sa 6 argumenata i ukloni whitespace između argumenata. Ukoliko štampamo zaglavlje za izveštaj i hoćemo da zadržimo whitespace, neophodno je da znake stavimo između znaka navoda, kao u:

$ echo   ’part A                     part B              part C’’’

part A                        part B              part C’’

 

Znaci navoda sprečavaju shell da ,,pogleda” unutar između njih. Kao što smo videli, shell interpretira ovaj red kao echo komandu sa jednim argumentom koji uključuje whitespace.

Sve verzije shell-a imaju reči sa posebnim značenjem. U shell programiranju se pomoću reči kao što su do, done, for i while, ostvaruje kontrola rada petlje, a pomoću reči if, then, else i fi ostvaruje se kontrola na osnovu uslova.

Sve verzije shell-a imaju meta-karaktere koji korisniku omogućavaju da specificira imena fajlova. Sledeći znaci su džoker znaci:

Džoker znaci                          Opis

*                                            Označava bilo koji deo

?                                            Označava jedan, bilo koji karakter

Š ]                                         Označava opseg ili listu karaktera

Džoker znaci mogu da budu korisni kada se određuje veći broj određenih fajlova.

$ls t*

Ovom komandom listaju se svi fajlovi koji počinju sa t.

$ls test?.dat

Ovom komandom listaju se svi fajlovi koji počinju sa test, iza čega sledi jedan - bilo koji karakter i završavaju se sa .dat.

$ls Ša-c]*

Ovom komandom listaju se svi fajlovi koji počinju karakterima iz opsega od a do c.

$ls Še,m,t]*

Ovom komandom listaju se svi fajlovi koji počinju sa e, m, t .

Kada se otkuca komanda shell čita varijablu okruženja $path, koja sadrži listu direktorijuma sa programskim fajlovima.Shell pretražuje ovaj skup direktorijuma, tražeći programski fajl za unešenu komandu, potom pravo ime fajla predaje kernel-u.

Većina UNIX komandi input preuzima sa tastature terminala i output šalje na monitor terminala. Za preusmerenje output-a u fajl koristi se simbol >. Na primer:

$ls > mojfajl

lista fajlove koji se sadrže u našem tekućem direktorijumu i output stavlja u fajl nazvan mojfajl. Isto tako, input možemo da preusmerimo pomoću simbola <. Na primer:

$wc -l < mojfajl                                 FS

predaje fajl mojfajl kao input.

(Komanda wc prebrojava broj bajtova, reči i redova u specificiranim fajlovima (u zavisnosti od indikatora, -c, -w, -l ).)

Kada hoćemo output iz jedne komande da povežemo sa input-om u sledećoj možemo da koristimo ¦ (pipe) simbol.

Na primer:

$ls  -s ¦ sort  -nr  ¦ pg              FS

ova komanda lista fajlove koji se nalaze u tekućem direktorijumu, prikazujući njihovu veličinu izraženu u blokovima.

(Komanda sort koristi se da se, po specificiranom redosledu, sortiraju jedan ili više fajlova. Ona takođe može da se koriste za integrisanje fajlova koji su već sortirani, parametar -–nr označava da se sortira po numeričkoj vrednosti i da izlaz bude prikazan po obrnutom redosledu od specificiranog.)

Komanda ovaj output potom povezuje na sort koji fajlove sortira po numeri-čki opadajućem redosledu. Output  iz sort-a povezuje se na komandu pg za konačno prikazivanje na terminalu, stranicu po stranicu.

Zamena komande je postupak sličan preusmerenju, izuzev što se koristi da se argumenti za jednu komandu dobijaju iz output-a druge komande. Na primer:

$grep  ’wc -–l mojfajl‘ *

uzima od wc komande broj redova u fajlu mojfajl  i stavlja ga kao argument grep komandi, koja pretražuje sve fajlove u tekućem direktorijumu tražeći taj broj.  

 ODRŽAVANJE VARIJABLI   

Shell je sposoban da održava varijable. To su mesta na koja možemo da smestimo podatke da bismo ih kasnije koristili. Varijabli dodeljujemo vrednost zna-kom jednakosti (=):

$ LOOKUP=/usr/mojdir

Ovde shell uspostavlja lookup kao varijablu, kojoj dodeljuje vrednost /usr/mojdir. Kasnije možemo u komandom redu da koristimo ovu vrednost, zapam-ćenu u varijabli lookup, tako što ćemo ispred imena varijable staviti dolarski znak ($):

$ echo $LOOKUP

/usr/mojdir

$ echo LOOKUP

LOOKUP

Da bismo varijablu stavili na raspolaganje ,,dete” procesima koristićemo komandu export. Na primer:

$ LOOKUP=/usr/mojdir

$export LOOKUP

Kao kada se radi o zameni imena fajla, i zamena imena varijable odigrava se pre nego što se pozove program. U drugom primeru izostavljen je dolarski znak ($). Zbog toga shell samo predaje echo komandi string kao argument. Vrednost varijable zamenjuje ime varijable. Na primer:

$ ls $LOOKUP/imefajla

poziva se ls program sa jednim jedinim argumentom, koji je /usr/mojdir/imefajla.

Kada korisnik započne sesiju UNIX-om i počne da se izvršava shell, on za korisnika kreira specificirano okruženje.

Kada login program pozove naš shell, on postavlja naše varijable okruženja, koje se učitaju iz shell fajlova za iniijalizaciju /etc/profile and .profile. Ovi fajlovi normalno postavljaju tip terminala u varijablu $TERM, a default put, kojim se pretražuje kada se traže izvršni fajlovi, postavljaju u varijablu $PATH.  

 SHELL STARTUP FAJLOVI

 

Fajl profile je lokalni startup fajl za Bourne shell. Korn shell koristi .kshrc, a  C shell koristi .cshrc. Ove fajlove možemo da editujemo i na taj način manipulišemo našim početnim okruženjem. Kada se ukaže potreba, možemo da dodajete varijable.   Ukoliko je potrebno, takođe, možemo da dodajemo shell programiranje i tako postignemo da se okruženje postavlja u zavisnosti od određenih uslova.

Kada pozivate shell iz /etc/ passwd, ili iz komandnog reda, možemo da postavimo nekoliko opcija kao argumente za shell program. Na primer, Bourne shell ima -x opciju koja prikazuje komande i njihove argumente pre nego što se izvrše.

Shell se koristi da interpretira komandne redove, održava varijable i izvršava programe. Shell je i programski jezik. Skup shell komandi možete da zapamtite u fajl. To se naziva shell skript ili shell programiranje. Kada se kombinuju komande i dodela vrednosti varijablama sa kontrolom toka i donošenjem odluka, dobija se moćan alat za programiranje. Koristeći shell kao programski jezik možemo da automatizujemo ponavljanje taskova, pišemo izveštaje, gradimo sopstvene fajlove sa podacima i ma-nipulišemo njima.

Shell predstavlja interfejs između korisnika i srca UNIX-a – kernel-a. Shell inter-pretira komandne redove kao input, obavlja zamenu imena fajlova i varijabli, preusmerava input i output, pronalazi izvršive fajlove, inicira programe i predstavlja interfejs za programe.

Shell za svakog korisnika održava varijable okruženja.

              Većina savremenih verzija UNIX-a stavlja na raspolaganje sledeće ljuske:

* Bourne (u oznaci sh);

* C (u oznaci csh);

* Korn (u oznaci ksh);

* TC (u oznaci tcsh);

* Bourne again (u oznaci bash).

Odabiranje odgovarajuće ljuske za korišćenje je važna odluka zbog toga što ćemo utrošiti dosta vremena i truda da naučimo kako da je koristimo.

Naravno, nijedna ljuska nije najbolja za sve namene. Ako imamo izbor ljuski treba da naučimo kako da izaberemo pravu za posao.

            Ljuska ima tri glavne namene:

* kao interfejs između tastature i operativnog sistema;

* kao sredstvo za pisanje procedura za našu vlastitu upotrebu;

* kao jezik programiranja za razvijanje novih komandi za druge.

Svaka od ove tri namene nameće različite zahteve nama i ljusci koju odaberemo. Osim toga, svaka od ljuski obezbeđuje različit nivo podrške za svaku primenu.