Documente Academic
Documente Profesional
Documente Cultură
1
Sisteme de Operare Linux L
CAP. I INTRODUCERE
2
Sisteme de Operare Linux L
3
Sisteme de Operare Linux L
4
Sisteme de Operare Linux L
5
Sisteme de Operare Linux L
login:
La aceasta trebuie s se rspund cu un nume de
utilizator cunoscut sistemului. n cazul n care pentru
utilizatorul respectiv a fost prevzut o parol procesul de
identificare va continua prin solicitarea acesteia:
password:
7
Sisteme de Operare Linux L
De studiat!
man man.
man k print
REZUMAT
8
Sisteme de Operare Linux L
NTREBRI
Ce ofer GPL?
9
Sisteme de Operare Linux L
10
Sisteme de Operare Linux L
bin dev etc home lib mnt sbin tmp usr var
11
Sisteme de Operare Linux L
rdcin
/
user
a
Fiiere speciale a b
Fiiere obinuite
$ pwd
/home/user
$ cd /
$ ls
13
Sisteme de Operare Linux L
$touch fis1
rezultat: - dac fiierul fis1 exist actualizeaz timpul
acces
- creeaz fiierul dac nu exist pe disc.
$rm fis1
rezultat: terge fis1
14
Sisteme de Operare Linux L
$cat
Acest text este doar un exemplu
Ctrl-d
REZUMAT
15
Sisteme de Operare Linux L
NTREBRI
16
Sisteme de Operare Linux L
3.1. Introducere
Interpretorul de comenzi este un program care realizeaz
o interfa ntre utilizator i sistemul de operare, interfa care
preia comenzile utilizatorului i le transmite sistemului de
operare spre execuie. Pentru UNIX i clonele acestuia
(Linux) interpretoarele de comenzi sunt independente fa de
sistemul de operare ceea ce a dus la dezvoltarea unui numr
mare de astfel de interpretoare.
Primul interpretor de comenzi important, numit Bourne
shell, a fost dezvoltat de Steven Bourne i a fost inclus ntr-o
distribuie de UNIX lansat n 1979. Acest interpretor de
comenzi este cunoscut n cadrul sistemului de operare sub
numele de sh. Un alt interpetor de comenzi utilizat pe scar
larg este C shell cunoscut i sub numele de csh. Csh a fost
scris de Billy Joy ca parte integrant a unei distribuii de
UNIX numit BSD (Berkley System Distribution), i a aprut
la civa ani dup sh. Numele de Csh l-a primit datorit
asemnrii sintaxei comenzilor sale cu cea a instruciunilor
limbajului C, fapt ce l face mult mai uor n utilizare celor
familiarizai cu limbajul C. Toate aceste interpretoare au fost
iniial dezvoltate pentru Unix dar s-au dezvoltat versiuni ale
acestora i pentru Linux.
Unul dintre cele mai cunoscute interpretoare de comenzi
pentru Linux este bash (bourne again shell).
Atenie!
La intrarea n sistem fiecare utilizator primete o copie a
interpretorului de comenzi. Acesta pstreaz un mediu distinct
pentru fiecare utilizator din sistem.
n multe sisteme Linux comanda /bin/sh este de multe ori
un link ctre interpretorul de comenzi utilizat de ctre sistemul
de operare.
De studiat! S se determine versiunea curent a
interpretorului de comenzi utilizat de sistemul de operare.
Interpretorul de comenzi din Linux dei are unele
similitudini cu procesorul de comenzi DOS este un instrument
mult mai puternic oferind utilizatorului o multitudine de
faciliti.
17
Sisteme de Operare Linux L
$ cp text/* backup
$ ls /dev/tty?
/dev/tty0 /dev/tty2 /dev/tty4
/dev/tty6 /dev/tty8
/dev/tty1 /dev/tty3 /dev/tty5
/dev/tty7 /dev/tty9
$ ls /dev/tty[pq][235]
/dev/ttyp2 /dev/ttyp3 /dev/ttyp5
/dev/ttyq2 /dev/ttyq3 /dev/ttyq5
18
Sisteme de Operare Linux L
19
Sisteme de Operare Linux L
atunci acest fiier este creat dac nu exist, iar dac exist
atunci va rescris. Un alt simbol utilizat de acest mecanism de
redirectare este >>. n cazul n care ieirea este reprezentat
de un fiier datele redirectate vor fi concatenate la sfritul
fiierului. Ex:
$ ls l /usr/bin >>text
$ ls /usr/bin 2>text.err
$ wc l < /etc/passwd
12
$fg %1
cat >file.txt
21
Sisteme de Operare Linux L
22
Sisteme de Operare Linux L
if condiie
then declaraii
[ elif condiie
then declaraii]
[ else declaraii]
fi
if test -f $1
then echo $1 este un fiier obinuit
elif test -d $1
then echo $1 este un catalog
else echo $1 este altceva
fi
while condiie
do declaraii
23
Sisteme de Operare Linux L
done
until lista_1
do lista
done
case condiie in
ablon_1) declaraii;;
ablon_2) declaraii;;
...
esac
nume() { lista; }
$ lsl() { ls l; }
24
Sisteme de Operare Linux L
25
Sisteme de Operare Linux L
REZUMAT
Caracteristici:
NTREBRI
27
Sisteme de Operare Linux L
CAP. IV MAKE
4.1. Introducere
$make program
Fiierul de descriere:
S presupunem c avem un program destinat unor
prelucrri de date alctuit din trei fiiere: main.c, interfata.c,
prelucrari.c. O compilare manual a programului arat astfel:
$ gcc main.c
$ gcc interfata.c
$ gcc prelucrare.c
$ gcc o exemplu main.o interfata.o
prelucrari.o /usr/lib/my_lib.a
29
Sisteme de Operare Linux L
exemplu_text : main_text.o
prelucrari.o
gcc o exemplu_text main_text.o
prelucrari.o
main_text.o : main_text.c
gcc c main_text.c
$ make
clean :
/bin/rm f *.o
$ make clean
4.2. Macro
n cazul aplicaiilor de dimensiuni mai mari i nu numai
la realizarea fiierelor de descriere se poate observa repetarea
unui anumit numr de elemente putndu-se ajunge la
dimensiuni relativ mari ale acestor fiiere. Pentru a preveni
aceast situaie se vor utiliza macrouri i sufixe.
Definiiile de macrouri din cadrul fiierelor de descriere
vor arta astfel:
30
Sisteme de Operare Linux L
Reguli de sintax:
O definiie macro este o linie care conine semnul egal.
Make asociaz numele din stnga semnului egal cu secvena
de caractere care urmeaz n partea dreapt. Pentru ca make s
fac deosebirea ntre o linie de comand i un macro, naintea
acestuia nu este permis un caracter tab. De asemenea pentru a
diferenia un macro de o linie de dependine nu este permis
apariia caracterului ; naintea semnului egal. Alt caracter cu
semnificaie special este \ care indic faptul c linia curent
se continu pe linia urmtoare, acest caracter este nlocuit de
ctre make cu un spaiu. Toate spaiile, tab-urile i linie nou
sunt nlocuite cu un singur spaiu.
Prin convenie numele de macrouri se scriu cu caractere
mari. n acestea pot aprea orice combinaie de caractere mari
mici dar se recomand evitarea caracterelor speciale n special
\ i >.
Pentru referirea unui macro se utilizeaz de obicei
notaia n paranteze sau n acolade precedat de semnul $.
Cele a cror nume este alctuit dintr-un singur caracter nu cer
utilizarea n mod obligatoriu a unei paranteze. De exemplu
considernd urmtorul macro:
A=cpp
Acesta poate fi referit astfel: $A, $(A), ${A}.
Aceste structuri sunt flexibile permind utilizarea de
macro-uri n noi definiii:
ABC = cpp
file = text.$(ABC)
Prin referirea acestui macro $(file) vom avea text.cpp.
Unei definiii macro, care dup semnul egal nu are nici
un caracter, i se va atribui irul nul.
O alt caracteristic a acestui utilitar este faptul c nu
trebuie inut cont de ordinea n care aceste macro sunt definite,
uurnd definirile imbricate. Ex:
31
Sisteme de Operare Linux L
SHARED_SRC = ${SHARED_DIR}/depend.c
CC = cc
HelloWorld.o : HelloWorld.c
${CC} c HelloWorld.c
HelloWorld.o : HelloWorld.c
cc c HelloWorld.c
32
Sisteme de Operare Linux L
$ DIR = /home/student/proiect
$ export DIR
$ make refext
SRC = ${DIR}/src
refext :
cd ${DIR}/src
33
Sisteme de Operare Linux L
CC = gcc
OBJS = main.o interfata.o
prelucrari.o
LIB = /usr/lib/my_lib.a
.SUFFIXES : .o .c .s
.c.o :
$(CC) $(CFLAGS) c $<
.s.o :
34
Sisteme de Operare Linux L
.c.o :
$(CC) $(CFLAGS) c $<
35
Sisteme de Operare Linux L
cd tmp
rm *
cd tmp; rm *
INSTALLDIR = /usr/local/exemplu
secvena de caractere.
NTREBRI
Ce este make?
Ce este macro?
38
Sisteme de Operare Linux L
39
Sisteme de Operare Linux L
o structur ierarhic
tratare consistent a fiierelor de date
protejarea fiierelor
40
Sisteme de Operare Linux L
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
43
Sisteme de Operare Linux L
#include <unistd.h>
44
Sisteme de Operare Linux L
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>
45
Sisteme de Operare Linux L
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
if((argv[1] == NULL)||(argv[2] ==
NULL)){
printf("Utilizare: %s sursa
destinatie\n", argv[0]);
exit(0);
}
stat(argv[1],&buf);
if(!S_ISREG(buf.st_mode)){
perror(argv[1]);
exit(0);
}
return 0;
}
46
Sisteme de Operare Linux L
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
47
Sisteme de Operare Linux L
#include <sys/types.h>
#include <dirent.h>
48
Sisteme de Operare Linux L
struct dirent {
ino_t d_ino;
char d_name[NAME_MAX +1];
}
#include <unistd.h>
#include <unistd.h>
int unlink( const char *path);
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
if(argv[1] == NULL){
printf("Utilizare: %s director\n
" , argv[0]);
exit(0);
}
stat(argv[1],&buf);
if(!S_ISDIR(buf.st_mode)){
perror(argv[1]);
exit(0);
}
dr = opendir(argv[1]);
while(entry = readdir(dr)){
printf("%s\n",entry->d_name);
}
return 0;
50
Sisteme de Operare Linux L
#include <sys/types.h>
#include <sys/stat.h>
51
Sisteme de Operare Linux L
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
52
Sisteme de Operare Linux L
REZUMAT
53
Sisteme de Operare Linux L
NTREBRI
54
Sisteme de Operare Linux L
CAP. VI PROCESE
55
Sisteme de Operare Linux L
Segmentul de
text
Program
Proces Segmentul cu
date utilizator
Segmentul de
date sistem
57
Sisteme de Operare Linux L
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Procesul iniial
fork()
ntoarce ntoarce
un nou PID 0
Procesul Procesul
printe fiu
58
Sisteme de Operare Linux L
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
main(){
pid_t val;
printf("PID inainte de fork:
%d\n",(int)getpid());
if(val=fork())
printf("PID parinte:
%d\n",(int)getpid());
else
printf("PID fiu:
%d\n",(int)getpid());
}
59
Sisteme de Operare Linux L
#include <unistd.h>
int execl( const char *path, const
char *arg, ...);
main(){
execl("/bin/ls","ls","-l",0);
60
Sisteme de Operare Linux L
printf("terminat cu erori.");
}
61
Sisteme de Operare Linux L
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
#include <stdlib.h>
void exit(int status)
62
Sisteme de Operare Linux L
#include <sys/wait.h>
int statval, exstat;
pid_t pid;
pid = wait(&statval);
exstat = WEXITSTAUS(statval);
fork
exec wait
Noul program
Execuia printelui
ruleaz
este suspendat
exit
Execuia procesului
printe este reluat
Fig 6.2 Proces printe n ateptare
#include <sys/types.h>
63
Sisteme de Operare Linux L
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status,
int options);
REZUMAT
64
Sisteme de Operare Linux L
NTREBRI
Ce este un proces?
65
Sisteme de Operare Linux L
Ce este PID?
66
Sisteme de Operare Linux L
67
Sisteme de Operare Linux L
ps | grep processname
kill -9 PID
69
Sisteme de Operare Linux L
#include <signal.h>
void (*signal(int signum, void
(*sighandler)(int)))(int);
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void main(void){
(void)signal(SIGINT,handler);
while(1){
printf("Hello World!\n");
sleep(1);
}
}
70
Sisteme de Operare Linux L
#include <signal.h>
int sigaction(int signum,const
struct sigaction *act, struct sigaction
*oldact);
struct sigaction {
void (*sa_handler)(int);
void(*sa_sigaction)(int,
siginfo_t *,void*);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
}
71
Sisteme de Operare Linux L
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
72
Sisteme de Operare Linux L
#include <unistd.h>
unsigned int alarm(unsigned int
seconds);
7.2. Pipes
n Linux, majoritatea intrepretoarelor de comenzi accept
redirectarea. Un exemplu clasic n acest sens este secvena de
comenzi:
$cat /etc/passwd | wc -l
73
Sisteme de Operare Linux L
intrare
Proces Nucleu
iesire (kernel)
#include<unistd.h>
int pipe(int pfd[2]);
74
Sisteme de Operare Linux L
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int main(void){
pipe(pfd);
75
Sisteme de Operare Linux L
{
perror("fork");
_exit(1);
}
if(pid_fiu == 0)
{
//i l afiseaz
printf("Received string: %s\n",
readbuffer);
}else{
return(0);
#include <unistd.h>
int dup(int fd);
int dup2(int fd, int nfd);
76
Sisteme de Operare Linux L
.
.
pid_fiu = fork();
if(pid_fiu == 0)
{
//nchide intrarea standard a procesului
fiu
close(0);
77
Sisteme de Operare Linux L
.
.
pid_fiu = fork();
if(pid_fiu == 0)
{
//nchide i duplic
intrarea standard
dup2(0, pfd[0]);
execlp("sort", "sort",
NULL);
.
.
}
REZUMAT
NTREBRI
79
Sisteme de Operare Linux L
80
Sisteme de Operare Linux L
#include <pthread.h>
int pthread_create(pthread_t *thread,
pthread_attr_t *attr, void *
(*start_routine)(void *), void *arg);
#include <stdio.h>
#include <stdlib.h>
83
Sisteme de Operare Linux L
#include <pthread.h>
#include <unistd.h>
//funcia ce va fi executat de
thread-uri
void* print_message( void *ptr ){
char *message;
message = (char *) ptr;
printf("%s ", message);
return NULL;
}
int main(){
pthread_t thread1, thread2;
char *message1 = "Hello";
char *message2 = "World\n";
sleep(1);
exit(0);
}
84
Sisteme de Operare Linux L
#include <pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<unistd.h>
// funcia thread-ului
void *char_print(void *ptr){
85
Sisteme de Operare Linux L
int main(){
pthread_t thread1, thread2;
struct chars
thread1_arg,thread2_arg;
thread2_arg.val='b';
thread2_arg.count=150000;
// creearea thread-urilor
pthread_create(&thread1,NULL,&char_print,&
thread1_arg);
pthread_create(&thread2,NULL,&char_print,&
thread2_arg);
// ncheierea execuiei
exit(0);
}
#include <pthread.h>
int pthread_join(pthread_t th, void
**thread_return);
.
.
.
// crearea thread-urilor
pthread_create(&thread1,NULL,&char_pr
int,&thread1_arg);
pthread_create(&thread2,NULL,&char_print,&
thread2_arg);
// ncheierea execuiei
exit(0);
}
87
Sisteme de Operare Linux L
#include <pthread.h>
pthread_t pthread_self(void);
int pthread_equal(pthread_t thread1,
pthread_t thread2);
if(!pthread_equal(pthread_self(),
alt_thread))
pthread_join(alt_thread, NULL);
#include <pthread.h>
int pthread_attr_init(pthread_attr_t
*attr);
int
pthread_attr_destroy(pthread_attr_t
*attr);
88
Sisteme de Operare Linux L
# include<pthread.h>
.....
}
int main(){
pthread_attr_t attr;
pthread_t thread;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTH
READ_CREATE_DETACHED);
pthread_create(&thread,&attr,&thread_
function,NULL);
pthread_attr_destroy(&attr);
....
exit(0);
}
89
Sisteme de Operare Linux L
#include <pthread.h>
int pthread_cancel(pthread_t thread);
#include <pthread.h>
int pthread_setcancelstate(int state,
int *oldstate );
int pthread_setcanceltype(int type,
int *oldtype);
void pthread_testcancel(void);
90
Sisteme de Operare Linux L
pthread_setcanceltype(
PTHREAD_CANCEL_ASYCHRONOUS , NULL);
...
int old_cancel_state;
...
pthread_setcancelstate(PTHREAD_CANCEL
_DISABLE,&old_cancel_state)
...
pthread_setcancelstate(old_cancel_sta
te, NULL);
...
REZUMAT
93
Sisteme de Operare Linux L
NTREBRI
Ce este un thread ?
94
Sisteme de Operare Linux L
1. Shell
Cerinte:
un proces ce poate accepta si lansa in execuie comenzi.
facilitatea history (sgeata sus va permite
vizualizarea/lansarea in execuie a comenzilor rulate anterior).
va conine un fiier log (numele comenzii lansate in
execuie, data si timpul curent, numele utilizatorului).
va menine o lista a comenzilor care au generat erori la
rulare.
2. Copiere
Cerine:
unul sau mai multe fiiere/directoare (recursiv).
afiarea progresului global/per fiier.
opiunea de mutare.
posibilitate de reluare a procesului de copiere din
punctul in care a fost ntrerupt (resume).
3. Cron
Cerine:
un proces care va lansa in execuie comenzi pe baza
unui fiier de configurare.
in fiier se va preciza:
o numele comenzii.
o parametrii.
o data + ora execuiei.
o va conine un fiier de log in care pentru fiecare
comanda lansata in execuie se salva codul de ieire returnat la
ncheierea execuiei.
4. TaskManager
Cerine:
pentru fiecare proces sa se afieze (vezi /proc):
nume.
stare (status).
PID - numr de identificare proces.
95
Sisteme de Operare Linux L
5. Game Master
a) Fotbal
-- Toi Juctorii au poziii mobile
-- Cooperativ: DA
-- Resurse suplimentare comune: mingea
-- Scop: gol
-- Rol GM: transmite informaii cu privire la poziiile J
b) Tancuri
-- Toi Juctorii au poziii fixe
-- Cooperativ: NU
-- Resurse suplimentare comune: N/A
-- Scop: supravieuirea
-- Rol GM: transmite informaii topografice cu privire la teren
si poziiile J
* Opiuni
96
Sisteme de Operare Linux L
6. Detecie
97