Interfata utilizator, Redirectarea fisierelor in Unix



Interfata utilizator

Dupa ce procesul login a aflat numele utilizatorului si a verificat corectitudinea parolei, el schimba catalogul curent cu directorul respectivului utilizator (indicat in fisierul /etc/passwd) si lanseaza in executie programul al carui nume figureaza in ultimul camp al aceleiasi intrari in /etc/passwd. Acest program este, de obicei, un interpretor de comenzi. Lansarea sa in executie are loc fara crearea unui proces nou, procesul login fiind practic inlocuit cu noul program.

Interpretorul de comenzi lucreaza asemanator interpretoarelor de comenzi din sistemele de operare cunoscute deja:afiseaza un prompt, preia comanda si argumentele si, daca acea comanda este comanda interna o executa; in caz contrar numele comenzii este folosit pentru identificarea unui fisier executabil care este incarcat si executat. Dupa terminarea executiei comenzii reapare promptul ce invita utilizatorul sa introduca o noua comanda. In termeni de proces, mecanismul de executie al comenzilor a fost prezentat in capitolul precedent.



Observatie: Spre deosebire de alte sisteme de operare, unde interpretorul de comenzi este un program privilegiat (vezi command.com), in Unix shell-ul este considerat ca fiind un program obisnuit, neavind prioritate mai mare decat alte procese.

Shell-ul nu face parte din nucleul sistemului de operare. Exista mai multe interpretoare disponibile, utilizatorul putand sa ceara incarcarea celul dorit de el. Se poate lansa chiar un interpretor scris de utilizator, daca acesta e capabi de asa ceva Cele mai cunoscute interpretoare de comenzi sunt:sh(shell), csh (C-shell), ksh (KornShell),bash(Borne Again Shell).

Toate comenzile au urmatoarea sintaxa:
$ comanda
Comanda reprezinta o comanda interna (executata direct de shell) sau numele unui program executabil, cautat in urmatoarea secventa:

  • in directorul curent;
  • in directorul /bin;
  • in directorul /usr/bin;
  • mesaj de eroare daca nu este gasit in locurile specificate mai sus

Celelalte campuriale comenzii definesc parametrii comenzii si se numesc argumente. Ele sunt separate prin blank-uri. Se pot introduce mai multe comenzi pe aceeasi linie daca le saparam prin ';'

Multe dintre argumentele unei comenzi sunt nume de fisiere, de aceea au fost introduse niste metacaractere (caracterele jocker) pentru a ne putea referi la o multime de fisiere. Metacaracterele sunt urmatoarele:

  • * -orice sir de caracter (inclusiv sirul vid);
  • ? -orice caracter;
  • []-o multime de caractere;
  • - -secventa lexicografica de caractere;

Exemple de folosire a metacaracterelor:
*.pas -toate fisierele sursa Pascal;
ex?.txt -toate fisierele text care au prefixul 'ex '
ex[1-9] -indica fisierele ex1,ex2,ex8;
prob[37]-indica fisierele prob3 si prob7;
pro[*?] -indica toate fisierele care incep cu 'pro' si se continua cu un sir de caractere oarecare, precum si fisierele cu numele format din 4 caractere, primele trei fiind 'pro'

Redirectarea fisierelor

Dupa initializarea sesiunii de lucru, Shell deschide 3 fisiere standarad (0,1,2) pentru intrare, iesire si afisarea erorii.Ele sunt atribuite implicit tastaturii si, respectiv, ecanului. In momentul in care interpretorul lanseaza programul asociat unei comenzi, acesta mosteneste si fisierele deschise, deci si pe cele standard. Programele devin astfel independente de dispozitivele fizice asociate de shell fisierelor standard.Interpretorul permite redirectarea fisierelor standard de intrare/iesire spre alte fisiere sau periferice.De exemplu, daca un program are ca iesire standard ecranul, putem trimite datele (prin operatia de redirectare) catre un fisier text specificat.

  • Cu ajutorul semnului '<' se redirecteza fisierul standard de intrare.
    Acest lucru inseamna ca programul lansat de shell nu va mai lua datele de la tastatura, ci dintr-un fisier indicat dupa operatorul '<'.Spre exemplu:
    prog
    determina programul 'prog' sa citeasca datele din fisierul 'fis'
  • Cu ajutorul operatorului '>' se redirecteaza iesirea standard.Comanda
    ls -l > fis
    va lista continutul directorului curent in fisierul 'fis'. Daca fisierul exista deja, prin folosirea operatorului '>>' in loc de '>' se va adauga informatia la sfarsitul fisierului 'fis'
  • Un program poate fi lansat cu redirectarea simultana a intrarii si iesirii standard:
    crypt '<'fis1> fis2,
    comanda care cifreaza fisierul fis1 si depune rezultatul in fis2.