I5TC1: Cours SR (Syst` emes et R´ eseaux) I Licence L3 Informatique
Olivier Togni, LE2I (038039)3887
olivier.togni@u-bourgogne.fr
Modifi´e le 25 septembre 2007
1 de 82
Objectifs et d´ eroulement
Objectifs :
I comprendre les concepts mis en oeuvre dans les syst`emes d’exploitation au travers d’Unix,
I ˆetre capable d’administrer les tˆaches courantes
I ˆetre capable de programmer des applications r´eseau Volume horaire: 8CM, 10TD, 7 TP
Evaluation: projet en binome (coeff 0.5) + examen final ´ecrit (coeff. 1)
Sommaire
I Introduction `a Unix
II Programmation syst`eme (Shell, awk, C)
III Partage de ressources et comm. inter-processus IV Communications inter-syst`emes
V Structure des fichiers et processus
3 de 82
R´ ef´ erences utilis´ ees
A. Tanenbaum, Syst`emes d’exploitation, Eyrolles, 2003.
M. J. Bach, Conception du syst`eme Unix, Masson, 1993.
J. M. Rifflet, J. B. Yun`es, Unix programmation et communication, Dunod, 2003.
...
Introduction `a Unix
Introduction ` a Unix
1. Aper¸cu g´en´eral
I Historique
I Structure
I Commandes et interpr`etes
I Environnement utilisateur
I Conclusion 2. Les fichiers 3. Les processus
5 de 82
Introduction `a Unix Aper¸cu g´en´eral
Historique d’Unix
1965 Multics, Bell, General electric, MIT 1969 Unix ATT Thompson and Ritchie 1971 Portage sur PDP11 bi-utilisateurs
1973 r´e´ecriture en C. Le Consent Decree oblige ATT `a le donner au Universit´es
1977 D´ebut du march´e 500 sites
1980 Sortie sur micro Xenix de Microsoft 1984 100 000 installations
1990 Linux
Introduction `a Unix Aper¸cu g´en´eral
Historique d’Unix
1973en C
Unix system II 1981
1983 Unix system V
1990 Unix system V
1981
1989 1990 Linux 1986
Xenix 1980
Xenix 2.0
SCO Unix AIX 1.0 BSD 4.3
1986 1977 BSD
SUN OS1981
Microsoft
IBM SUN
Univ. Berkeley
Bell Labs
Berkeley Sun AT&T IBM micro
7 de 82
Introduction `a Unix Aper¸cu g´en´eral
Standardisations
Plusieurs versions⇒ pb de portabilit´e⇒ besoin de standardisation
I SVID 84
I X/OPEN 84
I Posix (Portable Operating System Interface) 86
I OSF (Open Software foundation) 88⇒ OSF/Motif ⇒X Windows et syst OSF/1 en 91
I Unix International 88⇒ BSD, Xenix, SunOS puis syst V
Introduction `a Unix Aper¸cu g´en´eral
Structure
Mod`ele en couches
Partie Matérielle NOYAU grep
cpp asldcomp
a.out ed
wc cat sh more
CC
9 de 82
Introduction `a Unix Aper¸cu g´en´eral
Structure
partie mat´erielle : fournit au syst`eme les services de base noyau(syst`eme d’exploitation) : fournit les services commun aux prg et les isole des particularit´es du mat´eriel⇒ facile de les utiliser sur des machines diff´erentes.
Ex : Un prg prend en compte la taille d’un mot machine est plus difficile `a porter que les autres
Commandes :prgs comme sh, who, grep, ... qui font partie des configurations standard.
D’autres prg peuvent ˆetre construits `a partir de prg de niveau inf´erieur
Introduction `a Unix Aper¸cu g´en´eral
Structure
les prg des couches hautes (tels le shell et vi) interagissent avec le noyau grace `a un ensemble bien d´efini d’appels systemes.
Les appels syst`emes demandent au noyau de r´ealiser diverses op´erations pour le prg appelant et d’´echanger les donn´ees entre le noyau et le prg
11 de 82
Introduction `a Unix Aper¸cu g´en´eral
Shells
Interpr`ete de commande ou shell= prg it´erant ind´efiniment la lecture d’une ligne de commande au clavier et la mise en ouvre de l’action (ou des actions) d´ecrite(s) par cette ligne : Interface entre l’utilisateur et le syst`eme.
Sous UNIX, un interpr`ete de cmd est une cmd banalis´ee. Il en existe plusieurs
version de base :sh,
extensions :ksh(korn shell),csh (C-shell) etbash(GNU Bourne-Again shell) agr´eable et puissant.
Introduction `a Unix Aper¸cu g´en´eral
Fonctionnement du shell
1. affichage d’um msg “prompt” ($ ou bien>) ⇒ prˆet `a lire (saisie, ´edition, validation)
2. analyse et traitement de la ligne lue (d´ecoupage, substitution ) 3. ex´ecution des cmd correspondantes (redirection E/S,
traitement si cmd interne, recherche et lancement sinon.
13 de 82
Introduction `a Unix Aper¸cu g´en´eral
Format cmd
Format :nomCmd [-opts] args...
Ex de commandes :
Aide: man, apropos, whatis
Info: who, hostname, logname, date, cal, uname (nom du syst), ...
Recherche: find, grep, tr, ...
Listage/affichage: cat, echo, ...
Introduction `a Unix Aper¸cu g´en´eral
Environnement utilisateur
Compte et login: Au d´emarrage du syst`eme, chaque poste de travail est prˆet `a accepter la connexiond’un utilisateur.
Le syst`eme connaˆıt la liste des utilisateurs autoris´es `a se connecter sur la machine.
Chaque utilisateur est identifi´e par un nom : le nom de login.
Quant un utilisateur est d´efini sur machine on dit qu’il poss`ede un comptesur cette machine.
15 de 82
Introduction `a Unix Aper¸cu g´en´eral
Environnement utilisateur
Le compte est prot´eg´e par mot de passe : initialis´e par l’admin, il doit ˆetre chang´e `a la premi`ere connexion.
Choix du mdp : robuste pour tentative d’effraction⇒ longueur = 8, complexit´e (pas de nom ,prenom, hobby, date ; m´elanger carac alpha+chiffres et ponctuation)
Le changement se fait par la cmdpasswdsur machine isol´ee et yppasswdsur machine en r´eseau.
L’administrateur du syst`eme a pour nomroot, il a tous les droits sur le syst`eme.
Introduction `a Unix Aper¸cu g´en´eral
Environnement utilisateur
Interface X11: interface avec le poste graphique
(ecran/clavier/souris) g´er´ee par un prg particulier appel´eserveur X.
Logiciels: standard assez riche mais ancien.
I prg : C, Fortran, assembleur, SH, Csh, Awk, etc + Scheme, lisp, prolog, Ada, effeil, C++, etc
I aide `a la prg : d´ebogueurs adb, dbx ; g´en´erateurs d’applis make ; g´en de prg Lex et Yacc ;
I env. Gnu : syst. compatible Unix, gratuit avec src dispo. Gnu Emacs, GCC (c, C++, objective C), GDB, BASH sont issus du projet.
I ´editeurs : ed, vi, Emacs, etc. Emacs est multifenˆetre, multibuffer, multifichiers ; env. extensible par prg en Lisp, modes sp´ecialis´es
17 de 82
Introduction `a Unix Aper¸cu g´en´eral
Environnement utilisateur
traitement de texte Tex/LateX :
Tex : le plus puissant au niveau possibilit´es typographiques. int`egre un langage de prg, donc extensible.
Latex : surcouche adapt´ee `a la composition de livres, rapports, articles, documents techniques, etc
Texte LateX = fichier ASCII contenant du texte normal et des cmds (commencent par\).
Compil´e au moyen de la cmd texoulatexproduit un fichier .dvi, cmddvips: dvi→ postscript
pdflatexlatex →pdf directement
Introduction `a Unix Aper¸cu g´en´eral
Environnement utilisateur
\textbf{traitement de texte Tex/LateX:}
Tex: le plus puissant au niveau possibilit´es typographiques. int`egre un langage de prg, donc extensible.
Latex: surcouche adapt´ee `a la composition de livres, rapports, articles, documents techniques, etc Texte LateX = fichier ASCII contenant du texte normal et des cmds (commencent par $\backslash$).
Compil´e au moyen de la cmd \texttt{tex} ou {\tt latex} produit un fichier .dvi, cmd {\tt dvips}: dvi $\rightarrow$ postscript
{\tt pdflatex} latex $\rightarrow$ pdf directement
19 de 82
Introduction `a Unix Aper¸cu g´en´eral
Conclusion
UNIX = syst`eme ancien dont de nombreux concepts ont ´et´e repris dans les syst`emes r´ecents
Noyau contient peu de cmd, mais possibilit´e de construction incr´ementale
Inconv´enients :
I Peu abordable pour les non informaticiens
I pb de compatibilit´e entre diff´erentes versions Avantages :
I Multitaches, multi-utilisateurs
I jeu complet d’outils de tous niveaux
Introduction `a Unix Aper¸cu g´en´eral
Avantages suite
I souci de transparence :
I unification de l’acc`es aux p´eriph´eriques
I mod`ele en couches
I fichiers de param`etrage en ASCII
I construction incr´ementale : outils complexes cr´ees `a partir d’outils plus simples
I ouverture du syst`eme :
I portabilit´e d’une machine `a l’autre (si noyau port´e⇒OK)
I interop´erabilit´e : plusieurs machines diff´erentes peuvent travailler ensemble
I scalabilit´e : mˆeme systeme sur machines de tailles diff´erentes
I portabilit´e des applications gr`ace aux standards de
d´eveloppement tels les API pour prg source et les ABI (binary) pour les executables (1 ABI par processeur)
21 de 82
Introduction `a Unix Les fichiers
Types de fichiers
Diff´erents types de fichiers
I les fichiers ”normaux” (”-” en d´ebut de ligne par ls-l) : texte, image, exec, ...
I les r´epertoires (”d”)
I les fichiers sp´eciaux, qui servent `a communiquer avec les p´eriph´eriques (mode b,c,r,p)
I les liens symboliques (”l”) ou physiques : objets pointant sur un autre (raccourci)
Introduction `a Unix Les fichiers
Arborescence de fichiers
Syst`eme de fichier (SF) = Arbre dont la racine est not´ee/.
Chaque processus poss`ede un r´epertoire courant qui est sa position dans l’arbre du SF.
Lors de la connexion, le r´epertoire courant du shell est le r´epertoire d’accueil (home directory). Il peut ˆetre modifi´e au moyen de la cmdcdet affich´e au moyen de pwd.
23 de 82
Introduction `a Unix Les fichiers
Arborescence standard
I r´epertoires de fichiers ex´ecutables : /bin, /usr/bin, usr/local/bin et les ´equivalent sbin, pour le root
I r´ep de biblioth`eques : /lib/usr/lib/usr/local/lib
I fichiers d’administration : /etc, /adm
Ex : - /etc/passwd ou chaque ligne d´efinit un utilisateur - /etc/rc init du systeme
- /etc/utmp liste des utils connect´es
I r´ep des utilisateurs : /users ou parfois /home ou /u
I /usr/man pour le manuel et /usr/doc/HOWTO de Linux
I Fichiers speciaux de p´eriph´eriques : /dev
I divers : /tmp
Introduction `a Unix Les fichiers
Chemin dans le SF
Un chemin identifie un fichier (r´egulier ou r´epertoire) dans le SF. Il correspond `a un d´eplacement dans l’arbo de fichiers. Dans chaque r´epertoire R, il existe 2 noms reserv´es :.. : r´ep p`ere de R . : r´ep R
Chemin Absolu: exprime un d´eplacement par rapport `a la racine (ind´ependant de la position courante)
Chemin Relatif : exprime un d´eplacement par rapport `a la position courante
Tout chemin se d´ecompose enprefixeet nom de base.
Si chemin contient des/, le nom de base est le mot suivant le dernier/, le reste est le pr´efixe. Le pr´efixe est toujours le chemin d’un r´epertoire
25 de 82
Introduction `a Unix Les fichiers
Commandes relatives aux fichiers
I Listage : cat, more, tail, head, ls
I Cr´eation : mkdir, touch, rm, rmdir, ln
I D´eplacements : cd, cp, mv Ex : cat dring.wav>/dev/audio
Introduction `a Unix Les fichiers
Droits sur le SF
Par rapport `a un fichier, les utilisateurs sont class´es en 3 classes :
I le propri´etaire du fichier ou r´epertoire qui est initialement son cr´eateur, (peut ˆetre chang´e par cmdchown)
I le groupe propri´etaire qui est par d´efaut le groupe auquel appartient le propri´etaire, mais peut ˆetre chang´e par la cmd chgrp
I tous lesautres utilisateurs
27 de 82
Introduction `a Unix Les fichiers
Droits : lecture, ´ ecriture, ex´ ecution
I lecture : permet de lister le contenu d’un fichier ou r´ep.
I ´ecriture : permet de modifier le fichier ou d’ajouter/supprimer une entr´ee dans le r´ep
I ´ex´ecution : permet de lancer le prg contenu ds le fichier ss forme de code binaire ex´ecutable ou de script shell ; pour un r´ep, permet de traverser le r´ep (pouvoir l’utiliser dans la partie pr´efixe d’un chemin)
⇒Trois paquets de 3 droits pour chaque fichier : prop grp autres
rwx rwx rwx
s s t
T
Introduction `a Unix Les fichiers
Droits
Trois repr´esentations :
caract`eres rwx r-x r-- Le ”-” indique l’absence de droit.
forme donn´ee par cmdls -l
binaire 9bits ou 1=droit donn´e, 0=droit retir´e
octale 3 valeurs octales donn´ees par les trois nombres binaires
Ex :
rwx r-x r-- 111 101 100
7 5 4
29 de 82
Introduction `a Unix Les fichiers
Modification des droits
Modification :chmod droits fichiers o`u droits=nouveaux droits en octal
ou bien modification(ajout/suppression) des droits existant par chmod [u,g,o,a][+,-,=] [r,w,x] fichiers
u=user, g=group, o=other, a=all ; +=ajout, -=suppression Ex : ajout d’un droit d’ex´ec pour tous : chmod a+x fic retrait du droit de lecture et ex´ecution au grp et autres :chmod go-r fic
Ex : arriver `a la config suivante :r-x --- --- chmod u=rx,go=-
chmod 500
Introduction `a Unix Les fichiers
Droits standards
Droits standards `a la cr´eation : d´ependent du syst`eme (notamment du niveau de protection souhait´e)
Souvent :rw-r--r-- pour fichier non ex´ecutables et rwxr-xr-x pour r´ep et ex´ec binaires
Les droits les moins restrictifs `a la cr´eation : D=666 pour les fichiers et D=777 pour les r´epertoires et fichiers ex´ecutables.
Ensuite, la variableumaskd´efinit les droits que l’on retire (en g´en´eral umask=022)
Modification des droits standards :umask masque nouvelle valeur de umask = D ET NON umask
Ex :umask 013 fic cr´e´es en mode 664 et r´ep en mode 764
31 de 82
Introduction `a Unix Les fichiers
Droits sp´ eciaux
Droits sp´eciaux :bits uid, gid et sticky bits
bituid(resp.gid) positionn´e : s `a la place de x pour user (resp. le grp)
⇒n’importe qui aura les droits du propri´etaire (resp. du grp) du fichier pendant qu’il l’ex´ecute (uniquement fichier binaire, pas script).
Ex : La cmdpasswd: l’utilisateur qui lance la cmd passwd doit avoir les droits de root pouvoir modifier le fichier /etc/passwd si S au lieu de s : bit uid ou gid positionn´e mais pas droit en ex´ecution
Introduction `a Unix Les fichiers
Droits sp´ eciaux
Pour les r´epertoires : lesticky bitt (sticky bit + ex´ec) ou T (sticky bit seul) `a la place du x des autres permet de pr´evenir l’effacement des fichiers du r´epertoire par un autre que le propri´etaire ou que root (utile pour les r´epertoires partag´es comme /tmp par exemple) Pour positionner droits sp´eciaux : chmodoctal + 1000 (sticky bit), 2000 (gid), (4000 uid)
Ex : chmod 5654 donne rwSr-xr-T
33 de 82
Introduction `a Unix Les processus
Les processus
processus = programme en cours d’ex´ecution
Unix est un syst`eme multitache qui travaille en temps partag´e ⇒ il y a un m´ecanisme pour allouer le processeur aux processus
(m´ecanisme de tourniquet ”round robin” avec notion de priorit´es).
Commandes relatives aux process :ps, bg, fg, jobs, kill
Introduction `a Unix Les processus
Entr´ ees/sorties (E/S)
Op´eration d’E/S=transfert de donn´ees entre zone m´emoire et fichier ou p´eriph.
Ex : process qui effectue E/S sur clavier et ´ecran.
Flotd’E/S d’un process = E/S actives Plusieurs types de communications possibles :
Process→ fichier fichier → process process → p´eriph´erique
p´eriph→ process Egalement entre 2 process :
process → process
35 de 82
Introduction `a Unix Les processus
Entr´ ees/sorties
A la cr´eation, un process poss`ede 3 flots d’E/S pr´ed´efinis (flots d’E/S standards) :
-stdin : flot d’E std, sur lequel on effectue op. de lecture std. Par defaut = clavier
-stdout : flot de S std, op. d’ecriture std. par defaut = ecran du terminal
-stderr : flot d’erreur std, affichage de msg d’err. Par defaut = ecran du term.
Process stderr stdout stdin
Introduction `a Unix Les processus
Redirections
M´ecanismes de redirection :il est possible de red´efinir les flots d’E/S std en les associant `a un nouveau fichier ou p´eriph. : on parle alors de redirection d’E/S.
Les redir sont possibles directement depuis un shell : D’un prg vers un autre prg (pipe outube).
Ex :ls -l |more redirige la sortie std de lssur l’E std de more.
stderr
stdin ls stdout stdin more stdout stderr
37 de 82
Introduction `a Unix Les processus
Redirections
D’un prg vers un fichier. Ex :ls-l > ls.l redirige le flot de sortie std delsdans un fichier de nom ls.l. voir fig.
stderr stdout
stdin ls ls.l
Introduction `a Unix Les processus
Redirection
Symboles de redirection en shell :
| pipe : SS cmd gauche vers ES cmd droite
< ES→ fichier
> SS→ fichier (cr´eation si n´ecessaire)
>> idem avec positionnement en fin de fichier 2> SES→ fichier
2>&1 fusion de la sortie erreur std sur la sortie std
39 de 82
Programmation syst`eme
Langages syst` eme
I shell
I awk
I perl
I C
On peut tout faire en C, certains traitements sont plus simples `a
´ecrire en shell/awk
Programmation syst`eme Shell
Environnement
Shell = liste de couples (variable,valeur) + cmd internes Var pr´ed´efinies : PATH, IFS, HOME, ...
cmds internes :cd, echo, pwd, read, set trap, wait,...
Envir. peut ˆetre initialis´e grˆace aux fichiers d’initialisation du shell, lus au moment de la connexion (sh : .profile, csh :.login, .cshrc ; bash :.bash profile .bashrc)
41 de 82
Programmation syst`eme Shell
Environnement
Traitement d’une cmd :
1. Phase de saisie : ´edition, historique, compl´etion 2. Phase de substitutions : analyse de la liste de cmd
3. Ex´ecution : la cmd r´esultant du 2 est recherch´ee puis ex´ecut´ee Exemple :date > RC.L ; ls-l . ? ?* |grep rc >> RC.L devient apr`es substitutions
date > RC.L; ls-l .bash_history .bash_profile .dtprofile .profile |grep rc >> RC.L5
Programmation syst`eme Shell
Traitement d’une commande simple
ligne<mot0> <mot1> <mot2> ... [<redirections>]
Si mot0 est une cmd interne au shell⇒ exec directe
Sinon un fichier de nom<mot0>est recherch´e dans la liste de repertoires de fichiers executable (d´efinie par la var PATH) - fichier non trouv´e
- fichier non executable par l’util
- fichier exec avec droits OK (ex : cp, rm,...)⇒ lancement de la cmd
- script avec acc`es OK ⇒ lancement d’un shell qui ex´ecute le script. Le chemin absolu du shell peut ˆetre pr´ecis´e dans la 1iere ligne du script :#!/bin/sh ou bien#!/bin/csh, ...
43 de 82
Programmation syst`eme Shell
Valeur d’une cmd
Toute cmd qui termine son exec retourne unevaleur.
- terminaison normale : le processus execute un appel syst`eme exit(i)=>valeur=i (normalement 0).
- term. anormale : process interrompu par r´eception du signaln0s (ex : 9 du kill -9) =>valeur = c s, avec c=1 si fichier core produit, 0 sinon et s = num´ero signal.
La valeur est interpr´et´ee par le shell comme un bool´een (0=vrai, autre=faux)
ATTENTION de ne pas confondre ler´esultat (ce qui est envoy´e vers la sortie std) d’une cmd avec sa valeur.
Ex : pwd valeur=0, resultat=/home1/togni
Programmation syst`eme Shell
Exemple
Ex : cat sortie.c
main(int argc, char **argv) {
if(argc==2) exit(atoi(argv[1]));
}
if sortie 0 then echo oui else echo non if sortie 100 then echo oui else echo non
Le signe $? repr´esente la valeur de la derniere cmd executee Ex prec : sortie 100
echo $?
va donner 100
45 de 82
Programmation syst`eme Shell
Cmd compos´ ee
pipeline= suite de cmd simples reli´ees par des symboles de redirection
cmd compos´ee= liste de pipelines reli´es par des symboles d’enchainement :
cmd1 ; cmd2 s´equentiel: cmd2 lanc´ee quand cmd1 est termin´ee cmd1 & cmd2 parallele: cmd2 lanc´ee en meme temps que cmd1 cmd1 && cmd2 et logique: cmd2 lanc´ee si cmd1 ret la val vrai cmd1 || cmd2 ou logique: cmd2 lanc´ee si cmd1 ret faux
Rem :cmd &suivi d’une commande vide lance cmd en arri`ere plan (rend la main au shell imm´ediatement)
Exs :cd $CHEMIN && ls -l a.out 2>&1>LOG || echo Erreur
Programmation syst`eme Shell
Parenthesage
pour forcer les priorit´es
Ex :echo $F1est-ce $F1 ou bien$F 1?
- Accolades Ex :{ cat $F1 || cat $F2} | wc -l
- parenth`eses : idem exec de la cmd ds un sous shell =>on peut alors rediriger les ES d’une liste facilement. Ex :(date ; pwd ; ls-cF) >LOG
Valeurd’une cmd compos´ee = valeur de la cmd la + `a droite
47 de 82
Programmation syst`eme Shell
Substitutions
Avant d’executer une ligne, le shell recherche les motifs a
substituer dans la ligne de cmd et remplace chacun d’entre eux par le resultat de la subs dans cet ordre :
1. substitution de commandes
Le motif‘<cmd>‘ est remplac´e par le r´esultat de l’exec de la cmd<cmd>
2. substitution de variables
$<var>est remplac´e par la valeur de la variable<var>
3. substitution de chemins Trois motifs :
∗ : suite ´eventuellement vide de caract`eres
? : un caract`ere qcq
[] : alphabet (ensemble de caract`eres)
Programmation syst`eme Shell
Substitutions
Ex : [abcdef] = [a−f], [A−Za−z]=toutes les lettres Rem : le caract`ere.en tˆete de fichier subit un traitement particulier : en g´en´eral, les fichiers commen¸cant par ’.’ sont les fichiers de config auxquels on acc`ede en le sp´ecifiant explicitement
⇒motif ∗produit la liste de tous les fichiers du r´ep courant ne commen¸cant pas par un ’.’ et.∗ ceux commen¸cant par un point.
49 de 82
Programmation syst`eme Shell
Quotations
Permettent de bloquer la subs de certains motifs :
Le caract`ere \ transforme le carac suivant en carac normal Une suiteentre apostrophes (quote) n’est pas interpr´et´ee et est consid´er´ee comme un seul mot
Ex :echo echo ’/***\’
echo ’/bin/[a-c]*’
Une chaineentre guillemetsest partiellement quot´ee ; seuls les motifs de substitution de chemin sont inhib´es
Programmation syst`eme Shell
Les variables
Var. Shell de type chaˆıne de caract : ident=let[let+chiffre]*
affectation :ident=mot
Vecteur de variables que l’on peut affecter au moyen de la cmd set :
set <mot1> <mot2>
place resp. mot1 dans la 1iere case, mot2 dans la 2ieme, etc seuls les 9 premiers ´el´ements sont directement accessibles grˆace aux motifs :
$1 : val du premier ´el´ement, $2 : val du 2ieme, ..., $9 : val du 9ieme
$# : nb elem courant
$∗: liste des ´el´ements
51 de 82
Programmation syst`eme Shell
Les variables
Ex :$ set ‘date‘
La commandeshiftpermet d’acceder, qd ils existent, aux autres elements du vecteur en decalant chaque elem vers la gauche (le 1er est perdu)
Lors de l’exec d’un script, le vecteur de variables est initialis´e avec la liste des param eventuels
Les autres motifs associ´es au $ : $0: nom de la cmd courante (shell courant ou script)
$$: pid de la cmd courante
$ !: pid du dernier process d´etach´e
Programmation syst`eme Shell
La commande Test
test <arg1> <arg2> ...
ou bien [ <arg1> <arg2> ... ]
renvoie une valeur vraie (0) ou bien faux (1) suivant arguments.
Tester l’existence et la nature de fichiers :
test
-f fichier
-d rep
-r <chemin> en lecture
-w en ecriture
-s de taille >= 0
Ex :test -d $NOM && echo repertoire
53 de 82
Programmation syst`eme Shell
La commande Test
Comparer
I 2 chaines qcqtest <chn1> =, != <chn2>
I 2 chaines num´eriques
test <chn1>
-eq -ne -gt -ge -lt -le
<chn2>
Ex : if [ $# -lt 1 ] then echo "usage : $0 fichier fichier exit 1 fi
Arguments-o et -apour le OU et le ET logiques.
Ex :test $jour -ge 1 -a $jour -le 31
Programmation syst`eme Shell
La commande expr
´Evaluer des expressions arithm´etiques ou logiques simples (sans parenth`eses)
expr <e1>
+ -
\*
/
<
<=
<e2>
Ex :NB=‘expr $NB + 1‘
55 de 82
Programmation syst`eme Shell
La commande expr
Recherche de motifs :
expr <ch1> : <masque>
A pour r´esultat la longueur sur laquelle la chaine et le masque co¨ıncident. Le masque est une expr r´eguli`ere entre quotes Ex :expr $1 : ’bon.*’ renvoie 7 si $1 vaut bonjour ou bien bonsoir, 0 si banane
Programmation syst`eme Shell
Expressions r´ eguli` eres
Utilis´ees par egrep, grep, expr, vi, sed, awk, ...
Servent `a ´etablir une correspondance carac/carac entre un motif et plusieurs chaˆınes sauf si un m´eta-caract`ere est rencontr´e dans le motif.
M´eta-caract`eres :
^ pour debut de ligne
$ pour fin de ligne . remplace un caract`ere
* de 0 `a n fois le caract`ere la pr´ec´edant [] ensemble de caract`eres utilisables
\ ignorer l’effet du caract`ere suivant
{} indiquer le nombre d’occurences (attention, pr´efix´ees par \) () donner des num´eros d’ordre aux mots
Exs:
a\{3,4\} d´efinit "aaa" ou "aaaa"
[^0-9] pas un chiffre
57 de 82
Programmation syst`eme Shell
Structures de contrˆ ole
Si-Alors-Sinon : if <test>
then
<liste>
[ elif <test>
then
<liste>
. . . ] [ else
<liste> ] fi
Ex de script :
#!/bin/sh if [ $# = 0 ] then
cd ..
else cd $1 fi
echo "--> ‘pwd‘"
Programmation syst`eme Shell
Structures de contrˆ ole
Aiguillage : case <mot> in
<motif> [ | <motif> ...])
<liste>
...
;;
. . . esac
59 de 82
Programmation syst`eme Shell
Exemple d’aiguillage
case $N in mbox )
echo $N : boite aux lettres
;;
.* )
echo $N : fichier de configuration
;;
*.c | *.h | *.cpp )
echo $N : fichier source C
;;
* )
echo $N : type inconnu
;;
Programmation syst`eme Shell
Iterations
while <test>
do
<liste>
done
Utilisation courante : while [ $# -gt 0 ] do
case $1 in -o )
shift
$OUTPOUT=$1
;;
esac shift done
61 de 82
Programmation syst`eme Shell
Iterations
La boucleforpermet de r´ep´eter un traitement pour tous les
´el´ements d’une liste
for <nom> [ in <mot1> ... ] do
<liste>
. . . done
Programmation syst`eme Shell
Exemple de boucle for
for N in * do
cp $N $N.svg done
r´ep`ete la cmdcp <nom> <nom>.svgpour <nom>prenant successivement pour valeur tous les noms de fichiers du r´ep.
courant.
La cmdfor N in ‘cat $LISTE‘ ; do ... donepermet d’it´erer un traitement sur tous les mots d’une liste de mots contenue dans un fichier de nom contenu dans la variableLISTE.
63 de 82
Programmation syst`eme Shell
Les ´ echapements
Trois types :
continue: passage `a l’it´eration suivante break [<n>]: sortie de <n> it´erations
exit [<n>]: sortie du prg avec la valeur<n>
Programmation syst`eme Shell
Fonctions et sous-programmes
Indispensable pour modularit´e et ´eviter duplication de code D´efinies en utilisant la syntaxe du C
Ex :
display_usage () {
echo Usage: $0 [-acfx] fichier return 1
} add() {
return ‘expr $1 +$2‘
} usage () {
display_usage exit 1 }
if [ $# -ne 2 ] then usage else add $1 $2
echo $?
fi
65 de 82
Programmation syst`eme Shell
Fonctions et sous-programmes
Passage des param`etres : seules les variables export´ees sont accessible dans le ss-prg. Le ss-prg peut utiliser la valeur de retour comme param`etre.
On utilise le mot cl´e builtinpr´ec´edant un nom de cmd <cmd>
pour indiquer que l’on fait r´ef´erence `a la commande<cmd>
originale , mˆeme si celle-ci a ´et´e red´efinie par une fonction.
Ex :cd () { builtin cd $1 ; pwd}
Programmation syst`eme Shell
Programme r´ ecursif
$ more tree for N in $1/*
do
if [ -d $N ] then
echo R´epertoire: $N tree $N
else
echo Fichier $N fi
done
67 de 82
Programmation syst`eme Shell
Autres commandes internes
:retourne vrai
.ousourceex´ecution locale (sans utiliser un autre shell) eval´evaluation d’une chaine
execremplacement du shell courant
Programmation syst`eme Shell
Exemple : sh-- un shell restreint
#!/bin/sh
echo shell restreint while :
do
echo -n $PS1 read COMMAND ARGS case $COMMAND in
PATH=* )
echo interdit de modifier PATH
;;
cd* )
echo vous ne pouver bouger
;;
sh |csh | bash )
echo interdit de changer de shell
;;
exit | bye ) break 1
;;
* )
eval $COMMAND $ARGS
;;
esac done echo bye
69 de 82
Programmation syst`eme Le langage AWK
Le langage AWK
Cr´ee par Aho, Weinberger et Kernighan.
Il peut ˆetre class´e dans la cat´egorie des filtres. Mais c’est beaucoup plus qu’un utilitaire de gestion des fichiers textes, il int`egre un langage interpr´et´e tr`es voisin du C.
Cet utilitaire, comme sed, s’applique `a un fichier, ou `a un flot de donn´ees provenant de son entr´ee, si le fichier (pr´ec´ed´e de -f) est absent. Il lit ce fichier ligne par ligne (toutes les lignes par d´efaut).
Les lignes sont s´epar´ees par des retour-chariots.
Programmation syst`eme Le langage AWK
Champs
Chaque ligne (enregistrement) est d´ecompos´ee enchamps, les champs ´etant des chaines de caract`eres s´epar´ees les unes des autres par un caract`ere particulier appel´e le s´eparateur.
Ce caract`ere de s´eparation peut ˆetre fourni explicitement, sous la forme de l’option-F " :", par exemple, ou invoqu´e dans le motif d’une expression rationnelle.
La valeur du premier champ est contenue dans la variable $1, celle du deuxieme dans $2, etc. $0 repr´esente la ligne enti`ere.
71 de 82
Programmation syst`eme Le langage AWK
Utilisation
La fa¸con habituelle de l’invoquer est
awk {liste de commandes} fichier_de_donn´ees ou bien
awk -f fichier_prg.awk fichier_de_donn´ees Chaque ligne du programme awk est de la forme motif { action }
oumotifest soit une expression awk, soit une expression r´eguli`ere entre / / d´ecrivant la chaˆıne `a rechercher dans chaque
enregistrement du fichier de donn´ees et actionest la suite d’instructions `a executer quand l’enregistrement contient le motif.
Programmation syst`eme Le langage AWK
Motifs
On peut avoir les formes suivantes :
I BEGIN { action }L’action est ex´ecut´ee une fois avant de lire les donn´ees
I END { action }L’action est ex´ecut´ee une fois apr`es que awk ait lu toutes les donn´ees
I { action } Ex´ecute l’action pour chaque enregistrement lu sur le fichier de donn´ees
I motif Chaque enregistrement satisfaisant le motif est affich´e (action par d´efaut :print $0
I motif1,motif2 { action } Ex´ecute l’action pour chaque enregistrement d’entr´ee `a partir du premi`er enregistrement satisfaisant motif1 et jusqu’au prochain satisfaisant motif2. Si un enregistrement ult´erieur satisfait motif1, le processus est r´ep´et´e
73 de 82
Programmation syst`eme Le langage AWK
Exemple
ls -al | awk ’$6 == "oct" { sum += $5 } END { print sum }’
Pour chaque ligne produite parls -l, awk teste si le sixi`eme champ est ´egal `a oct, auquel cas il ajoute la valeur du cinqui`eme champ `a la variable sum.
Cet enchaˆınement de commandes compte donc le nombre d’octets total de tous les fichiers du r´epertoire courant modifi´es en Octobre.
Programmation syst`eme Le langage AWK
Variables
Les variables sont de type num´erique ou chaˆıne de caract`eres, elles n’ont pas besoin d’ˆetre d´eclar´ees. La premi`ere affectation fixe le type de la variable.
Ex de variables pr´ed´efinies :
I FSS´eparateur de champs
I RSS´eparateur de d’enregistrement
I NFLe nombre de champs dans l’enregistrement courant
I NRLe nombre total d’enregistrements lus dans tous les fichiers de donn´ees
Type tableau : un indice de tableau peut ˆetre un nombre ou une chaˆıne. Exemple : a[3]=”toto” ; a[”deux”]=titi.
75 de 82
Programmation syst`eme Le langage AWK
Instructions
Les op´erateurs logiques et arithm´etiques sont les mˆemes que ceux du langage C (++, +=, etc).
Les Instructions de contrˆole ont une forme tr`es similaire `a leur homologues en langage C :
if (expr) instr1 [ ;else instr2]
while (expr) instr do instr while (expr)
for (expr1; expr2; expr3) instr for (var in tableau) instr
Programmation syst`eme Le langage AWK
Fonctions
Les fonctions se d´efinissent de la mˆeme mani`ere qu’en C.
L’instructionreturn [expr] en fin de fonction permet de sp´ecifier la valeur de retour de la fonction.
Ex. de fonctions pr´ed´efinies sur les chaˆınes :
I index(s,t) retourne la position dans la chaˆıne s o`u la chaˆıne t apparrait pour la premi`ere fois
I match(s,er) retourne la position dans la chaˆıne s o`u l’expression r´eguli`ere er apparrait pour la premi`ere fois
I length(s)calcule le nombre de caract`eres de s
I split(s,a,fs)divise la chaˆıne s en utilisant le s´eparateur fs et range les ´el´ements obtenus dans le tableau a
I substr(s,p[,n])retourne la sous-chaˆıne de s commen¸cant par le p-i`eme caract`ere et contenantncaract`eres.
77 de 82
Programmation syst`eme Le langage AWK
Exemple
$1 != prev {print ; prev = $1}
Affiche chaque ligne du fichier qui est diff´erente de la ligne pr´ec´edente
Programmation syst`eme Prog. syst`eme en C
Prog. syst` eme en C
Un programme C comprend trois parties : les directives pour le pr´e-processeur, les d´efinitions de fonctions et le prog principal (fonction main).
Les dir. pr´e-processeur contiennent les inclusions de biblioth`eques
#include...avec /usr/includepour les biblio. pr´ed´efinies et /usr/include/sys pour les bib. sp´ecifiques au syst`eme.
En g´en´eral il y a 2 compilateurs C sous Unix : cc et gcc
Utilisation :cc ou gcc fic.c [-o nomexec]. Si pas -o alors l’ex´ecutable cr´e´e aura pour nom a.out
ccest le compilateur constructeur optimis´e pour un type de processeur
gccest plus souple, il permet les compilations crois´ees (comp. sur une architecture pour une autre archi)
Il y a aussig++et CC: compilateurs C++
79 de 82
Programmation syst`eme Prog. syst`eme en C
Entr´ ees/Sorties
E/S format´ees :
printf(const char * format,...)et scanf: affichage et lecture clavier sprintf: affichage dans une chaine fprintf: affichage dans une chaine Exemple :
#include <math.h>
#include <stdio.h>
fprintf (stdout, "pi = %.5f\n", 4 * atan (1.0));
Programmation syst`eme Prog. syst`eme en C
Entr´ ees/Sorties
Acc`es au fichier :
I Fonctions de bas niveau (appel direct au noyau) : un num´ero de handle (typeint) identifie le fichier
fonctionsint open(chemin, mode), create, read, write, close
et constantes O RDONLY,O WRONLY,O RDWR
I Fonctions de haut niveau : un id de flux (type FILE *) identifie le fichier
fopen, fclose, fread, fwriteet constantes r,w,a
I Fonction sync oufsyncpour forcer l’´ecriture du bloc sur disque
81 de 82
Programmation syst`eme Prog. syst`eme en C
Autres fonctions utiles
I messages d’erreur : bcp d’op´erations renvoient le code -1 et positionnent une variable errnopour pr´eciser l’erreur. La fonction perrorde erno.h affiche le msg d’erreur
I lecture des droits sur un fichier :acces(chemin, mode) renvoie 0 si acc`es autoris´e
I acc`es `a l’environnement :getenv(nom) pour lire une variable d’envir. depuis un prg C,setenv(nom,valeur,ecrast) ou unsetenv(nom) pour ajouter/supprimer une variable d’envir.
I processus : int getpid(),getppid() : num´ero de process courant/p`ere ;sleep(int sec) met en sommeil un processus
I manipulations de chaˆınes :NULL n’a pas la mˆeme signification sur tous les syst`emes, donc utiliser les fonctions mem...de