Vous êtes sur la page 1sur 31

Objectif

… Objectif
† FRPSUHQGUHGpFULUHO·DUFKLWHFWXUHHWOHIRQFWLRQQHPHQWGHV
V\VWqPHVG·H[SORLWDWLRQ
† utiliser le SE Linux
… Pré-requis
Afin de suivre ce cours sans difficulté, il serait intéressant:
† G·rWUHIDPLOLHUDYHFO·XWLOLVDWLRQGHEDVHG·XQV\VWqPH
G·H[SORLWDWLRQ:LQGRZV06-'26«
† GHSRVVpGHUTXHOTXHVQRWLRQVG·DOJRULWKPLTXH
SYSTÈME D'EXPLOITATION † Posséder des connaissances sur l'architecture des ordinateurs

(LINUX) … Déroulement du Cours


† CM=12h, TD=12h, TP=21h
Par: Dr TCHOUPE TCHENDJI Maurice
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Université de Dschang

Programme Bibliographie
3 4

… Théorie des SE … Tanenbaum A. 6\VWqPHVG·H[SORLWDWLRQ, Pearson Education, Paris


2003, 2e éd.
† 'pILQLWLRQHWU{OHG·XQ6(
… Armspach, J.-P.,Colin, P., Ostré-Waerzeggers, F. LINUX.
† Gestion des fichiers Initiation et utilisation, Dunod, Paris 2004
† Gestion des processus
… Garrels, M. Bash Guide for Beginners, téléchargeable sur The
† Gestion de la mémoire Linux Documentation Project, http://www.tldp.org/guides.html ;
† Gestion des E/S
où sur le réseau pédagogique R:/GTR/savary
… Cooper, M. Advanced Bash-Scripting Guide, plus complet que
… Etude du SE Linux le précédent, sur le même site.
† Installation,
… Chiesa Jean Yves , support d cours Système, Université de Rouen
† Commandes de bases … De nombreuses références internet
† Programmation en Shell
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
'pILQLWLRQHWU{OHG·XQ6(
5 6

… 8QV\VWqPHLQIRUPDWLTXHTX·HVWFHTXHF·HVW"

Théorie des SE

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

'pILQLWLRQHWU{OHG·XQ6( 'pILQLWLRQHWU{OHG·XQ6(
7 8

… En anglais « Operating System (OS) » … A quoi ça sert ?


… 4X·HVW-FHTXHF·HVW" †à simplifier la vie des utilisateurs et des programmeurs:
† ©3URJUDPPHDVVXUDQWODJHVWLRQGHO·RUGLQDWHXUHWGH
machine virtuelle (abstraite)
ses périphériques » [www.dicofr.com] † jJpUHUOHVUHVVRXUFHVGHODPDFKLQHG·XQHPDQLqUH

† &·HVWXQHFRXFKHORJLFLHOOHGRQWOHU{OHHVWGHJpUHUOHV
efficace
périphériques et de fournir aux programmes utilisateur „ Les ressources G·XQRUGLQDWHXUVRQW
‡ le processeur,
une interface simplifiée avec le matériel.
‡ les mémoires,
‡ les périphériques

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
S\VWqPHG·H[SORLWDWLRQHQWDQWTXHPDFKLQH S\VWqPHG·H[SORLWDWLRQHQWDQWTXHPDFKLQH
virtuelle (1/3) virtuelle (2/3)
9 10
appel système
… /·DUFKLWHFWXUHDXQLYHDXGXODQJDJHPDFKLQHHVWORXUGHj Programme utilisateur
programmer, surtout pour les entrées/sorties.
… Par exemple, dans les contrôleurs de disquette des PC actuels
une opération basique de lecture exige 13 paramètres de bas RXYULUBILFKLHU´73H[SUW[Wµ!
niveau compactés dans 9 octets. Ces paramètres précisent :
… /·DGUHVVHGXEORFTXLGRLWrWUHOX SystqPHG·H[SORLWDWLRQ
Pilote de disquette Pilote G·LPSULPDQWH Pilote G·pFUDQ
… Nombre de secteurs par piste

… /RQJXHXUGHO·HVSDFHLQWHU-secteur <démarrer moteur>


<lire_secteur(dpEXWBVHFWHXUBSDUDPBSDUDPB«SDUDPB !
… etc. <lire_secteur(dpEXWBVHFWHXUBSDUDPBSDUDPB«SDUDPB !
… 6DQVO·H[LVWHQFHGX6(XQSURJUDPPHXUGHYUDLWFRQQDvWUHWRXVFHV «
détails et les indiquer explicitement pour chaque lecture sur <lire_secteur(dpEXWBVHFWHXUBSDUDPBSDUDPB«SDUDPB !
<arrêter_moteur>
disquette.
… De plus il devrait personnellement contrôler les arrêts et
redémarrages du moteur du lecteur disquette. Contrôleur de disquette

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

S\VWqPHG·H[SORLWDWLRQHQWDQWTXHPDFKLQH
virtuelle (3/3)
'pILQLWLRQHWU{OHG·XQ6(
11 12

… /HV\VWqPHG·H[SORLWDWLRQSUpVHQWHDXSURJUDPPHXUXQHLQWHUIDFHG·DFFqV
aux ressources GHO·RUGLQDWHXU VRXVIRUPHG·DSSHOVV\VWqPH). … /HV\VWqPHG·H[SORLWDWLRQHQWDQWTXHPDFKLQH
… Grâce à cette interface le programmeur peut faire abstraction des détails virtuelle se présente comme une couche logicielle qui
de fonctionnement des ressources (comme ceux listés sur le transparent
précédent). SHUPHWO·XWLOLVDWLRQGXPDWpULHOHWFRRUGRQQHOHV
… Cette interface est basée sur des objets abstraits dont les plus importants
sont les fichiers et les processus.
GLIIpUHQWVSURJUDPPHVG·DSSOLFDWLRQ
… Exemple : … /HEXWHVWDXVVLGHUHQGUHO·HQVHPEOHWUDQVSDUHQWHW
… Le programmeur voit un disque comme une collection de fichiers qui
peuvent être ouverts, lus, écrits et fermés. IDFLOHjXWLOLVHUYLVjYLVGHO·XWLOLVDWHXU ,+0 
… /H6(JqUHO·DOORFDWLRQGHVHFWHXUVDX[ILFKLHUVOHFKDUJHPHQWGHV
fichiers en mémoire, la cohérence entre les fichiers en mémoire et leur
copies sur le disque, le chargement et déchargement des pages (dans
le cas de la mémoire virtuelle), etc.
… Ces actions sont transparentes pour le programmeurF·HVW-à-GLUHLOQ·HVW
pas obligé de les connaître pour se servir du disque.
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Tâches du s\VWqPHG·H[SORLWDWLRQ- résumé 'pILQLWLRQHWU{OHG·XQ6(
13 14

… )21&7,216'·816<67(0('·(;3/2,7$7,21$%25'((6'$16
Gestion de LE COURS
fichiers † Gérer les processus, leur existence simultanée, leur coexistence dans la
mémoire centrale, le temps qui leur est alloué.
Gestion de Gestion de † )RXUQLUDX[SURFHVVXVOHVPR\HQVG·DFFqVjWRXWHVOHVUHVVRXUFHVHQ
la mémoire processus WHUPHGHPpPRLUHHWG·HQWUpHVVRUWLHVGRQWLOVRQWEHVRLQ&KDTXH
SURFHVVXVGRLWSRXYRLUV·LPDJLQHUTX·LOGLVSRVHGHODPDFKLQHWRXWH
entière.
Gestion Gestion des † 2IIULUXQHLQWHUIDFHG·XWLOLVDWLRQODSOXVFRQYLYLDOHSRVVLEOH&HODLQFOXW
G·XWLOLVDWHXUV O·,+0 ODQJDJHGHFRPPDQGHLQWHUIDFHJUDSKLTXH PDLVDXVVLOH
entrées/sorties système de fichiers, qui permet de gérer la permanence des données
entre les exécutions de programme.
† 2SWLPLVHUO·XWLOLVDWLRQGHVGLIIpUHQWVpOpPHQWVFRPSRVDQWOHV\VWqPH
Les programmes utilisateur peuvent accéder à ces différentes fonctionnalités à LQIRUPDWLTXHGLVTXHVPpPRLUHSpULSKpULTXHVHWFDSWHXUVGLYHUV&·HVW
OHU{OHGXVRXVV\VWqPHG·HQWUpHV-sorties.
O·DLGHGHVappels système.
† Offrir une interface de programmation la plus simple et la plus
puissante possible.
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

6758&785('·816<67(0( 6758&785('·816<67(0(
15
'·(;3/2,7$7,2102'(51(81,; 16
'·(;3/2,7$7,2102'(51(81,;
… Caractéristiques
† Le noyau (kernel) : ensemble de fonctions système assurant la
gestion de la mémoire, des E/S et des processus.
† Un système de fichiers hiérarchisé.
† Un/plusieurs interpréteurs de commandes (shell).
† Processus asynchrones (arrière plan).
† Réentrant (partage du "texte") texte=instruction.
† Mécanisme de communication (synchronisation).
† E/S généralisées (intégrées au SGF).
† 5pDOORFDWLRQ UHGLUHFWLRQ GHV(6HWG·XQSURFHVVXV
† Nombreux utilitaires de programmation.
† 0pFDQLVPHGHSURWHFWLRQGHPpPRLUHHQFDVG·HUUHXUGH
programmation.
† Interfaces utilisateurs graphiques
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
/H6\VWqPHGH)LFKLHUV/(6*)'·81,;
17 18

… Le fichier UNIX est une suite éventuellement vide


G·RFWHWVFRQWHQDQWXQHLQIRUPDWLRQTXHOFRQTXH$XFXQH
VXSSRVLWLRQQ·HVWIDLWHSDUOHV\VWqPHVXUODVWUXFWXUHGH
ces octets (ASCII, binaire ou toute autre catégorie.).
/·LQWHUSUpWDWLRQGHVELWVFRQWHQXVGDQVOHVILFKLHUVHVWGH
O·HQWLqUHUHVSRQVDELOLWpGHO·XWLOLVDWHXU
… Unix fait la différence dans les noms de fichiers entre
Système de fichiers UNIX/Linux les majuscules et les minuscules (case-sensitive). En
théorie, tous les caractères du clavier sont autorisés dans
OHVQRPVGHILFKLHUV(QSUDWLTXHLOYDXWPLHX[V·DEVWHQLU
G·XWLOLVHUGHVFDUDFWqUHVWURSH[RWLTXHVULVTXDQWHQ
SDUWLFXOLHUG·rWUHLQWHUSUpWpVSDUFHUWDLQVSURJUDPPHV
C.est notamment le cas de * ou ? et de . en début de nom.
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

/H6\VWqPHGH)LFKLHUV/(6*)'·81,; /H6\VWqPHGH)LFKLHUV/(6*)'·81,;
19 20

… Hiérarchie des répertoires. … Hiérarchie des répertoires.


† /HV\VWqPHGHILFKLHUVHVWSHUoXSDUO·XWLOLVDWHXUFRPPHXQHKLpUDUFKLHGH † Un fichier peut être dénommé par son chemin absolu ou par son
UpSHUWRLUHVHWGHVRXVUpSHUWRLUHV$ODUDFLQHGHO·DUEUHVHWURXYHOHUpSHUWRLUH chemin relatif au répertoire courant. Dans la plus grande généralité,
GHQRP,OQ·H[LVWHSDVGHQRWLRQVGHGLVTXHFRPPHGDQV06'26RX906 le chemin absolu est du type :
† Les différents disques logiques (partitions de disques physiques) du système ou
des systèmes constituent chacun un système de fichier avec une racine. Chacun <nom de machine>.[<nom de domaine>]/<chemin absolu>/<nom
GHFHVV\VWqPHGHILFKLHUVHVWUDFFURFKpGDQVO·DUEUHDXGpPDUUDJHGXV\VWqPH de fichier>
ou explicitement par la commande mount. † On peut utiliser des extensions sur les noms de fichiers comme dans
06'26PDLVHOOHVQ·RQWDXFXQHVLJQLILFDWLRQSRXUOHV\VWqPHOXLPrPH
Elles en ont éventuellement pour les bureaux de type graphique, qui
peuvent alors associer une icône particulière à une extension donnée. La
seule information qui indique quelque chose au système est le fait que le
fichier ait été marqué comme « exécutable » (voir plus loin la notion de
FRQWU{OHG
DFFqV &·HVWjFHWWHVHXOHFRQGLWLRQTXHOHV\VWqPHDFFHSWHUD
GHODQFHUVRQH[pFXWLRQVDQVG·DLOOHXUVYpULILHUVLOHILFKLHUHQTXHVWLRQ
est réellement exécutable.

Deux systèmes de fichiers séparés Après le montage


Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
/H6\VWqPHGH)LFKLHUV/(6*)'·81,; /H6\VWqPHGH)LFKLHUV/(6*)'·81,;
21 22
… +LpUDUFKLHG·XQV\VWqPHGHILFKLHUV
… Hiérarchie des répertoires. † Le détail des répertoires systèmes varie d'une implémentation à une autre. Il existe malgré
tout des ressemblances.
† /bin : commandes de base
† /dev : périphériques
„ /dev/fdx : lecteur de disquette
„ /dev/hdx : partition de disque dur ide (hda, hdb, hdb, hdc)
„ /dev/sdx : partition de disque dur scsi
„ /devFGURPFRPPHOHQRPO·LQGLTXH
„ /dev/lpx : imprimante
„ /dev/mem : mémoire .
† /etc ILFKLHUVGHFRQILJXUDWLRQHWG·LQVWDOODWLRQ
† /home : fichiers utilisateurs
† /lib : bibliothèques de programmes
† /sbin FRPPDQGHVG·DGPLQLVWUDWLRQ
† /usr : programmes et utilitaires mis à disposition des utilisateurs
† /opt : programmes du système local (voir aussi /usr/bin ou /usr/local/bin)

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

/H6\VWqPHGH)LFKLHUV/(6*)'·81,; /H6\VWqPHGH)LFKLHUV/(6*)'·81,;
23 24

… Copie, déplacement, liens sur les fichiers. … Contrôles d'accès


† Voir les commandes ls (affichage de contenus de fichiers), cp † 2QGLVWLQJXHWURLVFODVVHVG·XWLOLVDWHXUV
(copie de fichiers), mv (déplacement de fichiers), rm (suppression
„ le propriétaire (u : user, par défaut créateur),
de fichiers), mkdir (création de répertoires), cd (changement de
répertoire), rmdir (suppression de répertoire). „ le groupe (g : group, par défaut groupe principal du
† Le système de fichiers peut contenir plusieurs entrées qui font créateur) et
UpIpUHQFHDXPrPHILFKLHUSK\VLTXHUpHO&·HVWODQRWLRQGHOLHQ „ le reste du monde (o : others).
physique et de lien symbolique. † Chaque classe peut se voir affecter sur un fichier les
„ ln crée des liens physiques entre fichiers. droits
„ ln -s FUpHGHVOLHQVV\PEROLTXHVHQWUHILFKLHUV,OV·DJLWHQTXHOTXH
„ de lecture (r : read),
VRUWHG·XQUDFFRXUFLSRXUGpVLJQHUOHILFKLHU/HV\VWqPHHIIHFWXH
automatiquement le déréférencement, sauf pour quelques opérations „ G·pFULWXUH w : write) et
comme rm qui détruit le lien et non le fichier pointé par le lien. „ d'exécution (x : execute).

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
/H6\VWqPHGH)LFKLHUV/(6*)'·81,; /H6\VWqPHGH)LFKLHUV/(6*)'·81,;
25 26

… Contrôles d'accès … sticky bit, set uid, set gid :

… Exemple: voir ci-dessous


Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

/H6\VWqPHGH)LFKLHUV/(6*)'·81,; /H6\VWqPHGH)LFKLHUV/(6*)'·81,;
27 28
Contrôles d'accès
… Contrôles d'accès …

† La commande chmod permet de modifier les droits sur un fichier (noter la descente
† La commande ls -l permet de connaître le détail des droits sur un UpFXUVLYHG·XQHVRXVDUERUHVFHQFHDYHFO·RSWLRQ-U  SRXUSRXYRLUO·XWLOLVHUVXUXQILFKLHULO
faut en être le propriétaire.
fichier: le type de fichier (catalogue, fichier ordinaire ou spécial), † Syntaxe: chmod <mode> <reférenceFichier>
les droits d'accès pour les différents utilisateurs, le nombre de lien † Il existe deux syntaxe: la notation symbolique et la notation octale
du fichier, les noms du propriétaire et du groupe, la taille du † notation octale: Les modes peuvent être absolus et sont alors obtenus par combinaison des
fichier en nombre de caractères et la date de dernière nombres octaux
modification 4000 positionne le "set-uid" bit
2000 positionne le "set-gid" bit
„ ls -l /etc/passwd 1000 positionne le "sticky" bit
-r--r--r-- 1 root sys 8620 Jan 21 12:41 /etc/passwd 0400 lisible par le propriétaire
„ ls -l /bin/passwd 0040 lisible par les membres du groupe propriétaire
0001 exécutable par les autres utilisateurs
-rwsr-sr-x 1 root sys 16686 Jul 30 12:41 /bin/passwd
«
„ La commande passwd (fichier/bin/passwd) a le "set-uid" bit positionné † exemple
(indication s en lieu et place de x pour le bit exécution par le $ chmod 664 exemples/toto
propriétaire) et donc au travers de cette commande tout utilisateur peut $ ls -l exemples/toto
modifier le fichier /etc/passwd (en l'occurrence changer son mot de -rw-rw-r-- 1 jmr ens 84 Jan 27 19:09 exemples/toto
passe.)
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
/H6\VWqPHGH)LFKLHUV/(6*)'·81,; /H6\VWqPHGH)LFKLHUV/(6*)'·81,;
29 30
… Contrôles d'accès … Contrôles d'accès
† La commande chmod SHUPHWGHPRGLILHUOHVGURLWVVXUXQILFKLHU QRWHUODGHVFHQWHUpFXUVLYHG·XQHVRXVDUERUHVFHQFH
DYHFO·RSWLRQ-r). SRXUSRXYRLUO·XWLOLVHUVXUXQILFKLHULOIDXWHQrWUHOHSURSULpWDLUH † Exemples:
† Syntaxe: chmod <mode> <reférenceFichier> $ ls -l ../c/bks
† Il existe deux syntaxe: la notation symbolique et la notation octale -rwx--x--x 1 jmr ens 9282 Nov 13 13:27 ../c/bks
† notation symbolique: les modes peuvent être symboliques et ils ont alors la forme: $ chmod u+t ../c/bks
„ [<quit>] <permission> <operation>
$ chmod u+s ../c/bks
„ <quit> est une combinaison des lettres: u pour le propriétaire, g pour le groupe, o pour les autres,
a pour tous. $ ls -l ../c/bks
„ <permission> est: + pour autoriser, - pour interdire, = imposer certaines permissions et supprimer -rws--x--t 1 jmr ens 9282 Nov 13 13:27 ../c/bks
les autres;
„ <opération> est une combinaison des lettrez: r pour lire, w pour écrire, x pour exécuter, s pour le
$ chmod g+s ../c/bks
"set-uid" (bit associé à u) ou le "set-gid" (associé à g); t pour le "sticky" bit. $ ls -l ../c/bks
† Exemples: -rws--s--t 1 jmr ens 9282 Nov 13 13:27 ../c/bks
$ ls -l exemples/toto $ ls -l /tmp/toto
-rw-r----- 1 jmr ens 84 Jan 27 19:09 exemples/toto -rw-r--r-- 1 jmr ens 200 Jan 27 18:51 /tmp/toto
$ chmod go+r exemples/toto
$ chmod g=w /tmp/toto
-rw-r--r-- 1 jmr ens 84 Jan 27 19:09 exemples/toto $ ls -l /tmp/toto
-rw--w-r-- 1 jmr ens 200 Jan 27 18:51 /tmp/toto

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

/H6\VWqPHGH)LFKLHUV/(6*)'·81,; /H6\VWqPHGH)LFKLHUV/(6*)'·81,;
31 32

… Contrôles d'accès … Recherche de fichiers.


† chown SHUPHWGHPRGLILHUOHSURSULpWDLUHG·XQILFKLHU † find permet de rechercher un ou des fichiers dans le
„ syntaxe: chown <nom> <refFich>
système de fichier. On recherche récursivement, en
„ Exemple:
„ $ chown root exemples/toto SDUWDQWG·XQUpSHUWRLUHGHVILFKLHUVRXGHVUpSHUWRLUHV
„ $ ls -l exemples/toto suivant certains critères (nom de fichier, éventuellement
-rw-rw-r-- 1 root ens 84 Jan 27 19:09 exemples/toto DYHFMRNHUW\SHGHILFKLHUQRPGHO·XWLOLVDWHXURXGX
JURXSHGURLWVG·DFFqVW\SHGHILFKLHU 
† chgrp <groupe> <refFichier!«SHUPHWGHFKDQJHUOH
JURXSHG·XQILFKLHU † test peut entre autres opérations, tester les
„ $ ls -l exemples/toto FDUDFWpULVWLTXHVG·XQILFKLHUHWUHQYR\HUXQHYDOHXUGH
-rw-rw-r-- 1 root ens 84 Jan 27 19:09 exemples/toto retour 0 si vrai et 1 si faux. Très utile dans les scripts de
„ chgrp sys exemples/toto langage de commandes (nous en reparlerons).
„ $ ls -l exemples/toto
-rw-rw-r-- 1 root sys 84 Jan 27 19:09 exemples/toto
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Quelques appels système relatifs aux fichiers Quelques appels système relatifs aux répertoires
33 34

… On peut également inter-agir sur le SF par programme On peut aussi interagir avec le SF par programme au moyen d'appels systèmes
à travers des appels systèmes.
Appel système Description Appel système Description
df RSHQ QRPPRGH« Ouverture en lecture, écriture, etc. s = mkdir(chemin, mode) &UpDWLRQG¶XQQRXYHDXUpSHUWRLUH

s = close(df) )HUPHWXUHG¶XQILFKLHURXYHUW s = rmdir(chemin) 6XSSUHVVLRQG¶XQUpSHUWRLUH

n = read(df, buffer, nb_octets) /HFWXUHG¶XQQRPEUHG¶RFWHWVG¶XQILFKLHUYHUVXQEXIIHU s = link(fichier, lien) &UpDWLRQG¶XQOLHQ

n = write(df, buffer, nb_octets) (FULWXUHG¶XQQRPEUHG¶RFWHWVG¶XQEXIIHUYHUVXQILFKLHU s = unlink(chemin) 6XSSUHVVLRQG¶XQOLHQ HWpYHQWXHOOHPHQWGXILFKLHU

pos = lseek(df, offset, org) Déplacement du pointeur de fichier s = chdir(chemin) Changement du répertoire courant

2EWHQWLRQG¶LQIRUPDWLRQVVXUOHILFKLHU SpULSKpULTXHL- dir = opendir(chemin) 2XYHUWXUHG¶XQUpSHUWRLUHHQOHFWXUH


node, nb de liens durs sur le fichier, propriétaire, groupe, s = closedir(dir) )HUPHWXUHG¶XQUpSHUWRLUH
s = stat(nom, &buf) taille, date de création date du dernier accès, date de la
dernière modification) dirent = readdir(dir) /HFWXUHG¶XQHHQWUpHGXUpSHUWRLUH

s = fstat(df, &buf) Idem, à partir du descripteur de fichier rewinddir(dir) Retour au début du répertoire pour une nouvelle lecture

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Redirections Redirections - exemples


Commande shell Description
stdout Trie les lignes tapées au clavier; écrit le résultat trié à
stdout 0 1 sort
0 1 stdin fichier O¶pFUDQ
stdin
Processus
Processus

sort < f1 7ULHOHVOLJQHVGXILFKLHUIpFULWOHUpVXOWDWWULpjO¶pFUDQ


Trie les lignes tapées au clavier; écrit le résultat trié dans le
sort > f2
2 stderr 2 stderr fichier f2 (si f2 existait avant il est efface et recréé)
Trie les lignes tapées au clavier; attache le résultat trié à la
sort >> f2
ILQGXILFKLHUI VLIQ¶H[LVWDLWSDVDYDQWLOFUpp
/RUVTX·XQSURFHVVXVGpPDUUHGHIDoRQVWDQGDUGILFKLHUVVSpFLDX[VRQW
Trie les lignes tapées au clavier; écrit le résultat trié à
ouverts automatiquement : sort 2> f3 O¶pFUDQ/HVPHVVDJHVG¶HUUHXUpYHQWXHOVVRQWpFULWVGDQVOH
‡ Entrée standard (stdin) ² descripteur 0, par défaut équivalent au clavier fichier f3.
‡ Sortie standard (stdout) ² GHVFULSWHXUSDUGpIDXWpTXLYDOHQWjO·pFUDQ ««««««««««««««««««««««
‡ Sortie erreur standard (stderr) - descripteur 2, par défaut équivalent à sort <f1 >f2 2>f3
««««««««««««««««««««««
O·pFUDQ
««««««««««««««««««««««
Ces 3 entrées/sorties peuvent être redirigées afin que la lecture/écriture se sort < f1 2>> f3
««««««««««««««««««««««
IDVVHjSDUWLUYHUVG·DXWUHVILFKLHUV
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE
35 T. Maurice (ls -l toto > f1) 2> f2 36
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Vers les tubes - exemple Tubes

Problème : compter le nombre de mots uniques dans une liste . Un tube = un flot de données entre deux processus obtenu par la redirection
GHODVRUWLHVWDQGDUGG·XQSURFHVVXVYHUVO·HQWUpHVWDQGDUGG·XQDXWUHSURFHVVXV
sort ±u <f1 >f2 7ULHO¶HQWUpHVWDQGDUGHQODLVVDQW
sans création de fichier intermédiaire.
#une occurrence unique de chaque ligne
wc ±l <f2 #word count : affiche sur la sortie Meilleure solution pour le problème précédent :
#standard le nombre de lignes sort ±u <f1 | wc -l
GDQVO¶HQWUpHVWDQGDUG Fichier f1
Fichier f1 Fichier f2 demain stdout
demain stdout hier
stdin 0 1 0 1

sort ±u <f1
mardi stdout stdin

Processus exécutant
wc ±l <f1
0 1

Processus exécutant
hier
stdin 0 1 stdout
demain
stdin lundi
sort ±u <f1

mardi dimanche

Processus exécutant
wc ±l <f1
demain
Processus exécutant

lundi hier lundi 5

>f2
demain lundi dimanche
lundi mardi 5
>f2

dimanche

2 stderr 2 stderr
2 stderr 2 stderr

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE


37 T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE
38 T. Maurice

Le Système de Fichiers: MISE EN Le Système de Fichiers: MISE EN


OEUVRE DU S.G.F. UNIX OEUVRE DU S.G.F. UNIX
39 40

… Les différents types de fichiers … 6WUXFWXUHG·XQGLVTXH


† Fichiers ordinaires(- VXLWHG·RFWHWVVDQVVWUXFWXUHHWVDQVPDUTXHGHILQ … Chaque système de fichier UNIX implémente un ensemble
de fichier. Seule le mémorisation de la longueur permet de détecter la
fin du fichier. de concepts communs dérivés du système de fichier
† Fichiers répertoires(d) : un fichier contenant des noms de fichiers. G·RULJLQH/HVILFKLHUVVRQWUHSUpVHQWpVSDUGHV©inodes »,
† Liens symboliques(l) : contient seulement le chemin et le nom du fichier à les répertoires sont des fichiers simples contenant des listes
atteindre. G·HQWUpHVHWOHVSpULSKpULTXHVVRQWWUDLWpVFRPPHGHVILFKLHUV
† Tubes nommés(p) : fichiers particuliers contenant des caractères, gérés LOVXIILWG·pPHWWUHGHVGHPDQGHVGHOHFWXUHpFULWXUHVXUGHV
comme des tubes entre un processus producteur et un processus fichiers spéciaux).
consommateur.
… Un disque se décompose en un bloc de boot, et des volumes
† Fichiers spéciaux(c, p ou b) : (partitions). Chaque volume contenant un système de fichiers.
„ permettent aux processus de « voir » les périphériques comme des fichiers.
8QSURJUDPPHQ·DDLQVLSDVjVHVRXFLHUGHO·HQGURLWRLOpFULW … &KDTXHV\VWqPHGHILFKLHUVVHFRPSRVHG·XQsuperbloc,
„ Les fichiers spéciaux sont regroupés par convention dans le répertoire dev. G·XQHWDEOHGHVinodes, et des blocs de données où sont
„ Ils ne contiennent pas de données. stockés les fichiers.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Le Système de Fichiers: MISE EN Le Système de Fichiers: MISE EN
OEUVRE DU S.G.F. UNIX OEUVRE DU S.G.F. UNIX
41 42

… Chacun de ces groupes est constitué de blocs logiques, contenant un


multiple de 512 octets (variable selon la version du système, les
GpFLVLRQVGHIRUPDWDJH /DWDLOOHG·XQEORFORJLTXHHVWIL[HGDQV
un système de fichier. On peut par contre choisir une taille
différente de bloc selon le système de fichier et son utilisation
prévue.
… Les systèmes de fichiers sur les disques se répartissent dans des
EORFVGHWDLOOHVIL[HFRUUHVSRQGDQWjGHVXQLWpVG·HQWUpH-sorties du
FRQWU{OHXU/DOHFWXUHRXO·pFULWXUHG·XQpOpPHQWGXILFKLHUQpFHVVLWHOH
WUDQVIHUWLQWpJUDOGXEORFTXLFRQWLHQWFHWpOpPHQW/RUVG·XQWUDQVIHUW
GHGRQQpHVG·XQGLVTXHSK\VLTXHYHUVODPpPRLUHOHWHPSVGX
transfert des données est composé du temps de positionnement de
la tête devant le bloc à lire, puis du temps de lecture du bloc et. Ce
dernier est négligeable devant le temps de positionnement. La
question de la taille des blocs est donc une recherche de compromis
HQWUHODUDSLGLWpHWO·HVSDFHSHUGXVXUOHGLVTXH

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Le Système de Fichiers: MISE EN Le Système de Fichiers: MISE EN


OEUVRE DU S.G.F. UNIX OEUVRE DU S.G.F. UNIX
43 44

… Les inodes … Les inodes


† Chaque fichier est représenté par une structure nommée inode. † Chaque inode SHUPHWGHUHWURXYHUO·HQVHPEOHGHVEORFVGHGRQQpHV
Un inode FRQWLHQWODGHVFULSWLRQ SRXUOH6*) G·XQILFKLHU constituant un fichier.
„ Propriétaire, groupe, type de fichier, permissions † Une première série de 10 entrées contiennent chacune le numéro de
EORFG·XQEORFGHGRQQpHVGXGLVTXH
„ Date d.accès, de modification et de dernier accès à l.inode
„ Simple indirection : une onzième entrée contient le numéro d.un bloc de
„ Taille données qui contient lui même 256 entrées référençant chacune un bloc de
„ Description des blocs constituant le fichier données du disque.
„ (WDWGHO·inode „ Double indirection : une douzième entrée contient le numéro d.un bloc de
données qui contient lui même 256 entrées référençant chacune un bloc de
„ N° de périhérique logique données qui contient 256 entrées référençant chacune un bloc de données du
„ N° GHO·inode disque.
„ 3RLQWHXUVVXUG·DXWUHVinodes en mémoire „ Enfin triple indirection : une treizième entrée contient le numéro d.un bloc de
données qui contient lui même 256 entrées référençant chacune un bloc de
„ &RPSWHXUGHUpIpUHQFHLQGLTXDQWOHQRPEUHG·LQVWDQFHVGXILFKLHU données qui contient 256 entrées référençant chacune un bloc de données qui
actuellement ouvertes contient 256 entrées référençant chacune un bloc de données du disque.
„ Zone de verrous

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Le Système de Fichiers: MISE EN Le Système de Fichiers: MISE EN
OEUVRE DU S.G.F. UNIX OEUVRE DU S.G.F. UNIX
45 46

… Les inodes … Les inodes


† Remarque : Un fichier peut avoir plusieurs liens donc
SOXVLHXUVQRPV,OVXIILWSRXUFHODTX·LOVSRLQWHQWVXUOH
même inode (celui du fichier).
† /·inode n°HVWO·inode racine du système de fichiers.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Le Système de Fichiers: MISE EN


OEUVRE DU S.G.F. UNIX
47 48

… Répertoires
† Un répertoire est un fichier comme les autres.
† Chaque répertoire peut contenir des fichiers ou des
répertoires.
† Les répertoires sont structurés en arbre hiérarchique (plus
exactement en graphe sans cycle).
† Les données contenues dans un fichier de type répertoire
VRQWXQHVXLWHG·pOpPHQWVFRQWHQDQWchacun un numéro
Gestion de processus
G·inode et le nom du fichier.
† /RUVTXHXQSURFHVVXVDEHVRLQG·XQILFKLHUOHQR\DXSDUFRXUW
OHVGLIIpUHQWVUpSHUWRLUHVMXVTX·jWURXYHUOHQRPUHFKHUFKp
Celui-FLIRXUQLWDORUVXQQXPpURG·inode, qui est chargé en
mémoire et utilisé dans la suite du processus.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
3URFHVVXV SURJUDPPHHQFRXUVG·H[écution
LES PROCESSUS
49 50
… Un processus HVWXQSURJUDPPHHQFRXUVG·H[pFXWLRQ (QYLURQQHPHQWG·XQSURFHVVXV
… Si un programme peut être caractérisé par la suite de ses instructions, un
SURFHVVXVYDrWUHFDUDFWpULVpSDUFHWWHPrPHVXLWHG·LQVWUXFWLRQ
auxquelles il convient de rajouter un ensemble de données qui vont
varier au cours du temps. Ainsi, à un instant WGRQQpLOV·DMRXWHjFHV (VSDFHG·DGUHVVDJH Registres Etat Divers caractéristiques
‡ Pointeurs sur segments de (élu,
instructions exécutables la valeur des différents registres du processeur (qui PC ‡ Process ID (PID)
ODSOXSDUWGXWHPSVYDFDUDFWpULVHUO·LQVWUXFWLRQVXLYDQWHH[pFXWDEOH OD code, de données et de pile prêt, ‡ Group ID (GID)
valeur du compteur ordinal (qui détermina la position atteinte dans FFFF bloqué)
pile SP ‡ Parent process ID (PPID)
O·H[pFXWLRQGXSURJUDPPH OHVYDOHXUVGHVGLIIpUHQWHVYDULDEOHVGDQVOD ‡ Priorité
mémoire. Drapeaux ‡ Date de lancement
… Un même programme peut être lancé plusieurs fois par le même .
données . ‡ Temps UC utilisé
utilisateur ou par des utilisateurs différents. . ‡ Répertoire courant
… /HUpVXOWDWGHFKDFXQGHFHVODQFHPHQWVOHWHPSVG·H[pFXWLRQOHFRQWHQX code ‡ Fichiers ouverts
GHODPpPRLUHORUVGHO·H[pFXWLRQSDUIRLVPrPHODTXDQWLWpGHPpPRLUH 0000
‡ «
occupée par les données seront pratiquement toujours différents. C'est
PrPHFHTXLIDLWIRQGDPHQWDOHPHQWODSXLVVDQFHGHO·LQIRUPDWLTXHSDU Tous les processus sont recensés dans une table de processus, où une entrée
opposition aux automatismes. Il y aura bien un programme et plusieurs décrit un processus.
processus.
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

LES PROCESSUS LES PROCESSUS


51 52
… Certains processus n'appartiennent pas à un utilisateur en
particulier. Ils sont nécessaire au fonctionnement du système dans
… 'DQVXQV\VWqPHG·H[SORLWDWLRQWUDGLWLRQQHORQ
son ensemble , ou bien à une partie du système. C'est le cas par YHUUDTX·XQSURFHVVXVHVWFDUDFWpULVpSDUXQIOX[GH
exemple des très nombreux processus tournant en arrière plan FRQWU{OHXQLTXHHWXQHVSDFHG·DGUHVVDJHXQLTXH
sous Unix (démons), et permettant de gérer l'imprimante, le Sauf opération particulière (mémoire partagée ou
réseau, la mémoire, l'écran, etc.. On parlera dans ce cas de fichiers mappés en mémoire), plusieurs processus ne
processus systèmes, par opposition aux processus utilisateurs, partagent jamais le même espace mémoire.
appartenant à un utilisateur particulier.
… Ce cas de figure peut être un désavantage dans
… Dans un système Unix, la commande ps permet de visualiser les
certaines circonstances. C'est pour cette raison
processus en cours d'exécution. Sous Windows 9x, la séquence de
touches ctrl-alt-del permet de voir la liste des processus en cours. qu'ont émergé ces dernières années les processus
Sous Windows NT, plusieurs outils permettent cette même légers (lightweight process) nommés communément
visualisation, sous différentes formes et avec plus ou moins de threads
GpWDLOVOHJHVWLRQQDLUHGHWkFKHVODOLVWHGHVVHUYLFHV«
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
LES PROCESSUS Création de processus
53 54

… Les threads permettent GLIIpUHQWVIORWVG·H[pFXWLRQDXVHLQG·XQPrPH Exemple VRXV81,;O·LQWHUSUpWHXUGHFRPPDQGHV shell) est un


processus, avec une marge importante d.indépendance les uns par processus qui :
rapport aux autres. Ils partagent, contrairement aux processus, un
PrPHHVSDFHG·DGUHVVDJHOHVILFKLHUVRXYHUWVHWG·DXWUHV ‡ saisit une commande au clavier
ressources. Ils peuvent également interagir plus facilement les uns vis
à vis des autres. Enfin, et c.est souvent ce qui justifie grandement leur ‡ crée un processus fils en lui indiquant quel programme
H[LVWHQFHOHXUVFUpDWLRQSDUOHV\VWqPHG·H[SORLWDWLRQHVW exécuter pour réaliser la commande (sous Unix, fork est le
généralement plus rapide que celle de processus, dans la mesure ou seul appel système de création de processus)
LOQ·\DSDVGHFRSLHGHPpPRLUHjUpDOLVHU/HVWKUHDGVVRQWDLQVL
bien adaptés à des processus client/serveur, le serveur étant alors ‡ Attend que le processus fils se termine (si le processus fils est
LPSOpPHQWpVRXVIRUPHG·XQWKUHDGSDUWLFXOLHU GLVSDWFKHU FKDUJp en avant plan) ou continue la saisie (si le processus fils est en
de mettre en activité un pool de threads serveurs (workers).
arrière plan)
… /HVFRQFHSWVOLpVjO·H[LVWHQFHGHVWKUHDGVVRQWUHODWLYHPHQW
similaires à ceux des processus, avec quelques complications /DFUpDWLRQG·XQSURFHVVXVSHXWDXVVLVHIDLUHjSDUWLUG·XQ
supplémentaires dues à la coexistence des threads à l'intérieur du programme.
processus. Nous reviendrons plus tard sur le sujet.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Hiérarchie de processus (sous UNIX)


Terminaison de processus
55 56

8QSURFHVVXVSHXWVHWHUPLQHUVXLWHjO·XQGHVpYpQHPHQWV Si le processus A crée le processus B, A est le parent de B, B est le fils de A. B peut


à son tour créer des processus. Un processus avec tous ses descendants forment un
‡ Sortie normale, lorsque le processus a terminé sa tâche (sous Unix groupe de processus représenté par un arbre de processus.
SDUO·DSSHOV\VWqPHexit)
Exemple : void main() void main()
‡ Sortie suite à une erreur (e.gGLYLVLRQSDULQH[LVWHQFHG·XQ {int i; {int i;
fork(); fork();
fichier passé en paramètre) i = i+1; i = i+1;
‡ 7XpSDUXQDXWUHSURFHVVXV VRXV8QL[SDUO·DSSHOV\VWqPHkill) void main() fork(); fork();
{int i; i = i-1;} i = i-1;}
fork(); Processus B Processus D
i = i+1;
fork();
A
void main()
i = i-1;} {int i;
fork(); B C
i = i+1;
Processus A
fork();
i = i-1;}
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux)
D
//Par: Dr TCHOUPE T. Maurice
Processus C
scheduling
time
Ordonnancement des processus sharing $OJRULWKPHVG·RUGRQQDQFHPHQW 
57 58

Dans un système multitâche plusieurs processus sont en cours simultanément,


1. Tourniquet (round robin) : chaque processus a un intervalle fixe de temps de
PDLVOHSURFHVVHXUQHSHXWjXQPRPHQWGRQQpH[pFXWHUTX·XQHLQVWUXFWLRQ
processeur (quantum). Le processeur est donné à un autre processus lorsque
G·XQSURJUDPPH jODIRLV/HSURFHVVHXUWUDYDLOOHGRQFHQtemps partagé.
‡ OHWHPSVSUpYXSRXUOHSURFHVVXVHQFRXUVV·HVWpFRXOp
/·ordonnanceur (scheduler HVWOHPRGXOHGX6(TXLV·RFFXSHGHVpOHFWLRQQHUOH
processus suivant à exécuter parmi ceux qui sont prêts. ‡ le processus courant se bloque (e.g. en attendant une saisie au clavier)

PC (unique) quantum Mise en oeuvre par une file G·DWWHQWH :


FFFF P1
File de processus prêts :
Programme C Processus C P6 P2 P1 P2 P3 P4 P5 P6
Programme B Processus B Après le quantum de P1 :
P5 P3 P2 P3 P4 P5 P6 P1
0000 Programme A Processus A
P4
temps
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

$OJRULWKPHVG·RUGRQQDQFHPHQW  $OJRULWKPHVG·RUGRQQDQFHPHQW 


59 60

2. Ordonnancement avec priorité : chaque processus a sa priorité et on lance le 1. Tourniquet avec priorité : les processus attendent dans plusieurs files selon
processus prêt dont la priorité est la plus élevée. La priorité du processus en OHXUVSULRULWpV/DILOHGHODSOXVJUDQGHSULRULWpHVWVHUYLHG·DERUG$
cours diminue au fur et mesure de son temps pris dans le processeur. Lorsque O·LQWpULHXUG·XQHILOHO·RUGRQQDQFHPHQWVHIDLWVHORQODPpWKRGHGHWRXUQLTXHW
FHWWHSULRULWpEDLVVHHQGHVVRXVGHFHOOHG·XQDXWUHSURFHVVXVHQDWWHQWHOH Processus prêts
Têtes de files
processus courant cède sa place dans le processeur. (Priorité la plus élevée)
Priorité 4
Priorité 3
Priorité 2
Priorité 1 (Priorité la plus basse)

2. /HSOXVFRXUWG·DERUG SRXUPLQLPLVHUOHWHPSVPR\HQG·H[pFXWLRQ

8 4 4 4 4 4 4 8

A B C D B C D A
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Temps moyen = (8+12+16+20)/4 = 14 Temps moyen = (4+8+12+20)/4 = 11
(WDWVG·XQSURFHVVXV (WDWVG·XQSURFHVVXV FDVG
81,;
61 62

ETATS … Plus précisément, dans le système UNIX, les différents états d'un processus
peuvent être caractérisés comme suit :
Elu (running) = en cours
… Le processus est prêt en mémoire. Il ne s'exécute pas, mais il est
G·H[pFXWLRQ TRANSITIONS
chargé en mémoire et est prêt à s'exécuter dès que le noyau l'élira
Prêt (ready, runnable) = Elu 1 = le processus se comme processus actif.
2 bloque en attente
suspendu … Le processus s'exécute en « mode noyau », c'est à dire qu'il fait appel
temporairement pour G·pYpQHPHQW à une fonction du noyau du système (read, write, fork, exec, .) .
3
SHUPHWWUHO·H[pFXWLRQ 1 2 O·RUGRQQDQFHXU … Le processus s'exécute en « mode utilisateur », c'est à dire qu'il réalise

G·XQDXWUHSURFHVVXV
Prêt choisit un autre des calculs d'une fonction de bibliothèque (+, -, strcpy, .) .
processus … Le processus est « préempté », c'est à dire que le noyau a effectué un
Bloqué (blocked) = changement de contexte pour élire (« donner la main à ») un autre
attendant un événement 3 O·RUGRQQDQFHXU processus.
extérieur, e.g. appui Bloqué 4 choisit ce processus … Le processus est « zombie ». Il a provoqué un appel à une instruction
G·XQHWRXFKHDXFODYLHU 4 O·pYpQHPHQW de terminaison (exit), et n'aura donc plus besoin du CPU, mais son père
pour pouvoir continuer attendu survient n'a pas encore pris connaissance de ses codes de retour et de ses
statistiques d'exécution. Cet état est typique des processus UNIX. Il est
normalement très transitoire. C.est un état terminal.
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

(WDWVG·XQSURFHVVXV FDVG
81,; (WDWVG·XQSURFHVVXV FDVG
81,;
63 64

… Le processus est endormi en mémoire. Il a provoqué une


instruction de mise en sommeil volontaire (sleep). Il n'a pas
besoin d'être élu par l'ordonnanceur.
… Il existe ensuite un certain nombre d'états qui sont liés à la
gestion de la mémoire principale et de la mémoire
secondaire . Il existe un processus du noyau ( le swapper ),
qui se charge de « faire de la place » en mémoire vive
(mémoire principale), en utilisant le disque comme zone
de stockage temporaire (mémoire secondaire).
… Le processus est prêt à s'exécuter, mais le swapper l'a
transféré sur disque. Il devra de nouveau être ramené
en mémoire avant de pouvoir continuer son exécution.
… Idem si il était préalablement endormi ou préempté .

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Communication inter-processus
65 66

Souvent différents processus ne sont pas totalement indépendants : ils doivent


échanger des informations.
Exemple SURFHVVXV$HVWGpGLpjODJHVWLRQG·XQHLPSULPDQWHSURFHVVXV%
GpVLUHLPSULPHUXQGRFXPHQW%GRLWFRPPXQLTXHUj$OHQRPHWO·HPSODFHPHQW
GXILFKLHUTX·LOYHXWLPSULPHU
Il existe deux méthodes classiques de communication inter-processus : des
variables partagées (shared variables HWO·échange de messages (message
Communication entre processus passing).
Exemple de variables partagées : plusieurs processus veulent imprimer leurs
résultats sur une imprimante commune. Les noms des fichiers à imprimer sont
placés dans un tableau spécial fonctionnant comme une file : les variables
partagées début et fin indiquent le premier et le dernier fichier dans la file.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Variables partagées &RQIOLWVG·DFFès aux variables partagées (1/2)


67 68
Supposons que processus B veut imprimer un fichier (nommé F_b). Le nom du fichier Exemple : Deux processus B et C veulent placer au même moment leurs fichiers (F_b
est placé dans un tableau spécial fonctionnant comme une file : les variables et F_c GDQVODILOHG·LPSUHVVLRQ/·RUGRQQDQFHPHQWGHFHVSURFHVVXVHVWWHOTXH
partagées tête et queue LQGLTXHQWOHSUHPLHUILFKLHUGDQVODILOHHWO·HQGURLW OHXUVLQVWUXFWLRQVV·H[pFXWHQWDOWHUQDWLYHPHQW,E,F,E,F,E,F
5 6 7 8 9
G·LQVHUWLRQG·XQQRXYHDXILFKLHU Processus B : qb 9 après
Fich.c TP17.c CV.doc Test.ps
I1b
après I1

5 6 7 8 9 <qb m queue>
Fich.c TP17.c CV.doc Test.ps tête queue
//I1b
Processus B : <charger fichier qb 9 5 6 7 8 9
tête queue après
Fich.c TP17.c CV.doc Test.ps
<qb m queue> //I1 F_b dans [queue]> //I2b
qc 9 I1c
<charger fichier 5 6 7 8 9 <queuem qb+1> //I3b
après I2

tête queue
F_b dans [qb]> //I2 Fich.c TP17.c CV.doc Test.ps F_b
Processus C : qb 9 5 6 7 8 9
<queuem qb+1> //I3 après
tête queue Fich.c TP17.c CV.doc Test.ps F_b
<qc m queue> //I1c qc 9 I2b
5 6 7 8 9 <charger fichier tête queue
après I3

Fich.c TP17.c CV.doc Test.ps F_b F_c dans [queue]> //I2c qb 9 5 6 7 8 9


<queuem qc+1> //I3c Fich.c TP17.c CV.doc Test.ps F_c après
Support : Système d'exploitation (Linux) tête //Par: Dr TCHOUPE T. queue
Maurice qc
Support : Système d'exploitation (Linux) 9 //Par: Dr TCHOUPE T. Maurice I2c
tête queue
&RQIOLWVG·DFFès aux variables partagées (2/2) Echange de messages
Processus B : qb 9 5 6 7 8 9
69<qb m queue> Fich.c TP17.c CV.doc Test.ps F_c
après 70
qc 9 I3b Les mécanismes de communication par variables partagées conviennent bien à
//I1b
tête queue des processus qui tournent sur le même processeur ou sur plusieurs processeurs
<charger fichier possédant une mémoire commune.
F_b dans [queue]> //I2b qb 9 5 6 7 8 9
<queuem qb+1> //I3b après Pour les systèmes distribués, i.e. constitués de plusieurs processeurs ayant chacun
Fich.c TP17.c CV.doc Test.ps F_c
qc 9 I3c leur propre mémoire et reliés par un réseau local, la communication inter-
Processus C : tête queue processus peut se faire par échange de message :
<qc m queue> //I1c Problème : Le fichier F_b ne sera jamais imprimé, ‡ Un processus peut envoyer un message par réseau à un destinateur précis :
<charger fichier car il a été écrasé par F_c. send(destination, message)
F_c dans [queue]> //I2c Source du problème : la variable partagée queue ‡ 8QDXWUHSURFHVVXVSHXW´FRQVRPPHUµXQPHVVDJHSDU
<queuem qc+1> //I3c est lue est modifiée par deux processus à la fois.
receive(source, message)
/HVFRQIOLWVG·DFFqVFRQFXUUHQWVDX[YDULDEOHVSDUWDJpHVRQWSOXVLHXUVVROXWLRQV ‡ Les problèmes qui se posent :
possibles (sémaphores, PRQLWHXUV«). ² Perte de message lors du passage par réseau - QpFHVVLWpG·DFTXLWWHPHQW
/·LGpHFRPPXQHGHFHVVROXWLRQVHVWO·exclusion mutuelle : une variable partagée ne ² 3HUWHG·DFTXLWWHPHQW- QpFHVVLWpGHUHWUDQVPLVVLRQG·XQPHVVDJH
GRLWSDVrWUHOXHQLPRGLILpHSDUSOXVG·XQSURFHVVXVjODIRLV6LG·DXWUHVSURFHVVXV ² 5HFRQQDLVVDQFHG·XQPHVVDJHHQYR\pIRLV jFDXVHGHSHUWH
veulent y accéder ils doiventSupport
attendre que le premier processus ait fini.
: Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice G·DFTXLWWHPHQW
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
² Authentification des processus envoyant et recevant le message, etc.

Principes de la memoire virtuelle


71 72

… Les différents problèmes a résoudre


Avant de considérer le modèle théorique général de la mémoire
virtuelle, puis les manières de le mettre en pratique, voyons les
différents problèmes qu'elle doit résoudre.
† La relocation
„ Un programme contient un certain nombre de références a des variables,
fonctions ou zones du code. Ces références sont parfois en relatif, mais
souvent en absolu. Dans le cadre de la multiprogrammation, si le programme
Gestion de la mémoire est chargé a un endroit différent de la mémoire, ces références absolues ne
sont plus valables.
„ Il existe plusieurs solutions pour résoudre ce problème, une consiste a faire de
la relocation dynamique au demarrage du programme : chaque adresse se
voit réécrite suivant l'endroit exact ou le programme a été chargé.
„ Il est aussi possible, avec un coût non négligeable, de faire de la relocation
dynamique lors de chaque accès.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Principes de la memoire virtuelle Principes de la mémoire virtuelle
73 74

… Les différents problèmes a résoudre … Les différents problèmes a résoudre


† Le swap † La mémoire partagée
„ Le quatrième problème a adresser est celui de la mémoire
„ Le deuxième problème a adresser est la possibilité de mettre sur partagée, que l'on a évoqué ci-dessus . Afin d'avoir de la
le disque dur un certain nombre de zones mémoires, lorsque la communication rapide entre deux processus, il est nécessaire de
mémoire centrale est pleine. Cette fonctionnalité est indispensable prévoir un mécanisme pour avoir de la mémoire partagée, sans
pour autant détruire la protection mémoire.
dans les systèmes d'exploitation généralistes, même si elle peut
être inutile dans des cas précis. † Les fichiers mmapés
„ Le dernier problème, moins critique, est de fournir aux
† La protection mémoire programmes la capacité de projeter un chier en memoire, et de
„ Le troisième problème est celui de la protection mémoire, il doit l'utiliser directement comme s'il s'agissait de données en mémoire.
Ce mécanisme, nommé "mmap" permet a un programme d'avoir la
être nécessaire de faire en sorte qu'un processus ni puis pas lire, flexibilité et la rapidité de données en mémoire, tout en ayant la
en encore moins écrire, dans la mémoire d'une autre application persistance.
ou du système lui-même.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Principes de la mémoire virtuelle Principes de la mémoire virtuelle


75 76

… Quelques points de théorie … Quelques points de théorie


† La hiérarchie des mémoires
„ Tout d'abord, un petit rappel sur l'architecture du matériel. Dans † La ou le système d'exploitation intervient a plein est sur
un monde parfait, la mémoire est rapide d'accès, disponible en la gestion de la mémoire centrale, c'est en effet a lui
grande quantité, ne coûte pas cher, et est rendue persistante a
volonté. Hélas, un tel monde n'existe pas. qu'incombe (en général) de décider ce qui
„ Dans la réalité, la mémoire est soit rapide et très chère, soit bon
marche mais très lente. Et la mémoire rapide n'est jamais
persistante.
doit être gardé en mémoire et ce qui doit
„ Afin d'obtenir des performances correctes sur un ordinateur, nous être uniquement sur le disque dur.
sommes donc obliges d'utiliser toute une série de mémoires,
certaines très rapides mais en quantité très faible, d'autres lentes
mais en quantité très élevée.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Principes de la mémoire virtuelle Principes de la mémoire virtuelle
77 78
… Quelques points de théorie
† La notion de backing store
… Quelques points de théorie
„ Il est bien important de comprendre que pour tout système de gestion de la mémoire suffisamment
évolué, les notion de swap et de cache disque sont fusionnées. Les deux consistent a utiliser la
† La MMU
mémoire comme un cache pour le disque : „ Pour les solutions que nous allons voir par la suite (segmentation et
„ dans le premier cas, on peut libérer de la mémoire en l'écrivant sur le disque,
„ dans le second cas, on peut utiliser la mémoire disponible pour éviter des accès disques par la suite. pagination), il est nécessaire d'obtenir de l'aide du matériel. En
„ Il existe bien sûr quelques différences, par exemple, une modification sur un chier doit être écrite effet, effectuer des traitements logiciels sur chaque accès mémoire
sur le disque tôt ou tard pour éviter une perte de données en cas de redémarrage ou coupure de
courant, tandis qu'une zone de données d'un programme n'a jamais besoin d'être écrite. Mais sur le serait bien trop coûteux en temps, et difficile a réaliser (puisque le
fond, les deux peuvent en effet être gérés de manière unifiée. logiciel a besoin lui-même d'accéder a la mémoire).
„ Tout ceci se réduit a la notion de backing store. La mémoire n'est cache pour le disque dur. Chaque
zone mémoire, dépendant de son utilisation (bibliothèque partagée, exécutable, données, cache „ Il existe donc une entité matérielle spéciale nommée Memory
disque) est associée a un backing store qui est la zone du disque qui permet de la stocker si
nécessaire. Management Unit ou MMU en abrégé, qui se situe théoriquement
„ Il peut arriver qu'une zone mémoire soit plus grande que son backing store (par exemple une entre le CPU et la mémoire.
machine équipée de 2Go de mémoire mais dont le swap a été limite a 1Go), le système doit être
capable de gérer ces cas, mais ils ne modifient pas le modèle théorique. „ Cette unité effectue une traduction entre l'adresse virtuelle
„ Enfin il est a noter que l'utilisation d'une partition brute comme backing store est souvent bien plus
efficace que l'utilisation d'un chier (avec tous les soucis de fragmentation, . . .associes). Mais bien
demandee par la CPU et l'adresse physique comprise par le
sûr, ce n'est souvent pas possible (en pratique, seul le swap est sur une partition externe). matériel.
„ En pratique, la MMU est quasiment toujours intégrée au CPU et
accède directement aux registres du CPU, par exemple.
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Principes de la mémoire virtuelle Principes de la mémoire virtuelle


79 80

… La segmentation … La pagination
† Principes de la pagination
† Principes de la segmentation „ La pagination vise a régler les principaux problèmes de la segmentation.
„ Segmentation simple „ Son principe est de diviser la mémoire en zones de taille fixe (de 2Ko a
16Ko en général, 4Ko étant le plus fréquent), appelées page.
„ La segmentation simple, comme celle utilisée dans le mode réel des „ La mémoire physique elle est découpée en cadres de pages (page frames en
processeurs x86, consiste a spécifier, pour tout accès mémoire, un anglais), de la même taille.
registre de segment. Ce registre contient une valeur qui détermine a „ Pour chaque page, une table indique son cadre de page correspondant, ainsi
partir d'ou l'adresse mémoire est spécifiée. que des informations sur son état.
„ En quelque sorte, une page est un segment de taille fixe et réduite. Mais la
„ Par exemple, si on indique un segment commençant a l'adresse différence principale est que les pages sont transparentes pour le
physique 0x1000, et qu'on demande l'adresse 0x42, on utilisera en programme, qui lui-même voit sa mémoire de manière continue.
réalité l'adresse 0x1042. L'adresse spécifiée en complément du „ Le matériel et le système d'exploitation gèrent cette pagination de manière
segment est souvent appelée offset. transparente.
„ Le registre de segment à utiliser est parfois déterminé „ Par exemple, avec des pages de 4096 octets, l'adresse mémoire 4196
correspond a 100 octets a l'intérieur de la page numéro 1 (en informatique,
automatiquement, en effet, le x86 possède un registre spécifique a la numérotation commence toujours a 0, ou presque). Si la table de
la pile et un autre spécifique au code (la ou sont chargées les correspondance indique qu'elle se trouve dans le cadre numéro 2, l'adresse
instructions). physique sera donc 8192 (début du cadre numéro 2) + 100, soit 8292.
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell
81 82

… Le nom de shell GpVLJQHO·LQWHUSUpWHXUGHFRPPDQGHVGXV\VWqPH


UNIX.
… Le shell est à la fois un langage de programmation et un interpréteur
de commande.
Le SHELL et la programmation en SHELL: … Le shell, lancé automatiquement dès le login interactif sur le système
LE LANGAGE DE COMMANDE 8QL[UpDOLVHO·LQWHUIDFH HQPRGHWH[WH HQWUHO·XWLOLVDWHXUHWOHV\VWqPH
UNIX. Les programmes shell sont donc interprétés par celui-ci.
… Comme le shell HQWRXUHYLUWXHOOHPHQWO·HQVHPEOHGHVFRPPDQGHVOHV
demandes faites par le programme se traduisent souvent par un
DSSHOjXQHFRPPDQGHHWRQGLWTX·LOLQWHUSUqWHXQODQJDJHGH
commande.
… Par la suite, on confondra par abus de langage, les termes «
interpréteur de langage de commande » et « langage de commande
».

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell Scripts Shell


83 84

… Les commandes exécutées par le shell peuvent … Les interpréteurs de commandes sous UNIX
provenir soit: † 6RXV81,;O·LQWHUSUpWHXUGHFRPPDQGHQ·HVWSDVXQLTXH
† du terminal (mode interactif), O·XWLOLVDWHXUjVDFRQYHQDQFHSHXWFKRLVLUSDUPLSOXVLHXUV
† VRLWG·XQILFKLHU PRGHEDWFK 2QSHXWHQHIIHWFUpHU „ (Bourne-shell ou sh : en standard, le plus ancien historiquement,
des fichiers de commandes ce qui permet en quelque „ Korn-shell (ksh : conçu comme une extension du Bourne-shell),
sorte aux utilisateurs de fabriquer leurs propres „ C-shell (csh : dont la syntaxe est proche de celle du langage C),
commandes. Ces commandes possèdent les mêmes „ Bourne Again Shell (bash : le plus répandu sous Linux),
prérogatives que les commandes définies dans les „ ...
répertoires /bin et /usr/bin. De cette manière, il est † Les programmes conçus pour sh peuvent, à quelques détails
possible à un utilisateur de se façonner un près, être interprétés par les autres shells.
environnement sur mesure.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell Scripts Shell
85 86

… &RPPHQWODQFHUO·H[pFXWLRQG·XQSURJUDPPHschell … &RPPHQWODQFHUO·H[pFXWLRQG·XQSURJUDPPHschell
† Un programme shell (batch) est contenu dans un fichier. † Ces deux dernières manières de procéder ont pour
inconvénient de créer un nouveau processus descendant du
† Pour le lancer, on peut utiliser trois méthodes :
processus SHELL courant G·RODFRPPDQGHHVWODQFpHHWTXL
„ rendre le fichier exécutable par chmod +x fich. Puis il ne dans certain cas peut être gênant.
UHVWHSOXVTX·jWDSHUfich [paramètres] FKDTXHIRLVTX·RQ
† généralement, on aimerait que le fichier de commande soit
veut le lancer. Le shell constatera que ce fichier contient des
commandes et les interprétera. interprété dans le même processus que celui du shell pour
„ sh [-options] fich [paramètres]
FHODRQUHGLULJHPRPHQWDQpPHQWO·HQWUpHVWDQGDUGGXshell
Cette commande permet de forcer l'exécution du fichier ded
interactif courant au moyen de la commande
commandes en créant un nouveau processus shell (prenant ses . <reference fichier commande>
données dans le fichier de commandes)
† ainsi la commande $ . com1 exécute le script com1.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: lexique Scripts Shell: lexique


87 88

… Le shell interprète des instructions séparées par des séparateurs. Les … Dans une phrase, les séparateurs sont le blanc et la
instructions étant de sortes très différentes, nous utiliserons le
vocabulaire suivant : tabulation, leur nombre étant quelconque.
† une commande est une instruction analogue à un appel de sous-
programme dont le code est exécutable par la machine. … Les mots du langage sont constitués avec les caractères
„ Par exemple cp et rm, sont des commandes. lettres, chiffres et souligné. Ils commencent par une
† une commande interne est une instruction analogue à un appel de sous-
programme interne au shell. Son action est réalisée par le shell lui- lettre ou un souligné. On peut utiliser des caractères
même. spéciaux à condition de les invalider.
„ Par exemple exit est une commande interne au shell.
† une instruction est une commande interne qui est une structure de … Les mots désignent les variables, les symboles du
contrôle if, while, for, sont des instructions du shell.
langage et les noms des fichiers. On pourra placer des
† une phrase, ou une ligne de commande, est une composition
syntaxiquement correcte de commandes, commandes internes et FRPPHQWDLUHVjFRQGLWLRQGHOHVIDLUHSUpFpGHUG·XQ
instructions que sait interpréter le shell.
† Les séparateurs de phrases sont le retour chariot (rc) et le ;
dièse (#) et de les terminer par un (rc).

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: caractères génériques Scripts Shell: caractères génériques
89 90

… Les caractères génériques portent aussi le nom de caractères jokers. … Lorsque le shell LQWHUSUqWHOHVFDUDFWqUHVJpQpULTXHVLOQHOHVUHPSODFHSDVV·LOQH
,OVVHUYHQWjUHPSODFHUXQFDUDFWqUHTXHOFRQTXHRXQ·LPSRUWHTXHOOH trouve aucun nom de fichier à mettre en correspondance. Par exemple:
FKDvQHPrPHYLGH FRPPHOHVMRNHUVUHPSODFHQWQ·LPSRUWHTXHOOH † rm * supprime tous les fichiers du répertoire courant ainsi que tous les sous-répertoires
vides.
carte). † ls -l t*.c liste tous les fichiers du répertoire courant commençant par t et se terminant par
… Lorsque le shell rencontre un mot comportant un caractère joker, il .c.
tente de remplacer ce caractère par toutes les solutions possibles. † ls -l *.? liste tous les fichiers du répertoire courant se terminant par . VXLYLG·XQVHXO
caractère.
On obtient ainsi plusieurs combinaisons contenant le mot. Ces
† cp [a-e]*.* .. copie tous les fichiers du répertoire courant commençant par une des cinq
caractères sont le SRLQWG·LQWHUURJDWLRQ, O·pWRLOH et les crochets. SUHPLqUHVOHWWUHVGHO·DOSKDEHWHWFRQWHQDQWDXPRLQVXQSRLQWGDQVOHXUQRPPrPHHQ
† ? remplace un caractère quelconque sauf le retour cariot (rc). dernière position. La copie se fait dans le répertoire père.
† * UHPSODFHQ·LPSRUWHTXHOOHFKDvQHGHFDUDFWqUHVPrPHYLGHQH † La commande ls -l ??? vous donnera les contenus de tous les répertoires écrits avec
seulement 3 lettres.
comportant pas de (rc).
† La commande ls -l ??e* liste le contenu des répertoires commençant par 2 lettres
† [ ] remplace un caractère: TXHOFRQTXHVVXLYLHVG·XQHHWGHQ·LPSRUWHTXRL\FRPSULVXQEODQF
„ parmi ceux énumérés entre les crochets ou † La commande ls -l [A-Z,a-e]* liste le contenu des répertoires commençant par une lettre
„ un caractère parmi ceux qui ne sont pas énumérés si la liste commence par un majuscule ou par une minuscule comprise entre a et e. On aurait aussi pu écrire : ls -l [A-
e]* .
SRLQWG·H[FODPDWLRQ

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: Caractères spéciaux Scripts Shell:Variables et paramètres


91 92

… Le caractère de continuation \ placé en fin de ligne … Les variables sont désignées par des mots : elles ne
LQGLTXHTXHODSKUDVHHQFRXUVQ·HVWSDVWHUPLQpHHW se déclarent pas.
TX·HOOHVHSRXUVXLWVXUODOLJQHVXLYDQWH/H rc) est
ainsi transformé en espace. … ,OQ·H[LVWHDXFXQHQRWLRQGHW\SH
… Les caractères spéciaux ont une signification dans le … Par convention, les variables sont écrites en lettres
ODQJDJHjPRLQVTX·LOVQHVRLHQWLQYDOLGpV majuscules.
… Un caractère spécial devient un caractère normal … /HVSDUDPqWUHVGpVLJQHQWO·HQVHPEOHGHVFKDvQHVGH
V·LOHVWSUpFpGpGXFDUDFWqUH\ RXV·LOHVWVLWXpGDQV FDUDFWqUHVTXHO·RQpFULWjODVXLWHGXQRPG·XQ
un parenthésage particulier. fichier shell lors de son exécution.
… Les caractères spéciaux sont: _! ·¶^`\

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: Variables Utilisateurs Scripts Shell
93 94

… /·LQLWLDOLVDWLRQG·XQHYDULDEOHVHIDLWSDUXQHDIIHFWDWLRQ … Traitement des quotes


UpDOLVpHSDUOHVLJQH  3DVG·HVSDFHGHFKDTXHF{WpGHO· † Les chaînes de caractères doivent être encadrées par des quotes (.).
= ). 7(036 ·,OIDXWEHDX·
$ echo $TEMPS
… /·XWLOLVDWLRQOHODYDULDEOHVHIDLWDYHFOHVLJQH$. Il fait beau
… La valeur affectée à la variable peut être une valeur $
QXPpULTXHXQHFKDvQHOHUpVXOWDWG·XQHFRPPDQGHXQHOLVWH … Traitement des accents graves
de commandes parenthèsées. † Toute commande entre accents graves sera exécutée et le résultat
$ HOME=/home/IUP2/etudiant #$==Invite de commande affecté à la variable.
$ echo $HOME $ EN_LIGNE=`who | cut ²f 1 ²d " "`
/home/Iogin_name
$ echo $EN_LIGNE
$
root
… 6LODYDULDEOHQ·DSDVpWpLQLWLDOLVpHRXVLHOOHFRPSRUWHXQH chiesa
HUUHXUG·pFULWXUHODFRPPDQGHUHQYRLHXQHFKDvQHYLGH6L lerest
O·RQRXEOLHOH$, echo HOME renvoie HOME $

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell Scripts Shell: Variables prédéfinies


95 96

… Paramètres … Il existe des variables prédéfinies. Parmi celles-ci :


† Les paramètres sont initialisés si on les tape à la suite du † # QRPEUHGHSDUDPqWUHVHIIHFWLIVG·XQHFRPPDQGH
nom du fichier. † ? FRGHGHUHWRXUG·XQHFRPPDQGH
† $ numéro du processus shell en cours
† Ils portent les numéros de 1 à 9 précédés du $.
† ! numéro du dernier processus lancé en arrière-plan
„ $1 est une expression dont la valeur est celle du premier
paramètre effectif placé après une commande simple. † HOME nom du répertoire personnel
„ $2, pour le deuxième, . et
† PATH règle de recherche des commandes
„ $9 pour le neuvième.
† PS1 invite primaire du shell (par défaut $)
† PS2 invite secondaire du shell (par défaut >)
„ $0 existe et désigne la commande elle-même.
† Notons, tout de suite, que cette technique ne limite pas le
nombre de paramètres à 9, comme nous le verrons par la … On peut détruire une variable par la commande interne
suite. unset, sauf les variables PATH, PS1 et PS2.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: Expansion des variables Scripts Shell: Expansion des variables
97 98

… /DVXEVWLWXWLRQGHYDOHXUG·XQHYDULDEOHRXG·XQ … Exemples
† 1) ESSAI=${VAR:-mot} 9$5Q·pWDQWSDVLQLWLDOLVpH(66$,HVWLQLWLDOLVpSDUPRW
SDUDPqWUHSHUPHWG·pYDOXHUFRQGLWLRQQHOOHPHQWOD pTXLYDOHQWj(66$, PRW  9$5Q·H[LVWHSDV 
valeur de la variable ou du paramètre. Ce mécanisme † VAR=init
sert à donner des "valeurs par défaut" à des variables † ESSAI=${VAR:-mot} VAR étant initialisée par init, ESSAI est initialisé par $VAR
(équivalent à ESSAI=$VAR).
dont on ne sait pas si elles sont initialisées. Ainsi : † 2) ESSAI=${VAR:=mot} 9$5Q·pWDQWSDVLQLWLDOLVpH9$5HVWLQLWLDOLVpHSDUPRWHW
ESSAI devient équivalent à $VAR (équivalent à VAR=mot, ESSAI=$VAR, donc
† ${VAR:-mot} délivre $VAR si la variable VAR est initialisée, ESSAI=mot)
sinon initialise avec mot. † VAR=init
† ${VAR:=mot} assigne mot à VAR VLODYDULDEOHQ·HVWSDV † ESSAI=${VAR:=mot} VAR étant initialisée par init, ESSAI devient équivalent à
$VAR (équivalent à ESSAI=$VAR)
initialisée, puis évalue $VAR. † 3) ESSAI=${VAR:?mot} 9$5Q·pWDQWSDVLQLWLDOLVpHDIILFKH9$5HWPRWSXLV
† ${VAR:?mot} délivre $VAR si la variable est initialisée, sinon arrête le processus shell en cours.
affiche le nom de la variable suivi de :, puis mot, et termine † VAR=init
† ESSAI=${VAR:?mot} VAR étant initialisée par init, ESSAI devient équivalent à
le processus shell en cours. $VAR (équivalent à ESSAI=$VAR) et le processus shell se continue.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: Portée et environnement Scripts Shell: Portée et environnement


99 100

… /DSRUWpHG·XQHYDULDEOHHVWOHSURFHVVXVTXLO·DFUppH … Il est possible (en bash) de créer des variables


… Pour être visible dans les autres processus shell qui locales aux fonctions qui les utilisent. Par exemple :
seront créés par la suite, une variable doit être #!/bin/bash
exportée par la commande interne export : elle est HELLO=Hello
DORUVSODFpHGDQVO·HQYLURQQHPHQWGXSURFHVVXV
environnement dont hériteront ses fils. function hello {
local HELLO=World
… On lance export PATH pour exporter les chemins de
recherche de nos commandes (réalisé dans .profile). echo $HELLO
}
… /DOLVWHGHVYDULDEOHVH[SRUWpHVGDQVO·HQYLURQQHPHQW
est obtenue par la commande env. echo $HELLO
… La liste de toutes les variables est obtenue par la hello
commande set. echo $HELLO

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: expressions, lecture et Scripts Shell: expressions, lecture et
101
affichage 102
affichage
… /HFDOFXOG·H[SUHVVLRQVXUGHVYDULDEOHVHVW … Les comparaisons arithmétiques :
supporté par le shell sous certaines contraintes. $ A=3 † lt (<), gt (>), le (<=), ge (>=), eq (==), ne ( !=).
$ B=2
† 7RXWG·DERUGOHVRSpUDWHXUVDULWKPpWLTXHVVRQWHQ $ Echo 1+3 … Les comparaisons de chaînes sont facilement compréhensibles,
nombre réduit : +-*/ et % (le reste). $ 1+3 simplement il faut veiller à ne pas confondre avec des comparaisons
† Ensuite, les calculs sont réalisés en nombre entiers $ echo $[1+3] arithmétiques :
seulement. $4 † s1=s2 , s1>s2, s1<s2, -n s1 (« s1 nest pas vide »), -z s1 (« s1 est vide »).
† Enfin, il faut utiliser le [ ] SRXUUpDOLVHUO·pYDOXDWLRQ $ echo $[A+B] … Les comparaisons sur les fichiers :
Par exemple : $5 † -r f (« f existe et a le droit de lecture r »),
$ echo $[A/B] † -w f (« f existe et a le droit w »),
$1
$ echo $[A/B]|bc ²l
† -x f (« f existe et a le droit x »),
$ 1.5 † -f f (« f existe et est un fichier ordinaire »),
† -d r (« le répertoire r existe »),
La dernière ligne montre comment utiliser la commande calculateur bc pour se sortir de
O·LPSDVVHGHVQRPEUHVHQWLHUV † -u f (« f existe et a le bit set UID »),
† -VI ©IH[LVWHHWQ·HVWSDVGHORQJXHXUQXOOHª 
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: expressions, lecture et


Scripts Shell: boucles et conditionnelles
103
affichage 104

… Les lectures et les écritures sont réalisées par des commandes … Les mots-clés sont :
internes du shell. † if then else fi case esac for while
until do done select
† La commande interne read permet dinitialiser des variables en mode NUM=0
conversationnel et admet comme paramètre une ou plusieurs variables … Boucle for
for PARAM in $*
séparées par un séparateur de mots. for indice in liste
do
„ Elle initialise la première avec la première chaîne tapée, le séparateur au do
clavier étant aussi le blanc (ou le TAB). NUM=`expr $NUM + 1`
liste_de_commandes echo "paramètre $NUM = $PARAM"
„ Elle initialise la deuxième avec la deuxième chaîne, ... et elle initialise la done
dernière avec toutes les chaînes de fin de ligne. done
† La liste_de_commandes est for USER in `cat liste`
#!/bin/bash exécutée pour chaque valeur de
echo Please, enter your firstname and lastname do
O·LQGLFH XQHYDULDEOHQRQ elm $USER ²s " fichier message " < message
read FN LN déclarée) prise dans la suite de
echo "Hi! $LN, $FN !" mots indiquée dans liste après le done
† La commande echo permet dafficher la valeur dune variable et est in .
souvent une commande interne. Nous en avons déjà vu de nombreux
usages.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: boucles et conditionnelles Scripts Shell: boucles et conditionnelles
105 106

… Boucle while … boucle until


while liste_de_commandes_1 until liste_de_commandes_1
do NUM=0 do NUM=0
liste_de_commandes_2 while [ $1 ] #tant que $1 existe, [ ] commande liste_de_commandes_2 until [ $# -eq @MXVTX·jFHTXHOHQRPEUHG
test done #paramètres soit nul
done do do
† La liste_de_commandes_1 est
† La liste_de_commandes_1 est NUM=`expr $NUM + 1` NUM=`expr $NUM + 1`
echo "paramètre $NUM = $1"
exécutée. Dès que le code de echo "paramètre $NUM = $1"
exécutée. Si le code de retour retour de la dernière
shift #décale les paramètres shift #décale les paramètres
de la dernière commande de commande de
done done
liste_de_commandes_1 est 0 liste_de_commandes_1 est 0
(vrai), alors la (vrai), la liste_de_commande_2
liste_de_commandes_2 est Q·HVWSOXVH[pFXWpHHWODERXFOH
exécutée et la boucle continue. V·DUUrWH

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles Scripts Shell: boucles et conditionnelles


107 108

… Sélection if … Sélection if
if liste_de_commandes_1 … On peut imbriquer les structures if comme dans le cas suivant :
then if...
liste_de_commandes_2 then...
else if...
else then...
liste_de_commandes_3 else...
fi fi
† On teste le code de retour de la dernière commande de fi
liste_de_commandes_1 ; … On peut aussi écrire else if : elif (dans ce cas, un seul fi terminal)
† V·LOHVWpJDOjliste_de_commandes_2 est exécutée … La structure if suivante :
† VLQRQF·HVWliste_de_commandes_3 TXLO·HVW if commande_1
then
† /·H[LVWHQFHGHelse liste_de_commandes_3 Q·HVWSDVREOLJDWRLUH commande_2
† Le code de retour de la structure est 0 si liste_de_commandes_2 est fi
H[pFXWpHVLQRQF·HVWFHOXLGHODGHUQLqUHFRPPDQGHGH … SHXWV·pFULUHcommande_1 && commande_2
liste_de_commandes_3.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: boucles et conditionnelles Scripts Shell: boucles et conditionnelles
109 110
… Sélection case
… Sélection if: Exemple : case expression in
† ,QGLTXHUVLOHVILFKLHUVG·XQUpSHUWRLUHVRQWGHVILFKLHUV RUGLQDLUHVRXVSpFLDX[ RX cas_1)
liste_de_commandes_1 ;;
des sous-répertoires.
cas_2)
for FICH in * liste_de_commandes_2 ;;
do . ..
if [ -d $FICH ] # $FICH est-il un répertoire ? cas_n)
then liste_de_commandes_n ;;
esac
echo "répertoire : $FICH"
else … /·LQWHUSUpWHXUGHFRPPDQGHVFKHUFKHXQHpTXLYDOHQFHHQWUHODFKDvQHexpression
et un des cas_i HQVXLYDQWO·RUGUHGHOHXUGpILQLWLRQ6LXQHpTXLYDOHQFHHVWWURXYpH
echo "fichier : $FICH"
alors la liste_de_commandes associée est exécutée et la structure est terminée.
fi
… Comme le caractère * UHSUpVHQWHWRXWHFKDvQHGHFDUDFWqUHVRQO·XWLOLVHFRPPH
done cas par défaut. Si aucun cas ne convient, la structure case ne fait rien.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles Scripts Shell: les commandes


111 112

… Sélection case … Les commandes correspondent aux instructions du


… Exemple : Préciser si le paramètre est un chiffre, une lettre langage de programmation.
ou une suite de caractères.
NUM=0
… Une commande simple est une liste de mots séparés par
for PARAM in $* des espaces.
do † Le premier est le nom de la commande,
NUM=`expr $NUM + 1`
† les autres sont les options et les paramètres.
case $PARAM in
[0-9]) echo "le paramètre $NUM est un chiffre: $PARAM" ;; … Une commande délivre en retour une valeur appelée
[a-z]|[A-Z]) echo "le paramètre $NUM est une lettre: $PARAM" ;; code de retour.
*) echo "le paramètre $NUM contient plusieurs caractères: $PARAM";;
† Un code de retour nul indique une exécution sans erreur.
esac
done † Les valeurs positives et négatives ont des significations
propres à chaque commande.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: les commandes Scripts Shell: les commandes
113 114

… Les commandes peuvent être exécutées de différentes … Commandes internes


manières : † Une commande interne est une commande prédéfinie dans le shell pour
ODTXHOOHLOQ·H[LVWHSDVGHILFKLHUH[pFXWDEOHSRUWDQWVRQQRP
† exécution séquentielle : commandes séparées par un ; „ pwd imprime le répertoire courant
† exécution asynchrone : commande terminée par un & (même „ cd change de répertoire
priorité que ;) „ mkdir crée un répertoire
† exécution conditionnée : „ rmdir supprime un répertoire
„ commandes séparées par && : exécution de la partie droite
„ echo affiche ses arguments
conditionnée par un code de retour nul de ce qui précède „ read lit une entrée au clavier
(priorité supérieure à &) „ export « export » une variable (la rend visible au processus appelant)
„ break VRUWLUG·XQHERXFOH IRU 
„ commandes séparées par || : exécution de la suite conditionnée
„ continue FRQWLQXHUjO·LWpUDWLRQVXLYDQWHG·XQHERXFOH IRU 
par un code de retour non nul de ce qui précède (priorité
identique à &&) „ exit quitter le programme avec, en code de retour, celui de la dernière
commande exécutée (fin du shell en cours).
† On peut aussi les trouver sous forme de pipe | : „ return idem pour quitte
„ la sortie standard du processus situé à gauche est connectée par un
WXEHjO·HQWUpHVWDQGDUGGXSURFHVVXVVLWXpjGURLWH
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes Scripts Shell: les commandes


115 116

… Commandes internes … Commandes externes


„ . fichier exécuter les commandes du fichier sans créer un nouveau processus
„ : instruction vide du shell.
† Toutes les commandes peuvent être utilisées dans les scripts shell.
„ set list_args fournir les valeurs des paramètres effectifs correspondant aux Certaines commandes sont des grands classiques des scripts :
paramètres formels 1, 2, ... Permet ainsi de paramétrer les sous-programmes réalisés „ awk recherche d'expressions régulières et enchaînement d.action
par eval : il suffit pour cela que les commandes contenues dans la variable $VAR
soient paramétrées en faisant référence à $1, $2 ... si trouvées .
„ eval $VAR le contenu de la variable $VAR est considéré comme une liste de
commandes shell. Cela ressemble à un appel de sous-programme sans paramètre „ grep recherche d'expressions régulières et impression de la ligne
les contenant
„ shift les paramètres formels sont renommés: $2->$1 ; $3-!8WLOHORUVTX·XQH
commande a plus de 9 paramètres (exemple page 47). „ wc compte de mots
„ 2QDGpMjQRWpTXHOHVSDUDPqWUHVIRUPHOVG·XQHFRPPDQGHVRQWGpVLJQpVSDUGHV „ sort tri
chiffres et ce sont des paramètres de position : 0 représente le nom de la commande
SDUDPpWUpHOHSUHPLHUSDUDPqWUHOHGHX[LqPHHWDLQVLGHVXLWHMXVTX·j/D „ bc calculateur
notation $* est équivalente à "$1$2...", tandis que la notation $@ est équivalente à
"$1""$2".... On rappellera que $# renvoie le nombre de paramètres de la commande

„ test expr
„ [ expr ] test

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: les commandes Scripts Shell: les commandes
117 118

… PARENTHESAGES … SOUS-PROGRAMMES
… Les parenthésages servent à regrouper des séquences de mots ou à isoler des mots. … Procédure
Ils sont multiples et ont des significations spécifiques: † Un texte écrit en shell et stocké dans un fichier constitue une procédure shell.
† {...} regroupement de commandes, parenthésage ordinaire ; délimite aussi la portée de † Dans le texte, les paramètres formels ont pour noms 1, 2...9 et leurs valeurs sont désignées par
O·RSpUDWHXUGHSULVHGHYDOHXU$. $1,..., $9.
† (...) entoure une liste de commandes qui sont exécutées par un nouveau processus UNIX. † /·DFWLYDWLRQGHODSURFpGXUHSHXWVHIDLUHHQH[pFXWDQWODFRPPDQGHsh suivie du nom du fichier
† ·· (quotes) parenthésage GDQVOHTXHODXFXQFDUDFWqUHVDXI·Q·DGHVLJQLILFDWLRQVSpFLDOH DYHFFHUWDLQHVRSWLRQVVLO·RQYHXW RXHQUHQGDQWOHILFKLHUH[pFXWDEOHFHTXLIDEULTXHXQH
nouvelle commande appelée sous-programme shell.
† "..." (guillemets) parenthésage GDQVOHTXHODXFXQFDUDFWqUHVDXI¶HWQ·DGHVLJQLILFDWLRQ
spéciale. … Fonction
† ¶¶ (accents graves) exécution de la phrase placée entre les accents graves; délivre la sortie † Une fonction est un sous-programme local à un processus shell.
standard des commandes situées dans ce parenthésage/HVFDUDFWqUHVVSpFLDX[jO·LQWpULHXUGX † (OOHQ·HVWSDVH[pFXWpHSDUXQQRXYHDXSURFHVVXVshell HWQ·HVWSDVVWRFNpHVHXOHGDQVXQILFKLHU
parenthésage QHVRQWLQWHUSUpWpVTX·jO·H[pFXWLRQGHODSKUDVH
† (OOHVHGpFODUHXQSHXFRPPHHQ&GDQVOHSURJUDPPHTXLO·XWLOLVH
… Le rôle des parenthésages par · et " HVWG·pYLWHUXQHXWLOLVDWLRQIDVWLGLHXVHGX nom()
caractère \ quand il faut banaliser plusieurs caractères spéciaux dans une {
commande. Bien entendu, on ne peut pas banaliser le caractère quote dans un corps de la fonction
parenthésage quote, ni le caractère guillemet dans un parenthésage guillemet. }

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes Scripts Shell: les commandes


119 120
menu()
… SOUS-PROGRAMMES {
..
Remarques :
… /HVSDUHQWKqVHVQHVHUYHQWTX·jGLVWLQJXHUOHQRPG·XQHIRQFWLRQGXQRPG·XQH
} ‰On notera la différence entre les paramètres
variable. traitemement() passés au shell-script et ceux passés aux
Exemple: {
… fonctions. Le $1 (le nom du fichier à traiter) du
..
† /·H[HPSOHVXLYDQWUHSUHQGO·pFULWXUHG·XQSURJUDPPHshell utilisant 3 fonctions (menu, erreur et } programme n.est pas le $1 de erreur (le
traitement) appelées par un programme principal.(sélection if). Ce programme réclame un erreur() nombre de paramètres passés au programme).
paramètre, et seulement un, et celui-ci doit être obligatoirement un fichier ordinaire. Le { ‰Les variables créées dans des sous-
programme principal effectue ces vérifications, appelle menu et traitement si c.est correct if [ $1 -eq 1 ]
then
programmes ne sont pas purement locales à ces
sinon lance erreur qui affiche le message correspondant à l.erreur faite.
echo "Le fichier $2 n'existe pas" fonctions, elles sont reconnues dans tout le
else fichier shell. En revanche, non seulement, elles
echo "Donnez un seul paramètre, pas $1"
VRQWGpWUXLWHVjODILQGHO·H[pFXWLRQGXILFKLHU
fi
} shell mais encore, elles ne sont pas visibles dans
if [ -f $1 -a $# -eq 1 ] les processus engendrés. On peut les y rendre
then visibles par la commande interne export. Une
menu
traitement $1
IRQFWLRQQ·HVWSDVH[SRUWDEOH
else
erreur $# $1
Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support
fi : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell: exécution d'un script shell Scripts Shell: exécution d'un script shell
121 122

… Processus exécutant … Paramètres de la commande sh


† Après avoir effectué les éventuelles substitutions de paramètres, † /RUVTX·XQSURFHVVXVHVWFUppSDUODFRPPDQGHVKSOXVLHXUV
† le shell traite les redirections, RSWLRQVGpILQLVVDQWOHPRGHG·H[pFXWLRQSHXYHQWrWUHLQGLTXpHV
† puis examine le premier mot de la commande. Les plus utiles sont :
„ 6·LOHVWVXLYLG·XQVLJQH FHODVLJQLILHTXHF·HVWXQHDIIHFWDWLRQGH „ -YLPSULPHOHVOLJQHVWHOOHVTX·HOOHVVRQWOXHVSDUOHSURFHVVXV
variable. shell
„ 6·LOFRUUHVSRQGjXQHFRPPDQGHLQWHUQHjXQHFRPPDQGHVWUXFWXUpH „ -[LPSULPHOHVFRPPDQGHVWHOOHVTX·HOOHVVRQWH[pFXWpHVDSUqV
(for, if...) ou à une activation de fonction, la commande est exécutée les substitutions de paramètres.
dans le processus shell en cours.
„ (OOHVVRQWWUqVLQWpUHVVDQWHVSRXUGpWHFWHUG·pYHQWXHOOHVHUUHXUV
„ 'DQVOHFDVFRQWUDLUHLO\DFUpDWLRQG·XQQRXYHDXSURFHVVXVDXTXHO
est passée en paramètre la commande.
de syntaxe. On les utilise de la manière suivante : sh -v proc.
„ On peut aussi les inclure dans un fichier shell en écrivant dans
† Les règles de recherche des commandes sont fixées par la variable
PATH qui est initialisée à la connexion. la procédure : set -v ou set -x

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes


123

… Contrôle des processus


† Lorsque des commandes sont lancées en arrière-plan et
TX·LOHVWQpFHVVDLUHGHV\QFKURQLVHUODVXLWHG·XQ
programme shell avec la fin de ces commandes, le
programme shell doit se bloquer en attente de la fin de
ces commandes par la commande interne wait.
† wait num VXVSHQGO·H[pFXWLRQMXVTX·jFHTXHOH
processus de n° num, ou tous les processus lancés en
arrière-plan, se terminent.

Support : Système d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Vous aimerez peut-être aussi