1 Laborator 1 SO

5
1 LABORATOR NR. 1 - SISTEME DE OPERARE 1. Interfata utilizator la sistemul de operare UNIX 2. Comenzi Shell 3. Aplicatii 1. INTERFATA UTILIZATOR 1.1. Interpretorul de Comenzi Interpretorul de comenzi (Shell-ul) este o componenta software care furnizeaza o interfata de comunicare intre utilizator si sistemul de operare Unix. Prin intermediul Shell-ului, utilizatorul poate transmite sistemului de operare comenzi care sunt exprimate intr-un limbaj specific, limbajul Shell. Shell-ul este un program « obisnuit », localizat de regula in subdirectorul /bin. El este independent de nucleul sistemului de operare UNIX si este tratat de acesta ca un program neprivilegiat. Sistemul UNIX pune la dispozitia utilizatorilor mai multe Interpretoare de comenzi (Shell-uri): C-shell, Korn Shell, Bourne Shell (bash), etc. Administratorul de sistem specifica pentru fiecare utilizator ce Shell (Interpretor de comenzi) implicit va folosi in comunicarea cu sistemul de operare. Toate interpretoarele de comenzi sub Unix recunosc acelasi set de baza de comenzi (acelasi limbaj de comenzi). 1.2. Atasarea la Sistem Initierea sesiunii de lucru sub Unix se realizeaza prin introducerea numelui de cont si a parolei de catre utilizator. Programul de « login » (de conectare la sistem) verifica aceste informatii si in cazul in care ele sunt corecte, se incarca : - Interfata grafica (desktop-ul), daca pentru utilizatorul respectiv este prevazuta comunicarea in mod grafic cu sistemul de operare (mod de lucru implicit in laboratoarele catedrei pentru sistemele de tip Unix: Linux, BSD si Solaris) - Interpretorul de comenzi Shell specific utilizatorului respectiv, daca pentru utilizatorul respectiv este prevazuta comunicarea in mod alfanumeric (mod de lucru optional in laboratoarele catedrei, selectabil de catre utilizator). In cazul comunicarii prin interfata grafica, lansarea Interpretorului de comenzi trebuie facuta in mod explicit de catre utilizator, prin selectarea unui « terminal » sau a unei « console », din lista de aplicatii a sistemului de operare. In aceasta situatie se lanseaza de fapt in executie o instanta de Shell, care va deschide pe ecranul grafic o « fereastra terminal » in care utilizatorul poate lansa comenzi Shell. In ambele situatii in care Shell–ul este lansat in executie, implicit la conectare sau explicit din lista de aplicatii, prezenta sa ca program activ este semnalata prin afisarea pe ecran a unui prompter. Acesta este un sir de caractere care arata ca Shell-ul este gata sa primeasca comenzi de la utilizator. Observatie : La sistemele Linux din laboratoarele catedrei prompter-ul unui utilizator obisnuit este format de regula din urmatoarele siruri de caractere: nume_utilizator@nume_logic_masina ~ $ sau nume_utilizator@nume_logic_masina director_curent $ Daca utilizatorul se afla plasat in subdirectorul propriu (home directory) se afiseaza semnul ~ (tilda). Daca utilizatorul se deplaseaza in alt subdirector decat cel propriu, parametrul director_curent va afisa traseul de la radacina pana la subdirectorul curent.

Transcript of 1 Laborator 1 SO

Page 1: 1 Laborator 1 SO

1

LABORATOR NR. 1 - SISTEME DE OPERARE 1. Interfata utilizator la sistemul de operare UNIX 2. Comenzi Shell 3. Aplicatii 1. INTERFATA UTILIZATOR 1.1. Interpretorul de Comenzi Interpretorul de comenzi (Shell-ul) este o componenta software care furnizeaza o interfata de comunicare intre utilizator si sistemul de operare Unix. Prin intermediul Shell-ului, utilizatorul poate transmite sistemului de operare comenzi care sunt exprimate intr-un limbaj specific, limbajul Shell. Shell-ul este un program « obisnuit », localizat de regula in subdirectorul /bin. El este independent de nucleul sistemului de operare UNIX si este tratat de acesta ca un program neprivilegiat. Sistemul UNIX pune la dispozitia utilizatorilor mai multe Interpretoare de comenzi (Shell-uri): C-shell, Korn Shell, Bourne Shell (bash), etc. Administratorul de sistem specifica pentru fiecare utilizator ce Shell (Interpretor de comenzi) implicit va folosi in comunicarea cu sistemul de operare. Toate interpretoarele de comenzi sub Unix recunosc acelasi set de baza de comenzi (acelasi limbaj de comenzi). 1.2. Atasarea la Sistem Initierea sesiunii de lucru sub Unix se realizeaza prin introducerea numelui de cont si a parolei de catre utilizator. Programul de « login » (de conectare la sistem) verifica aceste informatii si in cazul in care ele sunt corecte, se incarca :

- Interfata grafica (desktop-ul), daca pentru utilizatorul respectiv este prevazuta comunicarea in mod grafic cu sistemul de operare (mod de lucru implicit in laboratoarele catedrei pentru sistemele de tip Unix: Linux, BSD si Solaris)

- Interpretorul de comenzi Shell specific utilizatorului respectiv, daca pentru utilizatorul respectiv este prevazuta comunicarea in mod alfanumeric (mod de lucru optional in laboratoarele catedrei, selectabil de catre utilizator).

In cazul comunicarii prin interfata grafica, lansarea Interpretorului de comenzi trebuie facuta in mod explicit de catre utilizator, prin selectarea unui « terminal » sau a unei « console », din lista de aplicatii a sistemului de operare. In aceasta situatie se lanseaza de fapt in executie o instanta de Shell, care va deschide pe ecranul grafic o « fereastra terminal » in care utilizatorul poate lansa comenzi Shell. In ambele situatii in care Shell–ul este lansat in executie, implicit la conectare sau explicit din lista de aplicatii, prezenta sa ca program activ este semnalata prin afisarea pe ecran a unui prompter. Acesta este un sir de caractere care arata ca Shell-ul este gata sa primeasca comenzi de la utilizator. Observatie : La sistemele Linux din laboratoarele catedrei prompter-ul unui utilizator obisnuit este format de regula din urmatoarele siruri de caractere: nume_utilizator@nume_logic_masina ~ $ sau nume_utilizator@nume_logic_masina director_curent $ Daca utilizatorul se afla plasat in subdirectorul propriu (home directory) se afiseaza semnul ~ (tilda). Daca utilizatorul se deplaseaza in alt subdirector decat cel propriu, parametrul director_curent va afisa traseul de la radacina pana la subdirectorul curent.

Page 2: 1 Laborator 1 SO

2

1.3. Sintaxa Comenzilor Shell Interpretorul de comenzi (Shell) realizeaza doua functiuni importante:

- preluarea, prelucrarea si executia comenzilor date de utilizator - executarea de programe structurate scrise in limbajul de instructiuni specific Shell-ului;

programele in limbaj Shell pot contine atat instructiuni cat si comenzi. Comenzile Shell au urmatoarea sintaxa generala:

nume_comanda [optiuni] [argumente] unde nume_comanda reprezinta numele comenzii ce va fi executata de catre Shell. Celelalte campuri definesc parametrii comenzii si sunt separate prin spatii. Optiunile particularizeaza modul de executie al comenzii si sunt precedate de semnul “ - ”, iar argumentele specifica entitatile (fisiere, directoare, programe, utilizatori) asupra caroara va actiona comanda respectiva. 1.4. Executia unei Comenzi Shell Shell-ul executa comenzile lansate de utilizator dupa urmatorul ciclu:

repeta afiseaza prompter citeste comanda tastata de utilizator decodifica si verifica comanda lanseaza in executie comanda asteapta terminarea comenzii daca nu s-a specificat altfel pana cand comanda = “exit”.

Comenzile Shell-ului pot fi externe sau interne (built-in). Comenzile externe se efectueaza prin lansarea in executie a unui fisier (execuatbil) aflat pe disc. Comenzile interne sunt functii codate direct in Shell. Urmatoarele comenzi interne ale interpretorului Shell sunt mai des intilnite: comanda nula Ignora argumentele si intoarce codul de retur 0 (succes) nume_fisier Lanseaza in executie un fisier executabil. Fisierul este cautat in directoarele

indicate de variabila de mediu PATH, in ordinea in care sunt specificate in aceasta. Daca variabila PATH contine si subdirectorul curent (“ . ”), atunci se cauta si in acesta. Fisierul este executat de o noua instanta a Shell-ului.

cd [traseu] Schimba directorul curent cu cel specificat in argumentul traseu echo [argumente] Afiseaza argumentele primite exit Incheie executia interpretorului de comenzi export nume=valoare Inscrie in mediu (environment) variabila nume cu valoarea valoare pwd Afiseaza numele directorului curent set [argumente] Afiseaza sau seteaza valorile unor variabile specificate in argumente type cmd afiseaza tipul comenzii specificata in argumentul cmd

Orice comanda intoarce in urma executiei un cod retur ce are valoarea 0 pentru succes si altceva pentru esec. Codul de retur este atribuit variabilei de mediu $? si astfel el poate fi folosit ulterior de alte comenzi (pentru a testa, de exemplu, rezultatul executiei unei comenzi anterioare). Executia unei comenzi externe incepe cu cautarea fisierului executabil care va realiza efectiv comanda; aceasta cautare se face in subdirectoarele specificate in variabila de mediu PATH, in ordinea in care acestea sunt specificate.

Page 3: 1 Laborator 1 SO

3

1.5. Conectarea Comenzilor in Pipe-lining Comenzile Unix au sarcini bine delimitate : ele utilizeaza informatii provenite din fisierul standard de intrare (tastatura) si genereaza rezultate care sunt depuse in fisierul standard de iesire (ecranul). Aceasta structura permite conectarea comenzilor in cascada pentru realizarea de comenzi inlantuite in scopul efectuarii unor prelucrari complexe. Conectarea in cascada (inlantuirea) presupune “legarea” iesirii unui program la intrarea urmatorului program. Exista doua metode de inlantuire a comenzilor :

1. prin redirectare : se foloseste un fisier in care prima comanda depune date pe care le va citi si prelucra urmatoarea comanda, s.a.m.d.

2. prin tehnica « pipe » , atunci cand conectarea se face direct intre cele doua comenzi, fara a mai fi necesara existenta unui fisier intermediar.

Tehnica « pipe » este o facilitate oferita de Shell-ul UNIX. Prin intermediul operatorului « | » se conecteaza iesirea standard a unei comenzi la intrarea standard a altei comenzi. Interpretorul admite conectari multiple succesive prin « pipe » a mai multor comenzi Shell. 1.6. Interpretarea unei Comenzi Shell O linie de comanda introdusa de utilizator este interpretata de Shell prin impartirea ei in comenzi elementare separate de « && » sau « ; » sau « || » sau de « | ». Fiecare comanda elementara este interpretata de Shell in mai multe etape:

1. linia de comanda este impartita in cuvinte separate prin spatii sau alte caractere speciale; un sir de caractere intre ghilimele este tratat ca un singur cuvant

2. cuvintele care incep cu « $ » sunt tratate ca nume de variabile si sunt inlocuite cu valoarea variabilei respective; aceasta etapa se numeste substitutia variabilelor

3. cuvintele din comanda care contin caracterele ambigue « * » si « ? » sunt tratate ca nume ambigue de fisiere si inlocuite cu lista fisierelor ce se potrivesc cu aceste nume ambigue

4. cuvintele incluse intre apostroafe inverse, « `», sunt considerate comenzi ce se executa separat (comenzi imbricate); ele sunt inlocuite cu rezultatele produse de comenzile respective; aceasta etapa se numeste substitutia comenzilor

5. se executa redirectarea intrarilor si iesirilor comenzilor, prin interpretarea urmatorilor operatori : < , << , > , >> , <& ” , >& ”

6. executa atribuirile de forma variabila = valoare

7. este interpretat in cele din urma numele comenzii, care poate fi :

a. nume de comanda interna, care este executata direct de interpretor

b. comanda externa, care este executata prin lansarea unui fisier executabil de pe disc

c. numele unei functii Shell definita anterior de utilizator; aceasta functie este executata direct de interpretorul de comenzi Shell.

Page 4: 1 Laborator 1 SO

4

2. COMENZI SHELL O comanda este preluata de Shell la terminarea introducerii ei complete, terminare marcata prin apasarea tastei « enter ». Toate caracterele introduse pana in acel moment intra in alcatuirea comenzii, cu exceptia a doua caractere :

- cel de stergere ultim caracter tastat (backspace <-) - cel de anulare a comenzii (CTRL si U).

Intreruperea executiei unei comenzi se face prin apasarea simultana a tastelor CTRL si C. Vizualizarea comenzilor executate anterior se poate face prin apasarea tastelor “sageti”, comenzile anterioare putand fi utilizate si (eventual) modificate in vederea unei re-lansari (facilitate “history” ). Sintaxa completa a comenzilor LINUX poate fi aflata prin consultarea Manualului care disponibil on-line. Pentru sintaxa comenzilor care vor fi prezentate in continuare se va folosi conventia BNF: parametrii optionali se vor include intre paranteze drepte [ ] . 2.1. Comenzi Diverse, Informative si de Configurare

man [optiuni] [nume_comanda] man [optiuni] cuvant_cheie

afiseaza pagini din Manualul sau sistemului Linux. Iesirea din comanda man se face prin apasarea literei q. Cautarea unei sir de caractere in pagina de manual se face cu /sir_de_caractere. Continuarea cautarii se face tastand /

whoami afiseaza numele utilizatorului curent who [optiuni] afiseaza informatii despre utilizatorii conectati la sistem finger [optiuni] [nume_user] afiseaza informatii despre uitilizatorii conectati la un moment dat,

sau despre un anumit utilizator echo [optiuni] [argumente] afiseaza argumentul sir_de_caractere file [optiuni] nume_fisier afiseaza informatii despre formatul unui fisier date [optiuni] [data_si_timp] afiseaza si seteaza data calendaristica si timpul cal [optiuni] [luna an] afiseaza calendarul lunii sau anului curen apropos sir_de_caractere afiseaza informatii despre toate aparitiile unui sir de caractere in

paginile de manual (echivalent cu man –k sir_de_caractere) whatis nume_comanda afiseaza functiile unei comenzi whereis comanda afiseaza localizarea unei comenzi in traseele de directoare ale

sistemului, trasee incrise in variabila PATH grep [optiuni] model [fisier] afiseaza liniile dintr-un fisier sau din ntrarea standard care se

potrivesc cu modelul dat. Set [optiuni] afiseaza valorile variabilelor de mediu alias nume=comanda stabileste un pseudonim pentru o comanda export variabila=valoare inscrie variabile in mediu pwd afiseaza calea completa (de la radacina) pina la directorul curent cd [traseu] schimba directorul curent ls [optiuni] [argumente] afiseaza continutul directorului curent mkdir [optiuni] nume_director creeaza un subdirector rmdir [optiuni] nume_director sterge un subdirector more comanda “filtru” pentru afisare paginata less comanda filtru pentru afisare paginata (specifica Linux) write trimite un mesaj catre un alt utilizator tty [optiuni] afiseaza numele terminalului curen

Page 5: 1 Laborator 1 SO

5

3. APLICATII I . Sa se consulte Manulalul Programatorului pentru fiecare din comenzile enumerate in sectiunea 2. a referatului de laborator. Sa se execute fiecare comanda cu diverse variante de optiuni. II. Sa se rezolve exercitiile urmatoare:

1. Sa se afiseze informatii despre utilizatorul root.

2. Sa se afiseze toate informatiile din sistem referirtoare la cuvintul “user”.

3. Sa se afiseze valoarea codului de retur intors de o comanda executata cu succes si valoarea codului retur intors de o comanda esuata.

4. Sa se afiseze valoarea variabilei de mediu PATH.

5. Sa se scrie cu ajutorul comenzii echo un sir pe mai multe rinduri.

6. Ce semnificatie au numele de fisiere “ . ” si “ . . ” din fisierul director?

7. Sa se schimbe directorul curent cu cel aflat la doua nivele mai sus, folosindu-se o singura comanda si fara a se specifica numele acestui director, Sa se revina in directorul propriu (home directory) cu comanda de maximum 2 caractere.

8. Sa se creeze doua directoare t1 si t2, t1 subdirector al directorului curent iar t2 subdirector al lui t1, folosindu-se o singura comanda mkdir.

9. Sa se stearga cu o singura comanda rmdir subdirectoarele create in cadrul exercitiului nr. 8.

10. Sa se stearga directorul parinte al directorului curent. Explicati rezultatul.

11. Sa se afiseze toate fisierele directorului curent.

12. Sa se afiseze numai fisierele subdirectoare ale directorului curent.

13. Sa se afiseze toate fisierele din directorul curent si din subdirectoarele sale.

14. Sa se afiseze fisierele din directorul curent in ordinea datei ultimei modificari.

15. Ce semnificatie are primul caracter al fiecarei linii afisate in urma comenzii “ ls –l ”?

16. Sa se listeze continutul directorului curent in ordine invers alfabetica.

17. Utilizati comanda more in pipe-line cu ls. Idem pentru comanda less. Care este deosebirea dintre functionarea celor doua comenzi? (Indicatie: consultati manualul on-line)

18. Sa se localizeze in sistemul de directoare fisierul executabil corespunzind comenzii file. Sa se afiseze tipul acestui fisier. (Ind :whereis, file). Sa se gaseasca solutia care foloseste o singura comanda. (Ind.: Sectiunea 1.4, substituirea comenzilor).

19. Aflati comanda care inhiba afisarea pe ecran a comenzilor tastate, fara a se inhiba efectuarea lor. (Ind: man stty)