Sunteți pe pagina 1din 6

Introducere în sistemul de operare Linux 1

Introducere în sistemul de operare Linux

Linux este un sistem de operare cu divizare a timpului (time-sharing operating system) care prezintă
următoarele atribute de baza:
- are un sistem ierarhizat de fişiere;
- asigură compatibilitatea între fişiere, dispozitive I/O şi mecanismele de comunicaţie între procese;
- oferă posibilitatea de a iniţia procese asincrone, multitasking;
- permite selectarea de către utilizator a interpretorului de comenzi;
- prezintă un grad înalt de portabilitate, fiind scris în proporţie de 90% in C.

Componentele sistemului de operare Linux sunt:


- nucleul LINUX (eng. kernel);
- interpretorul de comenzi (eng. shell);
- utilitarele (compilatoare, editoare de legături, editoare de text, analizoare lexicale, utilitare Web,
etc.) şi programele utilizator.

Nucleul are rolul de a gestiona resursele fizice (procesor, memorie, dispozitive periferice) şi logice
(procese, fişiere, etc). Interfaţa dintre nucleu şi aplicaţiile utilizator este asigurată de proceduri şi
funcţii puse la dispoziţie direct de nucleu sau de o serie de biblioteci.

Interfaţa între utilizator şi sistemul de operare este formată din comenzi, care sunt de fapt programe
ce se lansează în execuţie cu ajutorul interpretorului de comenzi. În momentul intrării unui
utilizator într-un sistem Linux, sistemul stabileşte, pe baza unor informaţii înregistrate despre
utilizator, interpretorul de comenzi ce va fi folosit şi lansează în execuţie acel interpretor. Există
mai multe variante de interpretoare de comenzi (csh – C-shell; ksh – Korn shell; bash – Bourne
again shell, etc.), deosebirile dintre acestea fiind legate de facilităţile de programare pe care le oferă
utilizatorului, de o serie de elemente interactive şi de modul de prezentare a rezultatelor unei
comenzi. Modul de funcţionare a unui interpretor de comenzi este ilustrat în fig. 1.1. Utilizatorul
introduce o comandă (de obicei cu ajutorul unei tastaturi) terminată cu CR (Enter). Comanda este
analizată şi dacă nu este detectată nici o eroare, programul corespunzător este citit de pe disc,
încărcat în memorie şi executat. Dacă se detectează vreo eroare în sintaxă, se afişează un mesaj
corespunzător. După terminarea programului, interpretorul preia controlul şi aşteaptă următoarea
comandă.

Sintaxa generală a unei comenzi Linux este


comanda optiuni parametri
unde: comanda desemnează programul care execută serviciul solicitat;
optiuni particularizează modul de execuţie a comenzii;
parametri precizează obiectele asupra cărora se execută comanda.

În continuare vor fi prezentate, pe scurt, câteva comenzi Linux uzuale. Pentru mai multe detalii
despre aceste comenzi se recomandă vizualizarea paginilor de help cu ajutorul comenzii
man nume_comanda.

a) Comenzi pentru operaţii asupra fişierelor şi directoarelor

Sistemul de operare Linux recunoaşte 4 tipuri de fişiere:


- fişiere obişnuite - şiruri de octeţi fără o structură logică specială;
- fişiere speciale - sunt asociate dispozitivelor periferice. Astfel, se permite accesarea uniformă
(folosind aceeaşi sintaxă) atât a fişierelor cât şi a dispozitivelor periferice, prin intermediul
driverelor de dispozitiv;
Introducere în sistemul de operare Linux 2
- fişiere director (cataloage) - utilizate pentru structurarea sistemului de fişiere;
- fişiere FIFO - sunt fişiere speciale utilizate pentru realizarea comunicării între procese Linux;
- socket-uri - sunt fişiere speciale utilizate pentru realizarea comunicării între procese Linux.

citeşte următoarea comandă

analizează sintactic
comanda

da afişează mesaj de
eroare?
eroare
nu

da comandă nu
internă?

execută rutina apelează fork


corespunzătoare
comenzii interne
aşteaptă creează un proces fiu
terminarea
procesului fiu
apelează exec pentru a
executa programul asociat
comenzii externe

semnalizează sfârşitul
procesului fiu

Fig. 1.1. Organigrama ce descrie funcţionarea unui interpretor de comenzi Linux

Nume Descriere Exemple de utilizare


comandă
pwd afişează directorul
curent
cat afişează conţinutul cat ex.c
unui fişier cat – se consideră ca argument fişierul
standard de intrare (tastatura) şi afişează
ceea ce se tastează. Pentru terminare se
apasă CTRL+D
cd schimbă directorul cd nume_director
curent cd – determină întoarcerea în directorul gazdă
al utilizatorului.
cp copie unul sau mai cp sursa.txt test/ - copie fişierul
multe fişiere sursa.txt în subdirectorul test
ls afişează conţinutul ls – afişează o listă cu fişierele din directorul
directorului curent curent;
ls –l – afişează informaţii suplimentare
despre fişierele din directorul curent;
ls –a – afişează şi fişierele ascunse (care
încep cu caracterul ‘.’.
rm şterge unul sau mai rm *.c – şterge din directorul curent toate
Introducere în sistemul de operare Linux 3
multe fişiere (fără fişierele cu extensia .c
directoare)
rmdir şterge un director vid rmdir test
mkdir creează un director mkdir test
mkdir –p /home/user/so/exemple –
creează directorul exemple, împreună cu
directorul părinte so, dacă acesta nu există

b) Comenzi de informare

Nume Descriere Exemple de utilizare


comandă
date afişează data şi ora
curentă
du afişează spaţiul ocupat du –ah - afişează spaţiul ocupat de fiecare
de un director pe disc fişier din directorul curent; comanda va
opera, recursiv, şi pe subdirectoare
df afişează spaţiul liber
de pe disc

c) Comenzi pentru prelucrarea fişierelor text

Nume Descriere Exemple de utilizare


comandă
head afişează primele n linii head –5 test.txt – afişează primele 5
ale unui fişier linii din fişierul test.txt
tail afişează ultimele n linii tail -5 test.txt – afişează ultimele 5
ale unui fişier linii din fişierul test.txt
wc afişează numărul de
linii, cuvinte şi
caractere dintr-un fişier
grep caută un şablon (un şir grep –n while sursa.c – afişează toate
de caractere) într-un liniile din fişier ce conţin şablonul while
fişier

d) Alte comenzi

Nume Descriere Exemple de utilizare


comandă
cmp compară două fişiere, cmp –bl file1.txt file2.txt
caracter cu caracter
find caută fişiere cu numele find *.c
parţial sau total
cunoscut

Editorul de text vim (Vi IMproved)

Lansarea în execuţie a editorului vim se face cu ajutorul comenzii


$ vim
Introducere în sistemul de operare Linux 4
care va deschide o fereastră în care utilizatorul poate introduce text. Caracterul ‘~’ indică faptul că
linia pe care este plasat nu conţine text.

Dacă se doreşte ca, după lansarea în execuţie, vim să încarce un fişier, se va utiliza comanda
$ vim nume_fisier
Dacă fişierul cu numele specificat nu există se va crea un fişier vid cu acel nume.

Un alt mod util de lansare a editorului este


vim +n nume_fisier
care va deschide fişierul specificat şi va poziţiona cursorul pe linia n.

Editorul vim are mai multe moduri de operare, printre care modul text, modul comandă şi modul
vizual. În modul text, tastele apăsate de utilizator sunt introduse într-un buffer (urmând a fi salvate
ulterior în fişierul deschis) şi afişate pe monitor. În modul comandă, orice secvenţă de taste este
interpretată drept comandă vim. Modul vizual este util pentru copierea unor blocuri de text.
Trecerea din modul text în cel comandă se face cu tasta i. Trecerea din modul comandă în cel
vizual se face cu tasta v. Revenirea în modul text se face cu tasta Esc.

Comenzile vim pot fi executate doar în modul comandă sau vizual. Comenzile precedate de : apar
în linia de stare a editorului (ultima linie) şi trebuie terminate cu CR pentru a se executa.
Comandă Descriere
:q determină părăsirea editorului doar dacă fişierul deschis nu
a fost modificat (dacă în modul text nu s-a inserat nici un
caracter)
:q! determină părăsirea forţată a editorului, pierzându-se
eventualele modificări
:wq salvează conţinutul bufferului (ce conţine toate
modificările) în fişierul deschis
:save nume_fisier salvează conţinutul bufferului în fişierul specificat; dacă
fişierul nu există, el va fi creat
:n sau nG mută cursorul pe linia n. Dacă n este invalid, comanda nu
are nici un efect
G mută cursorul pe ultima linie
w mută cursorul la începutul următorului cuvânt
b mută cursorul la începutul cuvântului curent sau anterior
x şterge caracterul de la poziţia curentă
dw şterge toate caracterele de la poziţia curentă până la primul
spaţiu (inclusiv spaţiul). În cazul în care cursorul este
poziţionat pe un spaţiu, acesta va fi şters, împreună cu toate
spaţiile care urmează
ndw şterge n cuvinte de la poziţia curentă
d$ şterge cuvintele de la poziţia curentă până la sfârşitul liniei
dd şterge linia curentă
ndd şterge următoarele n linii (inclusiv linia curentă)
dG şterge toate liniile până la sfârşitul fişierului (inclusiv linia
curentă)
u renunţă la modificarea anterioară (undo)
p inserează la poziţia curentă ceea ce s-a copiat sau şters
ultima oară
/sir_caract caută şirul de caractere în fişierul deschis
Introducere în sistemul de operare Linux 5
n repetă căutarea anterioară
:s/old/new/g modifică apariţiile şirului old cu şirul new în linia curentă
:%s/old/new/g modifică toate apariţiile şirului old cu şirul new
:!comanda_LINUX execută comanda LINUX
:help oferă acces la paginile de help ale editorului
Tab. 1.1. Comenzi vim

Pentru a copia un bloc de text trebuie parcurşi următorii paşi:


a) se activează modul vizual (cu ajutorul tastei v din modul comandă);
b) se selectează cu ajutorul săgeţilor blocul de text;
c) se apasă tasta y, care va avea ca efect copierea blocului;
d) se poziţionează cursorul la poziţia dorită şi
e) se apasă tasta p.

Dezvoltarea aplicaţiilor C sub Linux


Sistemul de operare Linux dispune de utilitare performante destinate dezvoltării de aplicaţii C.
Dintre acestea un rol aparte il au:
− compilatorul de C, gcc;
− editorul de legături, ld;
− depanatorul, gdb;
− bibliotecarul, ar;
− utilitarul pentru construirea fişierelor proiect, make.

Limbajul C oferă suportul cel mai adecvat dezvoltării aplicaţiilor sub Linux, datorită modului
convenabil în care se face accesul la serviciile sistemului de operare. Aceste funcţii permit o
multitudine de operaţii referitoare la lucrul cu fişiere, alocare a memoriei, controlul proceselor, etc.
Fiind scrise in C, funcţiile sistemului de operare au un mecanism de apelare comod, similar oricărei
rutine scrisa de utilizator. Caracteristicile principale ale limbajului ca si majoritatea funcţiilor
disponibile în implementările de sub MS-DOS sunt valabile si sub Linux. În plus, sunt disponibile
si alte facilităţi care vor fi detaliate ulterior.

Dezvoltarea unei aplicaţii C presupune editarea textului sursa cu ajutorul unui editor (vim sau
editorul intern al programului mc). Fişierul creat trebuie să aibă extensia .c, extensie care prin
convenţie este atribuită surselor scrise in limbaj C.

Exemplul de mai jos prezintă textul sursă pentru un program care copie un şir sursă într-un şir
destinaţie.
#include <stdio.h>

int main(void) {
char sursa[] = "abcdefg";
char dest[10];
int i = 0;

while (sursa[i] != '\0')


dest[i] = sursa[i++];

dest[i] = '\0';

printf("Sirul destinatie este: %s", dest);


Introducere în sistemul de operare Linux 6
exit(0);
}
Tab. 1.2. Program C (exemplu.c) ce copie un şir sursă în şirul destinaţie

Pentru compilarea fişierului sursa exemplu.c se poate utiliza comanda:

$ gcc exemplu.c -o exemplu

Obs.:
1. Această formă invocă compilatorul specificând prin opţiunea -o exemplu numele fişierului
executabil care va fi creat. În lipsa opţiunii de mai sus, fişierul executabil creat va fi denumit a.
2. Faza de link-editare este realizată în mod automat. Pentru a obţine numai forma obiect se
foloseşte opţiunea -c.
3. Fişierele antet standard folosite în compilare, precum şi bibliotecile utilizate pentru link-editare
sunt amplasate în directoare standard, /usr/include şi /usr/lib.

În cazul existenţei unor erori de compilare sunt semnalate linia şi tipul erorii întâlnite. Depistarea
efectivă a erorii revine programatorului.

Probleme
1. Editaţi un fişier sursă C care să conţină programul prezentat în tab. 1.2. În cazul în care utilizaţi
editorul vim, încercaţi cât mai multe comenzi din cele descrise în tab. 1.1.
2. Compilaţi sursa C şi rulaţi programul. Pentru rulare utilizaţi comanda
$ ./nume_program
3. Modificaţi programul pentru a permite introducerea de la tastatură a şirului sursă. Pentru citirea
de la tastatură a şirului se poate utiliza funcţia C scanf sau gets., cu următoarele prototipuri:
#include <stdio.h>
char *gets(char *buf)
int scanf(char const format, ...) – pentru citirea unui şir de caractere se va
utiliza ”%s” pentru parametrul format.
4. Scrieţi un program ce afişează numărul de apariţii ale unui tipar într-un şir de caractere. Ambele
şiruri (tiparul şi şirul în care se efectuează căutarea) vor fi preluate de la tastatură.