Ukazna lupina je tolmač, ki ga Unix uporablja za ukaze, ki jih vtipkamo. Lupina ji pravimo zato, ker ovija in skriva jedro operacijskega sistema. Pomembna lastnost Unixa je, da sta jedro in ukazna lupina dva ločena programa, ki se sporazumevata prek razmeroma majhnega števila sistemskih klicev. To omogoča obstoj več različnih ukaznih lupin, od katerih vsaka ustreza svojemu okusu glede uporabniških vmesnikov.
Običajno se nam ukazna lupina po prijavi oglasi s pozivnikom
$
(razen če tega nismo ukrojili po svoje). Tu ne bomo
izgubljali besed o skladnji ukazne lupine in enostavnih trikih, ki jih
lahko pričaramo na zaslon -- namesto tega si bomo s stališča
računalnika ogledali, kaj se dogaja v ozadju.
Po zagonu, in preden poženemo kak program, si lahko računalnik predstavljamo kot cel zverinjak procesov, ki vsi čakajo, da se bo zgodilo nekaj, na kar se bodo odzvali. Čakajo na dogodke (angl. event). Dogodek je lahko pritisk tipke ali premik miške. Če je računalnik vključen v omrežje, je dogodek lahko tudi podatkovni paket, ki je prispel iz omrežja.
Eden teh procesov je tudi jedro. Jedro je poseben proces, saj določa, kdaj lahko tečejo uporabniški procesi, navadno pa je tudi edini proces, ki lahko dostopa do strojne opreme. Uporabniški procesi morajo zato nasloviti zahtevek jedru, če želijo prebrati vnos s tipkovnice, izpisati znak na zaslon, zapisati ali prebrati podatke z diska, in bolj ali manj karkoli razen mletja podatkov v pomnilniku. Takim zahtevkom jedru pravimo sistemski klici.
Praviloma gredo vse vhodno-izhodne operacije prek jedra, tako da lahko to razporedi zahtevke in prepreči, da bi ti drug drugemu hodili v zelje. Izjemoma je procesu dovoljeno, da zaobide jedro in neposredno komunicira z vhodno-izhodnimi vrati. Strežnik X (program, ki v večini sistemov Unix obravnava zahtevke drugih programov za pisanje po zaslonu) je ena takih izjem. A nismo še pri strežnikih X -- za zdaj se ukvarjamo s pozivnikom ukazne lupine v tekstovnem načinu.
Ukazna lupina je zgolj uporabniški proces, in nič kaj posebno odlikovan. Čaka na pritisk tipk, tako da (prek jedra) bere vhodno-izhodna vrata tipkovnice. Ko jedro zazna pritisk tipke, ga izpiše na zaslon. Če je to tipka Enter, jedro poda celotno natipkano vrstico ukazni lupini. Ta jo zatem poskusi raztolmačiti kot niz ukazov.
Denimo, da smo z namenom, da bi pognali program, ki izpiše seznam
datotek, vtipkali ls
. Ukazna lupina uporabi vgrajena pravila
in z njihovo pomočjo ugotovi, da želimo izvesti datoteko
/bin/ls. Zato s sistemskim klicem posreduje jedru
zahtevek, naj požene datoteko /bin/ls. To ga požene kot
proces potomec ukazne lupine (ki je zahtevala njegovo ustvarjenje), in
na potomca prestavi pravice ua dostop do tipkovnice in zaslona. Dokler
/bin/ls ne opravi svojega, ukazna lupina spi, na zaslon pa
se izpisuje izhod procesa potomca.
Ko /bin/ls konča, novico o zaključku s sistemskim klicem exit sporoči jedru. Jedro prebudi spečega roditelja in mu vrne pristojnosti za dostop do tipkovnice in zaslona. Ukazna lupina izpiše pozivnik in spet čaka na novo vrstico ukazov.
Medtem, ko se ukaz ls
izvaja, se lahko dogajajo še druge reči
(predpostavimo, da gre za zelo dolg seznam datotek): poženemo lahko
drugo virtualno konzolo, se prijavimo, poženemo igrico, in
podobno. Ali, če je računalnik vključen v omrežje, lahko medtem, ko se
izvaja /bin/ls, pošilja ali sprejema pošto.