Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » scoala » informatica » linux
Interfata utilizator unix

Interfata utilizator unix


INTERFATA UTILIZATOR UNIX

Sistemul UNIX consta in mai multe componente software, dintre care doua au o pozitie privilegiata : nucleul si Shell.

Nucleul reprezinta supervizorul sistemului, cel care palnifica procesele si le executa in ordinea si la timpul cerut. Desi este o parte vitala a sistemului, nucleul este relativ mic comparativ cu dimensiunea totala a sistemului.

Cea mai mare parte din totalul codului executabil o reprezinta numeroasele utilitare (programe), incluzand aici numeroasele compilatoare, editoare, procesoare de formare a textelor etc.

Utilizatorul trebuie sa hotarasca si sa comunice nucleului ce programe sa lanseze in executie, cum sa le incarce, cum sa apara iesirea acestora. Programul Shell reprezinta unicul canal de comunicatie utilizat in acest scop.

Acesta este un interpretor de comenzi pentru UNIX, numit si Borne Shell.



Sintaxa comenzilor Shell

Initializarea sesiunii de lucru a unui utilizator consta in introducerea de catre acesta a numelui sau si al parolei. Dupa certificarea acestora cu informatiile pe care le are sistemul in fisierul /etc/passwd, se lanseaza automat interpretorul Shell, a carui prezenta este indicata de promter-ul aparut pe ecran: $, pentru utilizatori neprivilegiati si *, pentru utilizatorul privilegiat (numit superuser sau administrator).

Promter-ul indica faptul ca sistemul este gata sa primeasca comenzi.

Din punctul de vedere al utilizatorului, Shell ofera o interfata complexa cu sistemul pe doua nivele:

(1)prelucrarea si executia comenzilor: marea majoritate a acestora sunt programe independente de interpretor, prezente ca fisiere executabile in directoarele /bin, /usr/bin sau /etc.;

(2)dezvoltarea unor programe structurate, intr-un limbaj numit Borne Shell, destinate unor aplicatii in care sunt necesare inlantuiri de programe dupa diversi algoritmi de executie.

Toate comenzile au urmatoarea sintaxa:

$ comanda Aargument1S Aargument2S. . .AargumentnS

Comanda reprezinta numele programului ce urmeaza a fi executat, cautat in urmatoarea secventa:

(a)in directorul curent; daca nu este gasit;

(b)in directorul /bin; daca nu este gasit;

(c)in directorul /usr/bin; daca nu este gasit;

(d)mesaj de eroare afisat de Shell.

Celelalte campuri definesc parametrii comenzii si se numesc argumente; ele sunt separate prin blancuri. Data fiind absenta unui analizor pentru linia de comanda, argumentele vor fi transmise de interpretor programului asociat prin mecanismul specific limbajului C in care acesta este scris.

De exemplu, comanda $ls-1 va lista continutul directorului curent. Argumentul -1 indica programul ls (prezent in /bin) ca se doreste o listare cu informatii complete. Pot fi introduse mai multe comenzi pe aceeasi linie, separate prin

De exemplu, comanda $pwd;ls-1 va afisa mai intai numele directorului curent (pwd) si apoi va lista continutul.

In UNIX Shell este un program obisnuit (/bin/sh) tratat de sistem ca un proces neprivilegiat si independent de nucleu.

Interfatarea lui cu nucleul se face pe calea functiilor sistem.

Dupa initierea unei sesiuni de lucru la terminal, sistemul lanseaza un proces Shell pentru terminalul respectiv, care alterneaza cererile de comenzi cu executia acestora, dupa urmatorul ciclu:

repeta

scrie promter ,,$ sau ,,I

citeste linia de comanda

*decodifica comanda

*cauta progrmaul apelat

*genereaza un proces ,,fiu (directiva de fork)

*lanseaza in executie comanda (directiva exec)

*asteapta terminare comanda (directiva wait)

pana *comanda ,,bye sau CTRL-D

Procese paralele

Uneori se lanseaza programe care dureaza mult si care nu utilizeaza consola, in sensul ca nu asteapta date de intrare de la terminal.

Pentru a folosi acesti timpi morti, Shell are o faciliate prin care se pot lansa mai multe procese in paralel (de obicei maxim 20), de catre acelasi utilizator.

In mod normal Shell executa comenzile secvential. Daca insa o comanda se termina cu caracterul ,,& , atunci Shell va lansa programul in paralel si va afisa imediat promter-ul pentru introducerea unei noi comenzi. Acest mod de lucru in regim multiproces, este indicat pentru acele programe care nu sunt interactive.


Aceste procese paralele vor primi din partea sistemului un numar de identificare, care este folosit la o eventuala anulare a executiei, cu comanda kill.

Daca se doreste, de exemplu, lansarea in paralel a unui program cu numele prog se va proceda astfel:  $ prog &.

Cu ajutorul comenzii ps, se poate vedea daca procesul mai este in executie si ce identificator (pid) i-a fost afectat:

$ps

PID TTY TIME CMD

136 53 0:30 -sh

15388 53 0:14 prog

53350 53 0:05 ps

Cele doua comenzi puteau fi date si in aceeasi linie:

$prog $ps

Deoarece sistemul nu anunta terminarea unui proces paralel, se prefera lansarea acestuia sub forma unei secvente de tipul:

$ (comanda ;echo mesaj) &

care va afisa mesajul dupa terminarea programului indicat de comanda.

Daca procesele paralele au totusi de facut intrari/iesiri la terminal, pentru a nu perturba procesul care se desfasoara conventional in acel moment, este indicat sa se faca redirectarea fisierelor standard, asa cum se va vedea in paragraful urmator.

Fisierele standard de intrare si iesire

Dupa initializarea sesiunii de lucru, Shell deschide 3 fisiere standard (0,1,2) pentru intrare, iesire si afisarea erorii.

Ele sunt atribuite terminalului (testaturii si ecranului) de la care se lucreaza. In momentul in care Shell lanseaza in executie programul asociat unei anumite comenzi, acesta mosteneste (ca proces ,,fiu ) fisierele deschise, deci pe cele standard.

In acest fel programele devin independente fata de dispozitivele fizice asociate de Shell fisierelor standard.

Interpretorul Shell insa permite redirectarea fisierelor standard de intrare/iesire spre alte fisiere sau periferice.

a)Cu ajutorul ,,< se redirecteaza fisierul standard de intrare.

Acest lucru inseama ca programul lansat de Shell nu va lua date de intrare de la terminal, ci dintr-un fisier indicat dupa operatorul ,,<

De exemplu, comanda:

$prog < fis

va redirecta fisierul de intrare al programului ,,prog la fisierul ,,fis pe disc.

Prin redirectarea intrarii se poate lansa si un fisier de comenzi Shell:

$sh < fis-comenzi

unde ,,fis-comenzi poate contine de exemplu: pwd; ls-1; ps.

b)Cu ajutorul ,,> se redirecteaza fisierul standard de iesire, ceea ce inseamna ca informatia care trebuie afisata pe terminal va fi depusa in fisierul indicat dupa ,,>

De exemplu, comanda:

$ls-1

va lista directorul curent la terminal, pe cand

$sl-1>fis

va crea fisierul fis unde va depune informatiile din directorul curent. Daca fisierul exista si vrem sa se scrie in continuare, prin adaugare de informatie deja existenta, putem folosi operatorul ,,>>

$ls-1>>fis

c)Un program poate fi lansat prin Shell cu redirectarea simultana a intrarii si iesirii, de exemplu:

$crypt<fis1>fis2

comanda care executa cifrarea fisierului fis1 depunand rezultatul in fis2 .

Conectarea programelor prin pipe

In conceptia sistemului de operare UNIX, programele trebuie sa fie de dimensiuni relativ mici, cu sarcini bine definite si care, plecand de la anumite informatii obtinute pe fisierul standard de intrare vor genera rezultate pe fisierul stndard de iesire. Aceasta structura permite insa ulterior conectarea acestor programe in cascada pentru realizarea unor aplicatii complexe; acest tip de conectare presupune legarea iesirii unui program la intrarea urmatorului. Shell furnizeaza aceasta facilitate pe care o numim pipe, indicata prin operatorul ,,I si care redirecteaza iesirea unui proces la intrarea altuia.

Exista doua metode de realizare a comunicarii intre procese:

a)prin tehnica de redirectare, cand se foloseste un fisier in care primul proces depune date pe care le va citi si prlucra cel de-al doilea proces;

b)prin tehnica pipe, cand conecarea se face direct intre cele doua procese, fara a mai fi necesara existenta unui fisier.

Sa consideram urmatorul exemplu: vrea sa determinam cate intrari (fisiere) contine directorul /bin.

Pentru aceasa folosin comenzile ls, care listeaza directorul, si Wc, care numara liniile unui fisier text:

$ls-1/bin>fisier

$xe-1<fisier

$rm fisier

Aceasta secventa foloseste tehnica de redirectare, fiind necesara la sfarsit operatia de stergere a fisierului de manevra (comanda rm).

Folosind tehnica pipe, se poate obtine acelasi efect, mai simplu insa:

$ls-1/bin:wc-1.

Interpretorul Shell admite si conectari multiple a mai multor procese prin pipe.

Pentru implementrea conectarii, interpretorul Shell, care este un program scris in limbaj C, foloseste mecanismul de comunicare intre procese oferit de nucleu prin intermediul directivei ,,pipe

Numele fisierelor

Multe din argumentele liniilor de comanda sunt nume de fisiere.

Sintaxa acestora a fost deja recizata anterior. Shell permite insa si precizarea unor nume de fisiere, precum si a unor liste de nume de fisiere, folosind cateva metacaractere:

-orice sir de caractere (inclusiv sirul vid);

-orice caracter;

a. . .s - o multime de caractere;

- o secventa lexicografica.

Pe baza acestor metacaractere, Shell va genera nume de fisier, utilizate in cadrul comenzilor. De exemplu:

*.c-indica toate fisierele cu sufix c;

def a0-9s- indica fisierele def 0, def 1,. . .,def 9;

proga09s- indica fisierele prog 0, prog 9;

proga*?s- indica atat varianta prog* (fiind acceptat orice sir dupa ,,prog ), cat si prog? (fiind accepat orice caracter dupa ,,prog

Sa consideram un director cu urmatoarele fisiere :

cap1 cap2 cap3 cap4

a.c. b.c. cap3.c cap4.c

Daca folosim comanda:

$cat cap?

se vor afisa la terminal fisierele cap2, cap3 si cap4.

Daca insa tastam comanda:

$cat cap*

la terminal vor aparea fisierele mai sus mentionate, dar si cap3.c, cap4.c.

Utilizarea metacaracterelor faciliteaza intoducerea rapida a unor liste de nume de fisiere.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.