Csc3102 Cours.3x2
Csc3102 Cours.3x2
Csc3102 Cours.3x2
Année 2022-2023
Coordinateurs :
Mathieu Bacou et Élisabeth Brunet
http://www-inf.telecom-sudparis.eu/COURS/CSC3102/Supports/
CSC 3101
CSC 3102 – Introduction aux systèmes
d’exploitation
Annexe shell
Motifs bash
* N'importe quelle séquence de caractères.
? N'importe quel caractère
[wtz] Le caractère w ou le caractère t ou le caractère z.
[d-r] Tous les caractères compris entre d et r.
[[:lower:]]/[[:upper:]] Alphabet (caractères accentués compris) minuscule/majuscule.
[[:digit:]] Chiffres décimaux.
[[:alpha:]] Tous les caractères alphnumérique, c'estàdire toutes les lettres
de l'alphabet (caractères accentués compris) et tous les chiffres
décimaux.
Système de fichiers
cd [chemin] Positionne le répertoire courant à “chemin” ou au répertoire
d'accueil (HomeDirectory) si aucun paramètre n'est donné.
d accueil (HomeDirectory) si aucun paramètre n est donné.
cp f1 f2 Copie le fichier f1 dans le fichier f2. Si f2 existait déjà, son ancien
contenu est perdu.
ls [opt] [liste] Pour chaque élément e de liste, affiche le contenu du répertoire
e si c'est un répertoire ou le nom du fichier e si c'est un fichier. Un
certain nombre d’options peuvent être indiquées (opt). En voici
quelques unes :
-l: affiche un certain nombre d’informations relatives aux
éléments (type, taille, date...).
-a: visualise tous les éléments, y compris les fichiers et
répertoires cachés (sous Unix, les éléments cachés
commencent par le caractère “.”).
-d: affiche le nom du répertoire et non son contenu.
while test; do Execute corps tant que le test test renvoie vrai.
corps
done
for var in liste; do Pour var prenant successivement les différentes valeurs de la
corps liste (une liste est une suite de mots séparés par des espaces),
done
exécute corps.
case $var in Trouve le premier motif correspondant à $var et exécute le corps
motif1) corps1;; associé.
motif2) corps2;;
...
motifn) bodyn;;
esac
( expression ) Permet de regrouper des commandes. Utile pour donner des
priorités aux opérateurs ! || et && dans les tests Par exemple [
priorités aux opérateurs !, || et && dans les tests. Par exemple [
42 -eq 65 ] || ( [ 65 -eq 65 ] && [ 63 -eq 63 ] ) renvoie
vrai. Peut aussi être utilisé pour rediriger les entrées/sorties de
plusieurs commandes simultanément. Par exemple ( ls; cat
/etc/passwd ) > fic
Communication
| Tube de communication anonyme entre deux processus :
connecte la sortie standard de la commande de gauche à l’entrée
standard de la commande de droite.
kill -sig pid Envoie le signal sig (sig est un numéro ou un nom de signal,
avec ou sans le SIG de début de chaîne) au processus
d’identifiant pid.
kill –l Donne la liste des signaux (nom et valeur numérique).
mkfifo chemin Crée le tube nommé de nom chemin.
trap [arg] sig Exécute arg lors du traitement du signal sig (sig est un numéro
ou un nom de signal, avec ou sans le SIG de début de chaîne). Si
arg est une chaîne vide, le signal est ignoré. Si arg est absent, le
traitement par défaut du signal est rétabli.
Présentation du cours
◼ Contexte du cours :
• Introduire notre objet d’étude : les systèmes d’exploitation
Introduction aux systèmes
◼ Objectifs :
d’exploitation • Comprendre ce qu’est un ordinateur
• Comprendre ce que sont un logiciel et un programme
• Comprendre ce qu’est un système d’exploitation
CSC 3102
• Comprendre ce qu’est un processus
Introduction aux systèmes d’exploitation
Elisabeth Brunet et Amina Guermouche ◼ Notions abordées :
• Ordinateur, mémoire, processeur, périphérique, système
d’exploitation, processus, communication, programme, logiciel
◼ Machine électronique capable d’exécuter des instructions ◼ Machine électronique capable d’exécuter des instructions
effectuant des opérations sur des nombres effectuant des opérations sur des nombres
Vidéo sur les systèmes d'exploitation à regarder
◼ Comment le système d’exploitation reprend la main s’il y a un ◼ Étude des systèmes Unix par l’exemple
processus qui s’exécute ?
a. Ordonnancement ◼ À l’aide du langage bash (CI1)
• Langage interprété par le programme bash
◼ Comment les processus communiquent-ils ? • Langage spécialisé dans la gestion de processus
a. Les tubes
b. Les signaux
◼ Comprendre
◼ Comment protège-t-il les données utilisées par un processus • La notion de fichier (CI2 à 4)
interrompu ? • La notion de processus (CI5)
a. La concurrence • Quelques mécanismes de communication inter-processus (CI6 à
9)
◼ Le langage bash
Le shell bash ◼ Les variables
Le terminal Le terminal
◼ Un terminal offre :
• un canal pour entrer des données (clavier, souris, écran tactile…) Bien que ce soit souvent le cas
• un canal pour afficher des données (écran, imprimante, haut- (smartphone, tablette, ordinateur portable…)
parleur…)
3 CSC 3102 Le shell bash 4 CSC 3102 Le shell bash
Un processus communique
Un terminal peut être virtualisé
avec l’utilisateur via un terminal
◼ Un terminal virtuel émule le comportement d’un terminal ◼ On dit que le processus est attaché à un (et un seul) terminal
physique dans un autre terminal (virtuel ou physique)
Canal
d’entrée
Utilisateur
Processus (humain ou
Canal processus)
de sortie
Terminal d’attache
du processus
◼ Les variables
◼ Commandes imbriquées
Attention :
Ici nous avons 5 mots Ici nous avons 5 mots
ces
qu’on éc
une unique
des mots que
rit y compris mot milieu"
" En bash, ceci est un unique "mot" y compris mot milieu" " En bash, ceci
Ce n’est p parc
asest "mot"
ns pour bash
Voici, trois, mots mots ont un se
Voici, trois, mots
p! p es
:biun
3est t constitué de
" zip "@é§èçà°-_¨^$%ù£,.:+=' est un autre unique mot' h o yo
" zip "@é§èçà°-_¨^$%ù£,.:+=' autre unique r
mot’
Exemple : ec
es t pas com préhensible pa
ot s m ais n’
Nous|avons;NEUF&&mots&ici deux m
Nous|avons;NEUF&&mots&ici
bash
Variables bash
◼ Terminal et shell
◼ Déclaration/affectation avec = (exemple ma_var=valeur)
◼ Le langage bash
$
◼ Déclaration/affectation avec =n: ma_var=valeur
Attentio :
eur
$ :l$ma_var
◼ Consultation en préfixant dadu ma_var=va
ns caractère
Pas de blanc v ar
dans $ma_
Pas de blanc
◼ Saisie interactive : read var1 var2 ... varnçon
ca s, ba sh interprète de fa
• Lecture
(dans les de
d’une ux
ligne saisie par l’utilisateur (jusqu’au retour chariot)
éc iale u n un ique mot)
sp
• Le premier mot va dans var1
• Le second dans var2
• Tous les mots restants vont dans varn
$ a=42 $ a=42
$ $ echo $a
42
$
$ a=42 $ a=42
$ echo $a $ echo $a
42 42
$ s='Bonjour, monde!!!' $ s='Bonjour, monde!!!'
$ $ echo $s
Bonjour, monde!!!
$
$ a=42 $ a=42
$ echo $a $ echo $a
42 42
$ s='Bonjour, monde!!!' $ s='Bonjour, monde!!!'
$ echo $s $ echo $s
Bonjour, monde!!! Bonjour, monde!!!
$ read x Saisi par l’utilisateur $ read x
Ceci est une phrase Ceci est une phrase
$ $ echo $x
Ceci est une phrase
$
$ a=42 $ a=42
$ echo $a $ echo $a
42 42
$ s='Bonjour, monde!!!' $ s='Bonjour, monde!!!'
$ echo $s $ echo $s
Bonjour, monde!!! Bonjour, monde!!!
$ read x $ read x
Ceci est une phrase Ceci est une phrase
$ echo $x $ echo $x
Ceci est une phrase Ceci est une phrase
$ read x y Saisi par l’utilisateur $ read x y
Ceci est une phrase Ceci est une phrase
$ $ echo $x
Premier mot
Ceci
$
if cond; then
cmds
Schéma algorithmique séquentiel Schéma alternatif (if) elif cond; then
cmds
else
cmds
◼ Suite de commandes les unes après les autres ◼ Schéma alternatif simple fi
◼ Tests sur des valeurs numériques ◼ Tests sur des valeurs numériques
• [ n1 –eq n2 ] : vrai si n1 est égal à n2 • [ n1 –eq n2 ] : vrai si n1 est égal à n2
• [ n1 –ne n2 ] : vrai si n1 est différent de n2 • [ n1 –ne n2 ] : vrai si n1 est différent de n2
• [ n1 –gt n2 ] : vrai si n1 supérieur strictement à n2 • [ n1 –gt n2 ] : vrai si n1 supérieur strictement à n2
• [ n1 –ge n2 ] : vrai si n1 supérieur ou égal à n2 • [ n1 –ge n1ntio
n2 ] : vraiAsitte
n:
supérieur ou égal à n2
• [ n1 –lt n2 ] : vrai si n1 inférieur strictement à n2 • [ n1 –lt n2 ] : vrai si n1 inférieur strictement à n2
• [ n1 –le n2 ] : vrai si n1 est inférieur ou égal à n2 • [ n1 –le n2Le]s :bvrai estes
sont
lancsisn1 sentiels !
inférieur ou égal à n2
◼ Tests sur des chaînes de caractères ◼ Tests sur des chaînes de caractères
• [ mot1 = mot2 ] : vrai si mot1 est égale à mot2 • [ mot1 = mot2 ] : vrai si mot1 est égale à mot2
• [ mot1 != mot2 ]: vrai si mot1 n’est pas égale à mot2 • [ mot1 != mot2 ]: vrai si mot1 n’est pas égale à mot2
• [ -z mot ] : vrai si mot est le mot vide • [ -z mot ] : vrai si mot est le mot vide
• [ -n mot ] : vrai si mot n’est pas le mot vide • [ -n mot ] : vrai si mot n’est pas le mot vide
if cond; then
cmds
Remarque sur les conditions Schéma alternatif (if) elif cond; then
cmds
else
cmds
◼ [ cond ] est un raccourci pour la commande test cond ◼ Schéma alternatif simple fi
Équivaut à
if test $x -eq 42; then
echo coucou
fi
$ $./mon_echo.sh
$
$./mon_echo.sh $./mon_echo.sh
$./mon_echo.sh toto titi $./mon_echo.sh toto titi
toto toto
titi titi
$ $./mon_echo "fin de" la demo
fin de
la
demo
$
Imbrication de commandes
◼ Terminal et shell ◼ Pour récupérer le texte écrit sur le terminal par une commande
dans une chaîne de caractères
◼ Le langage bash • $(cmd)
• Attention à ne pas confondre avec $cmd qui permet l’accès à la
◼ Les variables
valeur de la variable cmd
◼ Les structures algorithmiques
◼ Commandes imbriquées
◼ Pour récupérer le texte écrit sur le terminal par une commande ◼ Pour récupérer le texte écrit sur le terminal par une commande
dans une chaîne de caractères dans une chaîne de caractères
• $(cmd) • $(cmd)
• Attention à ne pas confondre avec $cmd qui permet l’accès à la • Attention à ne pas confondre avec $cmd qui permet l’accès à la
valeur de la variable cmd valeur de la variable cmd
$ date $ date
lundi 27 juillet 2015, 12:47:06 (UTC+0200) lundi 27 juillet 2015, 12:47:06 (UTC+0200) Rappel : avec "…",
$ $ echo "Nous sommes le $(date). " seuls sont interprétés
Nous sommes le lundi 27 juillet 2015, 12:47:06 les caractères $ \ `
(UTC+0200).
$
Imbrication de commandes
◼ Pour récupérer le texte écrit sur le terminal par une commande ◼ Terminal et shell
dans une chaîne de caractères
• $(cmd) ◼ Le langage bash
• Attention à ne pas confondre avec $cmd qui permet l’accès à la
◼ Les variables
valeur de la variable cmd
$ date ◼ Les structures algorithmiques
lundi 27 juillet 2015, 12:47:06 (UTC+0200)
$ echo "Nous sommes le $(date). " ◼ Arguments d’une commande
Nous sommes le lundi 27 juillet 2015, 12:47:06
(UTC+0200).
$ echo "Nous sommes le $date." ◼ Commandes imbriquées
Nous sommes le .
$
Attention, récupère la variable date
et non le résultat de la commande date
63 CSC 3102 Le shell bash 64 CSC 3102 Le shell bash
En route pour le TP !
Conclusion
◼ Concepts clés
• Terminal, shell
• Interpréteur de commande bash
– Commandes, langage bash
• Documentation
• Caractères spéciaux de bash
• Script bash
◼ Commandes clés
• man, bash, echo, read
◼ Commandes à connaître
• date
65 CSC 3102 Le shell bash 66 CSC 3102 Le shell bash
Système de Fichiers
3 2015-2016 CSC 3102 Système de Fichiers 4 2015-2016 CSC 3102 Système de Fichiers
◼ Facilement plusieurs centaines de milliers de fichiers dans un ◼ Répertoire = fichier spécial qui associe des noms à des fichiers
ordinateur
sous-repertoire f1
• Plusieurs milliers gérés/utilisés directement par l’utilisateur
f1 …
• Plusieurs centaines de milliers pour le système et les applications un-repertoire f2
sous-repertoire f2
tableau.jpg tableau.jpg
◼ Problème : comment retrouver facilement un fichier parmi des …
script.sh
centaines de milliers ?
echo "Hello!!!"
5 2015-2016 CSC 3102 Système de Fichiers 6 2015-2016 CSC 3102 Système de Fichiers
Organisation en répertoires Organisation en répertoires
◼ Répertoire = fichier spécial qui associe des noms à des fichiers ◼ Répertoire = fichier spécial qui associe des noms à des fichiers
sous-repertoire f1
f1 …
f2 un-repertoire
sous-repertoire f2
tableau.jpg tableau.jpg
…
script.sh
Mais dans ces diapostives,
on représentera souvent
Le nom d’un un fichier par son nom
fichier n’est stocké que (car c’est nettement plus intuitif !)
dans le répertoire qui le
script.sh
référence
#! /bin/bash
(un fichier non référencé
echo "Hello!!!"
est supprimé)
7 2015-2016 CSC 3102 Système de Fichiers 8 2015-2016 CSC 3102 Système de Fichiers
home etc bin lib usr media … dev tmp home etc bin lib usr media …
Commandes
Points de
bin lib … de base bin lib …
en mono- montage pour des
utilisateur disques externes
La plupart des systèmes d’exploitation Unix
(GNU/Linux, BSD, MacOS…) utilisent une arborescence Fichiers Fichiers de Bibliothèques Bibliothèques
temporaires configuration de base supplémentaires
de base standardisée
Fichiers Répertoire des Répertoire
(seul Windows utilise une arborescence réellement différente) représentant les utilisateurs principal pour les
périphériques programmes
(voir ci3) exécutables
Vous pouvez la consulter en faisant : man hier (pour hierarchy)
9 2015-2016 CSC 3102 Système de Fichiers 10 2015-2016 CSC 3102 Système de Fichiers
Arborescence standard
Notion de répertoire de travail
des systèmes d’exploitation UNIX
processus bash
Répertoire lancé par arya
racine associé
au compte arya
cwd
home etc bin lib usr media … home etc bin lib usr media …
arya cersei daenerys … bin lib … arya cersei daenerys … bin lib …
cwd
photo cours photo cours Chaque processus possède
Chaque utilisateur possède un répertoire de travail
cwd
un répertoire de connexion (home directory) (noté cwd pour
peinture.jpg peinture.jpg current working directory)
Accessible via la variable HOME processus bash
processus emacs lancé par cersei
lancé par arya
11 2015-2016 CSC 3102 Système de Fichiers 12 2015-2016 CSC 3102 Système de Fichiers
Notion de chemin Exemple de chemin absolu (1/2)
home etc bin lib usr media … cwd home etc bin lib usr media …
arya cersei daenerys … bin lib … arya cersei daenerys … bin lib …
cwd home etc bin lib usr media … home etc bin lib usr media …
arya cersei daenerys … bin lib … arya cersei daenerys … bin lib …
$ ./script.sh
Bonjour, vous êtes dans le répertoire /home/gael/tmp
Votre maison se trouve en /home/gael
Et vous avez lancé le script ./script.sh
$
19 2015-2016 CSC 3102 Système de Fichiers 20 2015-2016 CSC 3102 Système de Fichiers
21 2015-2016 CSC 3102 Système de Fichiers 22 2015-2016 CSC 3102 Système de Fichiers
23 2015-2016 CSC 3102 Système de Fichiers 24 2015-2016 CSC 3102 Système de Fichiers
Les partitions dans les systèmes UNIX Le système de fichiers sur disque (1/2)
25 2015-2016 CSC 3102 Système de Fichiers 26 2015-2016 CSC 3102 Système de Fichiers
◼ Avec ext, utilisé sous GNU/Linux, trois zones principales ◼ Le système maintient une table des montages
• Le superbloc, au début, décrit les autres zones qui associe des chemins (points de montage) et des disques
• La table des inodes contient les inodes (inode 0 = racine) • / ⇒ sda1
• La zone des blocs de données contient les données des fichiers • /home ⇒ sdb1
• /mnt/windows ⇒ sdb2
Remarque : les partitions du disque dur peuvent se trouver sur une autre
5 3 4 machine
1 Blocs de
Par exemple, (typiquement Network File System, comme en salle TP, voir
Une partition
8 données
contenu de inode 1 : https://doc.ubuntu-fr.org/nfs)
4096 octets du bloc 1 puis
4096 octets du bloc 5 puis ◼ Lorsqu’un processus accède à un point de montage, il accède
Tables des
312 octets du bloc 8 inode 1 inode 2
inodes à l’inode racine du disque indiqué dans la table des montages
Superbloc Par exemple cd /mnt/windows accède à l’inode racine de sdb2
27 2015-2016 CSC 3102 Système de Fichiers 28 2015-2016 CSC 3102 Système de Fichiers
Exemple de points sda1 ◼ Le nom d’un inode dans un répertoire s’appelle un lien direct
de montage (hard link en anglais, aussi appelé parfois lien dur, physique ou matériel)
peinture.jpg
29 2015-2016 CSC 3102 Système de Fichiers 30 2015-2016 CSC 3102 Système de Fichiers
Lien direct (1/2) Lien direct (2/2)
◼ On peut créer plusieurs liens directs vers le même inode ◼ Mais faire de multiples liens directs pour faire des raccourcis
Commande ln chem-cible chem-lien peut poser problème
• Aucune différence entre le nom original et le nouveau nom • Pour supprimer un fichier, il faut supprimer tous les liens directs
vers son inode, mais les utilisateurs sont distraits et en oublient
• Facilite l’accès à des fichiers à partir d’emplacements connus
• Un lien direct ne peut référencer qu’un inode de la même partition
apollinaire.txt (du même système de fichiers)
arya … Avec ses quatre dromadaires
home cersei
Don Pedro d’Alfaroubeira…
…
pedro.txt
…
ln /home/arya/apollinaire.txt /home/cersei/pedro.txt
31 2015-2016 CSC 3102 Système de Fichiers 32 2015-2016 CSC 3102 Système de Fichiers
ln –s /home/arya/apollinaire.txt /home/cersei/pedro.txt
33 2015-2016 CSC 3102 Système de Fichiers 34 2015-2016 CSC 3102 Système de Fichiers
35 2015-2016 CSC 3102 Système de Fichiers 36 2015-2016 CSC 3102 Système de Fichiers
Commandes utilisateur Création d’un fichier
37 2015-2016 CSC 3102 Système de Fichiers 38 2015-2016 CSC 3102 Système de Fichiers
◼ Supprimer un fichier (tout type, sauf répertoire) ◼ Supprimer un fichier (tout type, sauf répertoire)
rm chem : remove rm chem : remove
• Suppression de l’entrée associée au chemin dans le répertoire • Suppression de l’entrée associée au chemin dans le répertoire
parent parent
– Décrémentation du compteur de liens directs de l’inode – Décrémentation du compteur de liens directs de l’inode
– Libère le fichier (inode + données) si compteur tombe à zéro – Libère le fichier (inode + données) si compteur tombe à zéro
apollinaire.txt
arya …
home cersei Avec ses quatre dromadaires
… Don Pedro d’Alfaroubeira…
pedro.txt
…
39 2015-2016 CSC 3102 Système de Fichiers 40 2015-2016 CSC 3102 Système de Fichiers
◼ Supprimer un fichier (tout type, sauf répertoire) ◼ Supprimer un fichier (tout type, sauf répertoire)
rm chem : remove rm chem : remove
• Suppression de l’entrée associée au chemin dans le répertoire • Suppression de l’entrée associée au chemin dans le répertoire
parent parent
– Décrémentation du compteur de liens directs de l’inode – Décrémentation du compteur de liens directs de l’inode
– Libère le fichier (inode + données) si compteur tombe à zéro – Libère le fichier (inode + données) si compteur tombe à zéro
apollinaire.txt apollinaire.txt
arya … arya …
home cersei Avec ses quatre dromadaires home cersei Avec ses quatre dromadaires
… Don Pedro d’Alfaroubeira… … Don Pedro d’Alfaroubeira…
pedro.txt pedro.txt
… …
rm /home/arya/apollinaire.txt rm /home/cersei/pedro.txt
41 2015-2016 CSC 3102 Système de Fichiers 42 2015-2016 CSC 3102 Système de Fichiers
Suppression d’un fichier (5/5) Copie d’un fichier (1/3)
43 2015-2016 CSC 3102 Système de Fichiers 44 2015-2016 CSC 3102 Système de Fichiers
apollinaire.txt Avec ses quatre dromadaires apollinaire.txt Avec ses quatre dromadaires
arya … arya …
Don Pedro d’Alfaroubeira… Don Pedro d’Alfaroubeira…
home cersei home cersei
… …
… pedro.txt Avec ses quatre dromadaires
… … Don Pedro d’Alfaroubeira…
cp /home/arya/apollinaire.txt /home/cersei/pedro.txt
45 2015-2016 CSC 3102 Système de Fichiers 46 2015-2016 CSC 3102 Système de Fichiers
◼ mv src dest : move (déplace ou renomme) ◼ mv src dest : move (déplace ou renomme)
• src : fichier de type quelconque • src : fichier de type quelconque
• Si dest est un répertoire, déplace src dans le répertoire dest • Si dest est un répertoire, déplace src dans le répertoire dest
(dans ce cas, multiples déplacements possibles avec (dans ce cas, multiples déplacements possibles avec
mv fic1 fic2 … rep) mv fic1 fic2 … rep)
• Sinon, déplace src sous le nom dest • Sinon, déplace src sous le nom dest
– Si dest est dans le même répertore : renommage – Si dest est dans le même répertore : renommage
◼ mv src dest : move (déplace ou renomme) ◼ mv src dest : move (déplace ou renomme)
• src : fichier de type quelconque • src : fichier de type quelconque
• Si dest est un répertoire, déplace src dans le répertoire dest • Si dest est un répertoire, déplace src dans le répertoire dest
(dans ce cas, multiples déplacements possibles avec (dans ce cas, multiples déplacements possibles avec
mv fic1 fic2 … rep) mv fic1 fic2 … rep)
• Sinon, déplace src sous le nom dest • Sinon, déplace src sous le nom dest
– Si dest est dans le même répertore : renommage – Si dest est dans le même répertore : renommage
◼ mv src dest : move (déplace ou renomme) ◼ mv src dest : move (déplace ou renomme)
• src : fichier de type quelconque • src : fichier de type quelconque
• Si dest est un répertoire, déplace src dans le répertoire dest • Si dest est un répertoire, déplace src dans le répertoire dest
(dans ce cas, multiples déplacements possibles avec (dans ce cas, multiples déplacements possibles avec
mv fic1 fic2 … rep) mv fic1 fic2 … rep)
• Sinon, déplace src sous le nom dest • Sinon, déplace src sous le nom dest
– Si dest est dans le même répertore : renommage – Si dest est dans le même répertore : renommage
55 2015-2016 CSC 3102 Système de Fichiers 56 2015-2016 CSC 3102 Système de Fichiers
◼ ls -ld ⇒ donne les droits des fichiers ◼ Modification sur un fichier existant
chmod droit fichier : change mode
◼ Format de sortie de ls –l ◼ Droits à !appliquer! au fichier
• - --- --- ---
• Catégories : u, g, o ou a (= all c.-à-.d., ugo)
Droits des autres (rwx) • Opérations : Ajout (+), retrait (-), affectation (=)
Droits du groupe (rwx)
$
Droits de l’utilisateur (rwx)
57 2015-2016 CSC 3102 Système de Fichiers 58 2015-2016 CSC 3102 Système de Fichiers
59 2015-2016 CSC 3102 Système de Fichiers 60 2015-2016 CSC 3102 Système de Fichiers
Droits d’accès – modification Démonstration
$ cp /etc/passwd .
◼ Modification sur un fichier existant $
61 2015-2016 CSC 3102 Système de Fichiers 62 2015-2016 CSC 3102 Système de Fichiers
Démonstration Démonstration
$ cp /etc/passwd . $ cp /etc/passwd .
$ ls -l $ ls -l
total 4 total 4
-rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd -rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd
$ $ chmod u-r passwd
$
63 2015-2016 CSC 3102 Système de Fichiers 64 2015-2016 CSC 3102 Système de Fichiers
Démonstration Démonstration
$ cp /etc/passwd . $ cp /etc/passwd .
$ ls -l $ ls -l
total 4 total 4
-rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd -rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd
$ chmod u-r passwd $ chmod u-r passwd
$ cat passwd $ cat passwd
cat: passwd: Permission non accordée cat: passwd: Permission non accordée
$ $ mkdir rep
$
65 2015-2016 CSC 3102 Système de Fichiers 66 2015-2016 CSC 3102 Système de Fichiers
Démonstration Démonstration
$ cp /etc/passwd . $ cp /etc/passwd .
$ ls -l $ ls -l
total 4 total 4
-rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd -rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd
$ chmod u-r passwd $ chmod u-r passwd
$ cat passwd $ cat passwd
cat: passwd: Permission non accordée cat: passwd: Permission non accordée
$ mkdir rep $ mkdir rep
$ ls -l $ ls -l
total 8 total 8
--w-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd --w-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd
drwxr-xr-x 2 gthomas users 68 19 juil. 2016 rep drwxr-xr-x 2 gthomas users 68 19 juil. 2016 rep
$ $ cd rep/
$
67 2015-2016 CSC 3102 Système de Fichiers 68 2015-2016 CSC 3102 Système de Fichiers
Démonstration Démonstration
$ cp /etc/passwd . $ cp /etc/passwd .
$ ls -l $ ls -l
total 4 total 4
-rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd -rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd
$ chmod u-r passwd $ chmod u-r passwd
$ cat passwd $ cat passwd
cat: passwd: Permission non accordée cat: passwd: Permission non accordée
$ mkdir rep $ mkdir rep
$ ls -l $ ls -l
total 8 total 8
--w-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd --w-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd
drwxr-xr-x 2 gthomas users 68 19 juil. 2016 rep drwxr-xr-x 2 gthomas users 68 19 juil. 2016 rep
$ cd rep/ $ cd rep/
$ cd .. $ cd ..
$ $ chmod u-x rep
$
69 2015-2016 CSC 3102 Système de Fichiers 70 2015-2016 CSC 3102 Système de Fichiers
71 2015-2016 CSC 3102 Système de Fichiers 72 2015-2016 CSC 3102 Système de Fichiers
Démonstration Démonstration
$ touch fichier_umask_defaut $ touch fichier_umask_defaut
$ $ ls -lh
-rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut
$
Tous les fichiers sont créés avec des droits par
défaut
Démonstration Démonstration
$ touch fichier_umask_defaut $ touch fichier_umask_defaut
$ ls -lh $ ls -lh
-rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut -rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut
$ mkdir repertoire_umask_defaut $ mkdir repertoire_umask_defaut
$ ls -lh $ ls -lh
-rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut -rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut
drwxrwxr-x 2 amina amina 4,0K oct. 2 10:50 repertoire_umask_defaut drwxrwxr-x 2 amina amina 4,0K oct. 2 10:50 repertoire_umask_defaut
$ $ umask 007
Et les répertoires aussi. Les droits des fichiers et $ Ici, umask ne retire aucun droit au propriétaire et
des répertoires sont souvent différents au groupe. Il retire tous les droits aux utilisateurs
« other »
Démonstration Démonstration
$ touch fichier_umask_defaut $ touch fichier_umask_defaut
$ ls -lh $ ls -lh
-rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut -rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut
$ mkdir repertoire_umask_defaut $ mkdir repertoire_umask_defaut
$ ls -lh $ ls -lh
-rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut -rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut
drwxrwxr-x 2 amina amina 4,0K oct. 2 10:50 repertoire_umask_defaut drwxrwxr-x 2 amina amina 4,0K oct. 2 10:50 repertoire_umask_defaut
$ umask 007 $ umask 007
$ touch fichier_umask_nouveau $ touch fichier_umask_nouveau
$ ls -lh $ ls -lh
-rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut -rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut
-rw-rw---- 1 amina amina 0 oct. 2 10:52 fichier_umask_nouveau -rw-rw---- 1 amina amina 0 oct. 2 10:52 fichier_umask_nouveau
drwxrwxr-x 2 amina amina 4,0K oct. 2 10:50 repertoire_umask_defaut drwxrwxr-x 2 amina amina 4,0K oct. 2 10:50 repertoire_umask_defaut
$ $ mkdir repertoire_umask_nouveau
A partir de là, tous les fichiers et répertoires créés
$ ls -lh
n’ont plus les droits retirés par umask. Les droits
-rw-rw-r-- 1 amina amina 0 oct. 2 10:49 fichier_umask_defaut
des fichers existants ne changent pas
-rw-rw---- 1 amina amina 0 oct. 2 10:52 fichier_umask_nouveau
drwxrwxr-x 2 amina amina 4,0K oct. 2 10:50 repertoire_umask_defaut
drwxrwx--- 2 amina amina 4,0K oct. 2 10:53 repertoire_umask_nouveau
◼ Commandes clés :
• pwd, cd, ls
• chmod, umask
• mkdir, ln, rm, rmdir, cp, mv
79 2015-2016 CSC 3102 Système de Fichiers 80 2015-2016 CSC 3102 Système de Fichiers
Plan
◼ Variables notables
◼ Bash définit des variables d’environnement notables : ◼ Bash définit des variables d’environnement notables :
• HOME : chemin absolu du répertoire de connexion • HOME : chemin absolu du répertoire de connexion
– cd , cd ~ et cd $HOME sont des commandes équivalentes – cd , cd ~ et cd $HOME sont des commandes équivalentes
• PS1 : prompt (défaut $) • PS1 : prompt (défaut $)
• PS2 : prompt en cas de commande sur plusieurs lignes (défaut >) • PS2 : prompt en cas de commande sur plusieurs lignes (défaut >)
$ if $ if
> > [ 0 == 0 ]; then echo 'yes!'; fi
yes!
$
3 2015-2016 CSC 3102 Complément sur bash 4 2015-2016 CSC 3102 Complément sur bash
◼ Bash définit des variables d’environnement notables : ◼ Bash définit des variables d’environnement notables :
• HOME : chemin absolu du répertoire de connexion • HOME : chemin absolu du répertoire de connexion
– cd , cd ~ et cd $HOME sont des commandes équivalentes – cd , cd ~ et cd $HOME sont des commandes équivalentes
• PS1 : prompt (défaut $) • PS1 : prompt (défaut $)
• PS2 : prompt en cas de commande sur plusieurs lignes (défaut >) • PS2 : prompt en cas de commande sur plusieurs lignes (défaut >)
$ if $ if
> [ 0 == 0 ]; then echo 'yes!'; fi > [ 0 == 0 ]; then echo 'yes!'; fi
yes! yes!
$ PS2="++++ " $ PS2="++++ "
$ $ if
++++
5 2015-2016 CSC 3102 Complément sur bash 6 2015-2016 CSC 3102 Complément sur bash
Variables notables Variables notables
◼ Bash définit des variables d’environnement notables : ◼ Bash définit des variables d’environnement notables :
• HOME : chemin absolu du répertoire de connexion • HOME : chemin absolu du répertoire de connexion
– cd , cd ~ et cd $HOME sont des commandes équivalentes – cd , cd ~ et cd $HOME sont des commandes équivalentes
• PS1 : prompt (défaut $) • PS1 : prompt (défaut $)
• PS2 : prompt en cas de commande sur plusieurs lignes (défaut >) • PS2 : prompt en cas de commande sur plusieurs lignes (défaut >)
$ if $ if
> [ 0 == 0 ]; then echo 'yes!'; fi > [ 0 == 0 ]; then echo 'yes!'; fi
yes! yes!
$ PS2="++++ " $ PS2="++++ "
$ if $ if
++++ [ 0 == 0 ]; then echo 'yes!'; fi ++++ [ 0 == 0 ]; then echo 'yes!'; fi
yes! yes!
$ $ PS1="ceci est un prompt: "
ceci est un prompt:
7 2015-2016 CSC 3102 Complément sur bash 8 2015-2016 CSC 3102 Complément sur bash
◼ Lorsque bash essaye d’exécuter cmd ◼ La commande which indique où se trouve les commandes
• Si cmd contient un /, lance l’exécutable de chemin cmd
• Dans Bash, which ne fonctionne pas sur les alias (vus plus loin)
Exemple : ./truc.sh, /bin/truc.sh
• Sinon
– Si cmd est une commande interne which cmd : indique le chemin complet de cmd en utilisant PATH
(c.-à-.d, directement exécutable par bash), exécute la commande
Exemple : en général, les commandes read ou echo
– Sinon, bash cherche cmd dans les répertoires du PATH
Exemple : test.sh ⇒ /bin/test.sh puis /usr/bin/test.sh
– Sinon, bash affiche Command not found
9 2015-2016 CSC 3102 Complément sur bash 10 2015-2016 CSC 3102 Complément sur bash
◼ Un script peut renvoyer un code de retour avec exit n ◼ Un script peut renvoyer un code de retour avec exit n
• Ce code de retour peut être utilisé dans les if et while • Ce code de retour peut être utilisé dans les if et while
0 ⇒ vrai (ou ok), autre ⇒ faux (ou problème) 0 ⇒ vrai (ou ok), autre ⇒ faux (ou problème)
• Sémantique du code de retour parfois cryptique ⇒ utiliser man • Sémantique du code de retour parfois cryptique ⇒ utiliser man
◼ Code de retour dernière commande stocké dans la variable $? ◼ Code de retour dernière commande stocké dans la variable $?
replay.sh replay.sh
13 2015-2016 CSC 3102 Complément sur bash 14 2015-2016 CSC 3102 Complément sur bash
◼ Un script peut renvoyer un code de retour avec exit n ◼ Un script peut renvoyer un code de retour avec exit n
• Ce code de retour peut être utilisé dans les if et while • Ce code de retour peut être utilisé dans les if et while
0 ⇒ vrai (ou ok), autre ⇒ faux (ou problème) 0 ⇒ vrai (ou ok), autre ⇒ faux (ou problème)
• Sémantique du code de retour parfois cryptique ⇒ utiliser man • Sémantique du code de retour parfois cryptique ⇒ utiliser man
◼ Code de retour dernière commande stocké dans la variable $? ◼ Code de retour dernière commande stocké dans la variable $?
replay.sh replay.sh
15 2015-2016 CSC 3102 Complément sur bash 16 2015-2016 CSC 3102 Complément sur bash
◼ Un script peut renvoyer un code de retour avec exit n ◼ Un script peut renvoyer un code de retour avec exit n
• Ce code de retour peut être utilisé dans les if et while • Ce code de retour peut être utilisé dans les if et while
ns
rairement à bash, da
0 ⇒ vrai (ou ok), autre ⇒ faux (ou problème) 0 ⇒ vrai (ou ok), autre ⇒ faux (ou problème)
Attentdu : codentretour
ioncode
• Sémantique du code de retour parfois cryptique ⇒ utiliser man • Sémantique
us les autres langages de man
parfois cryptique
ent to commande stocké dans la variable
⇒ utiliser
◼ Code dequ asim
◼ Code de retour dernière commande stocké dans la variable $? retour dernière ut 0 et la valeur $?
leur faux va
programmation, la va que 0
$ ./replay.sh 42
$ echo $?
#! /bin/bash $ ./replay.sh 42
$ echo $?
vrai vaut autre chose #! /bin/bash
42 exit $1 42 exit $1 addition
ique est une simple
le ou logfi
autre,coucou;
$ if ./replay.sh 0; then echo coucou; fi $ if ./replay.sh
dans le cas 0;
0 = x/1 =echo
then
fau ltip lication dans ℤ)
(car ue est une simple mu
coucou coucou dans ℤ et le et logiq
$ if ./replay.sh 1; then echo coucou; fi $ if ./replay.sh 1; then echo coucou; fi
$ $
replay.sh replay.sh
17 2015-2016 CSC 3102 Complément sur bash 18 2015-2016 CSC 3102 Complément sur bash
Plan Alias de commande
19 2015-2016 CSC 3102 Complément sur bash 20 2015-2016 CSC 3102 Complément sur bash
◼ Sert à (re)définir le nom d’une commande ◼ Sert à (re)définir le nom d’une commande
• Pour créer des noms abrégés ou passer des options • Pour créer des noms abrégés ou passer des options
$ ls $ ls
◼ Création : d f1 test.sh ◼ Création : d f1 test.sh
$ $ alias ls='ls -a'
alias cmd='…' alias cmd='…'
$
◼ Suppression : ◼ Suppression :
unalias cmd unalias cmd
◼ Consultation : ◼ Consultation :
alias alias
21 2015-2016 CSC 3102 Complément sur bash 22 2015-2016 CSC 3102 Complément sur bash
◼ Sert à (re)définir le nom d’une commande ◼ Sert à (re)définir le nom d’une commande
• Pour créer des noms abrégés ou passer des options • Pour créer des noms abrégés ou passer des options
$ ls $ ls
◼ Création : d f1 test.sh ◼ Création : d f1 test.sh
$ alias ls='ls -a' $ alias ls='ls -a'
alias cmd='…' alias cmd='…'
$ ls $ ls
. .. d f1 test.sh . .. d f1 test.sh
$ $ alias
◼ Suppression : ◼ Suppression : alias ls='ls –a'
unalias cmd unalias cmd $
◼ Consultation : ◼ Consultation :
alias alias
23 2015-2016 CSC 3102 Complément sur bash 24 2015-2016 CSC 3102 Complément sur bash
Alias de commande Alias de commande
◼ Sert à (re)définir le nom d’une commande ◼ Sert à (re)définir le nom d’une commande
• Pour créer des noms abrégés ou passer des options • Pour créer des noms abrégés ou passer des options
$ ls $ ls
◼ Création : d f1 test.sh ◼ Création : d f1 test.sh
$ alias ls='ls -a' $ alias ls='ls -a'
alias cmd='…' alias cmd='…'
$ ls $ ls
. .. d f1 test.sh . .. d f1 test.sh
$ alias $ alias
◼ Suppression : alias ls='ls –a'
◼ Suppression : alias ls='ls –a'
unalias cmd $ unalias ls unalias cmd $ unalias ls
$ $ ls
d f1 test.sh
◼ Consultation : ◼ Consultation : $
alias alias
25 2015-2016 CSC 3102 Complément sur bash 26 2015-2016 CSC 3102 Complément sur bash
◼ Variables notables ◼ Bash peut filtrer des noms de fichiers en suivant un motif
* ⇒ une chaîne de caractères quelconque (même vide)
◼ Code de retour d’un processus ? ⇒ substitue un caractère quelconque
$ ls # contenu du répertoire
◼ Alias de commandes
CSC3101 CSC3102 CSC3601 CSC3602 NET3101 NET3102
$
◼ Fichier de configuration bash
29 2015-2016 CSC 3102 Complément sur bash 30 2015-2016 CSC 3102 Complément sur bash
Filtrage de fichiers par motif (1/3) Filtrage de fichiers par motif (1/3)
◼ Bash peut filtrer des noms de fichiers en suivant un motif ◼ Bash peut filtrer des noms de fichiers en suivant un motif
* ⇒ une chaîne de caractères quelconque (même vide) * ⇒ une chaîne de caractères quelconque (même vide)
? ⇒ substitue un caractère quelconque ? ⇒ substitue un caractère quelconque
31 2015-2016 CSC 3102 Complément sur bash 32 2015-2016 CSC 3102 Complément sur bash
Filtrage de fichiers par motif (2/3) Filtrage de fichiers par motif (2/3)
◼ Ensemble
• Liste de caractères : [aeiouy] [!aeiouy]
• Un intervalle : [0-9] [a-zA-Z] [!A-F]
• Ensembles prédéfinis :
– [[:alpha:]] : caractères alphabétiques
– [[:lower:]] / [[:upper:]] : alphabet minuscule / majuscule
– [[:digit:]] : chiffres décimaux [0-9]
y
33 2015-2016 CSC 3102 Complément sur bash 34 2015-2016 CSC 3102 Complément sur bash
Concepts clés
Par défaut un processus possède 3 flux Les flux par défaut du terminal
1 : stdout $ read a b
Salut tout le monde!!! Lecture à partir du clavier
0 : stdin $ echo $a
cmd Salut Le terminal affiche les caractères
$ echo $b
2 : stderr tout le monde!!!
saisis au clavier
$
Redirections simples
1: stdout un-autre-fichier
2. Redirections avancées 0: stdin
mon-fichier cmd
2: stderr fichier-d-erreur
3. Les tubes
5 29/09/2021 CSC 3102 Les flux 6 29/09/2021 CSC 3102 Les flux
3 paramètres pour rediriger un flux Redirection de flux
7 29/09/2021 CSC 3102 Les flux 8 29/09/2021 CSC 3102 Les flux
◼ Lancement d’une commande en redirigeant un flux ◼ Si le numéro de flux n’est pas indiqué
• Utilise 1 (stdout) si en écriture
cmd n[<,>,>>,<>]fic
• Utilise 0 (stdin) si en lecture ou lecture/écriture
Lance la commande cmd dans un nouveau processus après avoir 1 (stdout) est implicite
ouvert le flux numéro n associé au fichier fic avec le mode idoine
coucou coucou
0 : stdin Processus 0 : stdin Processus
défaut défaut
echo 1 : stdout echo 1 : stdout
Fichier fic Fichier fic
9 29/09/2021 CSC 3102 Les flux 10 29/09/2021 CSC 3102 Les flux
11 29/09/2021 CSC 3102 Les flux 12 29/09/2021 CSC 3102 Les flux
Redirection de flux Redirection de flux
13 29/09/2021 CSC 3102 Les flux 14 29/09/2021 CSC 3102 Les flux
◼ Toute expression bash peut être redirigée ◼ Toute expression bash peut être redirigée
$ ( read x; echo $x; read y; echo $y; ) <fic $ ( read x; echo $x; read y; echo $y; ) <fic
Étape 1 : associe le flux 0 (stdin) à fic en lecture Étape 2 : lance l’exécution du regroupement (nouveau processus, cf. CI5)
en redirigeant son entrée
Tête de lecture Coucou Tête de lecture Coucou
Vous Vous
15 29/09/2021 CSC 3102 Les flux 16 29/09/2021 CSC 3102 Les flux
◼ Toute expression bash peut être redirigée ◼ Toute expression bash peut être redirigée
$ ( read x; echo $x; read y; echo $y; ) <fic $ ( read x; echo $x; read y; echo $y; ) <fic
Coucou
Coucou Coucou
Tête de lecture Vous Tête de lecture Vous
17 29/09/2021 CSC 3102 Les flux 18 29/09/2021 CSC 3102 Les flux
Redirection de flux et regroupement Redirection de flux et regroupement
◼ Toute expression bash peut être redirigée ◼ Toute expression bash peut être redirigée
$ ( read x; echo $x; read y; echo $y; ) <fic $ ( read x; echo $x; read y; echo $y; ) <fic
Coucou Coucou
Vous
Coucou Coucou
Vous Vous
Tête de lecture Tête de lecture
Fichier fic Fichier fic
19 29/09/2021 CSC 3102 Les flux 20 29/09/2021 CSC 3102 Les flux
◼ Toute expression bash peut être redirigée ◼ read lit une ligne d’un flux et avance la tête de lecture
⇒ read dans une boucle permet de lire un fichier ligne à ligne
$ for x in 1 2 3; do
> echo $x
> done >fic ◼ Il faut aussi détecter la fin d’un flux pour terminer la boucle
• Fin de flux indiquée par un code EOF (end-of-file)
– Généré sur le terminal lorsque l’utilisateur saisie Control+d
– Généré automatiquement lorsque la tête de lecture atteint la fin d’un
fichier
• Lecture de EOF indiquée dans le code de retour de read
– read retourne faux si lecture renvoie EOF
1
2 – read retourne vrai sinon
3
Fichier fic
21 29/09/2021 CSC 3102 Les flux 22 29/09/2021 CSC 3102 Les flux
Lecture d’un flux ligne à ligne Lecture d’un flux ligne à ligne
23 29/09/2021 CSC 3102 Les flux 24 29/09/2021 CSC 3102 Les flux
Lecture d’un flux ligne à ligne Lecture d’un flux ligne à ligne
25 29/09/2021 CSC 3102 Les flux 26 29/09/2021 CSC 3102 Les flux
Lecture d’un flux ligne à ligne Lecture d’un flux ligne à ligne
27 29/09/2021 CSC 3102 Les flux 28 29/09/2021 CSC 3102 Les flux
Lecture d’un flux ligne à ligne Lecture d’un flux ligne à ligne
29 29/09/2021 CSC 3102 Les flux 30 29/09/2021 CSC 3102 Les flux
Redirections avancées
cmd n[<,>,<>]&k
⇒ lance cmd en redirigeant le flux n vers le flux k
31 29/09/2021 CSC 3102 Les flux 32 29/09/2021 CSC 3102 Les flux
33 29/09/2021 CSC 3102 Les flux 34 29/09/2021 CSC 3102 Les flux
Les tubes
35 29/09/2021 CSC 3102 Les flux 36 29/09/2021 CSC 3102 Les flux
Les tubes par l’exemple
37 29/09/2021 CSC 3102 Les flux 38 29/09/2021 CSC 3102 Les flux
◼ Le système définit un fichier par périphérique ◼ On peut utiliser les redirections avec les périphériques
• Périphérique matériel connecté à l’unité centrale • Lecture d’une ligne à partir du générateur de nombres aléatoires
– /dev/sda : premier disque dur $ read a </dev/urandom
– /dev/input/mice : souris $ echo $a
–… ?.�ó���oJu 檄 xɆ4��ٍ��F�s{�6
39 29/09/2021 CSC 3102 Les flux 40 29/09/2021 CSC 3102 Les flux
Concepts clés
◼ Outils incontournables
• Nature d’une entrée
Outils indispensables • Pour les fichiers texte : affichage, tri, recherche de motif
• Occupation disque
• Archivage de fichiers
• Recherche de fichiers
CSC3102 – Introduction aux systèmes d’exploitation
Elisabeth Brunet
Nature d’une entrée du système de fichiers Nature d’une entrée du système de fichiers
◼ more fichier ◼ Pour les commandes qui suivent : si aucun fichier n’est donné
◼ less fichier
affichage simple page par page en argument, la commande s’applique sur l’entrée standard
• Rappel : ctl-d génère un code de fin de fichier (EOF)
◼ head -n k <fichier> : affichage des k premières lignes
◼ tail –n k <fichier> : affichage des k dernières lignes
◼ Par exemple :
• cat fic : affiche le contenu de fic
◼ cat fic1 fic2… : affiche la concaténation des fichiers indiqués
• echo coucou | cat : affiche coucou
◼ wc fic : compte les lignes, mots et caractères du fichier • cat > fic : écrit ce qui est tapé en entrée standard dans fic
◼ Option –l, uniquement les lignes ; -w, les mots ; -c, les caractères
Trier les lignes de fichiers texte Recherche d’un motif dans du texte (1/3)
◼ Options : ◼ Exemples :
-v : inverse le motif (affiche les lignes qui ne le contiennent grep warning *.log
pas) Affiche les lignes contenant warning de tous les
-r : traite récursivement les fichiers dans le dossier passé fichiers .log du dossier courant
en argument grep -i warning *.log
-i : ignore la casse Comme ci-dessus, mais en ignorant la casse
-q : n’affiche rien, seul le code de retour indique le résultat grep -v '^[mn]' fic
Utile pour seulement tester la présence du motif Affiche les lignes de fic ne commençant pas par m ou n
Code de retour 0 ⇔ motif trouvé grep '(.*)$' fic
◼ D’autres options à consulter dans la page du manuel Afficher les lignes qui se terminent par des caractères
quelconques entre parenthèses
13 CSC 3102 Outils indispensables 14 CSC 3102 Outils indispensables
◼ Lecture/écriture : ◼ Lecture/écriture :
• echo, read • echo, read
◼ Le calcul : ◼ Le calcul :
• expr • expr
◼ Lecture/écriture : ◼ Lecture/écriture :
• echo, read • echo, read
◼ Des redirections
• echo coucou >fic
◼ Quand bash interprète une commande, il exécute, dans • read line <fic
l’ordre : • exec 3>fic; echo coucou >&3
• Analyse « déclaration de variables » – « commande et
arguments » – « redirections » ◼ Des tubes anonymes
• Substitution des variables et des motifs • cat /etc/passwd | grep root | cut -d’:’ -f3
• Puis ouverture des flux si redirections
• Puis exécution de la commande
$ ls $ ls
$ . $ mkdir test .
$
test
$ ls $ ls
$ mkdir test . $ mkdir test .
$ touch test/bip-422 $ touch test/bip-422
$ $ find . -name bip*
test ./test/bip-422 test
$
bip-422 bip-422
$ ls $ ls
$ mkdir test . $ mkdir test .
$ touch test/bip-422 $ touch test/bip-422
$ find . -name bip* $ find . -name bip*
./test/bip-422 test bip-64 ./test/bip-422 test bip-64
$ touch bip-64 $ touch bip-64
$ $ find . -name bip*
bip-422 ./bip-64 bip-422
$
bash commence par chercher le motif bip*
⇒ une correspondance trouvée dans le répertoire courant
⇒ bash transforme bip* en bip-64
⇒ bash execute find avec comme paramètre bip-64 !
◼ echo rep/19[7-9][[:digit:]][-_][[:upper:]]*
$ ls
$ mkdir test .
$ touch test/bip-422
$ find . -name bip*
./test/bip-422 test bip-64
$ touch bip-64
$ find . -name bip*
./bip-64 bip-422
$ find . -name "bip*"
./bip-64
./test/bip-422
$
bash n’interpère pas le motif bip* car entre guillements
⇒ bash execute find avec comme paramètre bip*
◼ Contexte :
• Des dizaines de processus s’exécutent simultanément sur une
machine
Les Processus
◼ Objectifs :
• Savoir observer les processus s’exécutant sur une machine
• Manipuler un processus en cours d’exécution
CSC3102 – Introduction aux systèmes d’exploitation • Comprendre comment sont ordonnancés les processus
François Trahay & Gaël Thomas
◼ Notions clés :
• Arborescence de processus, états d’un processus,
ordonnancement
Notion de processus
◼ Chaque processus possède un processus parent ◼ ps : affiche les processus s’exécutant à un instant donné
• Sauf le premier processus (systemd ou init, PID=1)
⇒ arborescence de processus $ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
◼ Deux types de processus : 0 S 1000 22995 1403 0 80 0 - 6285 - pts/1 00:00:00 bash
0 S 1000 29526 22995 0 80 0 - 128631 - pts/1 00:00:05 emacs
• Processus utilisateurs (attachés à un terminal) 0 S 1000 29826 22995 0 80 0 - 51571 - pts/1 00:00:00
• Daemons : processus qui assurent un service (détachés de tout oosplash
0 S 1000 29843 29826 1 80 0 - 275029 - pts/1 00:00:48
terminal) soffice.bin
systemd
0 R 1000 30323 22995 0 80 0 - 2790 - pts/1 00:00:00 ps
terminal chrome updatedb ps PID : affiche les information du processus avec ce PID
bash
emacs pstree
5 CSC 3102 CI5 - Processus 6 CSC 3102 CI5 - Processus
Observer les processus (suite) Observer les processus (suite)
◼ pstree : affiche l'arborescence des processus ◼ top : affiche dynamiquement des processus
$ top
$ pstree -pA top - 15:52:18 up 5 days, 2:04, 3 users, load average: 0,19, 0,12, 0,13
systemd(1)-+-ModemManager(535)-+-{gdbus}(675) Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
| `-{gmain}(580) %Cpu(s): 6,0 us, 1,3 sy, 0,1 ni, 92,5 id, 0,1 wa, 0,0 hi, 0,0 si, 0,0 st
|-NetworkManager(552)-+-dhclient(27331) KiB Mem: 8099392 total, 5840956 used, 2258436 free, 494524 buffers
| |-{NetworkManager}(673) KiB Swap: 10157052 total, 0 used, 10157052 free. 3114404 cached Mem
| |-{gdbus}(756) PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
| `-{gmain}(733) 866 root 20 0 731892 377196 346672 S 6,4 4,7 21:01.97 Xorg
|-acpid(692) 1375 trahay 9 -11 651480 11108 8052 S 6,4 0,1 23:23.48 pulseaudio
|-konsole(1403)-+-bash(22995)-+-emacs(29526)-+-{dconf worker}(29529) 1 root 20 0 176840 5420 3144 S 0,0 0,1 0:02.57 systemd
| | |-{gdbus}(29528) 2 root 20 0 0 0 0 S 0,0 0,0 0:00.01 kthreadd
| | `-{gmain}(29527) 3 root 20 0 0 0 0 S 0,0 0,0 0:04.34 ksoftirqd/0
| `-pstree(30412) 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H
`-{QProcessManager}(1411) 7 root 20 0 0 0 0 S 0,0 0,0 0:30.37 rcu_sched
◼ Chaque processus bash, y compris les scripts, définissent : ◼ Chaque processus bash, y compris les scripts, définissent :
• $$ : PID du bash courant • $$ : PID du bash courant
• $PPID : PID du parent du bash courant • $PPID : PID du parent du bash courant
$ echo $$ $ echo $$
20690 20690
$ echo $PPID $ echo $PPID
20689 20689
$ $ ps -p 20689,20690
PID TTY TIME CMD
20689 ?? 0:11.69 xterm -r
20690 ttys004 0:01.32 bash
$
9 CSC 3102 CI5 - Processus 10 CSC 3102 CI5 - Processus
◼ /proc/$PID/ contient :
• cmdline : texte de la ligne de commande ayant lancé le processus
1. Observer un processus
• exe : lien vers le fichier exécutable du programme
• environ : contenu de l'environnement
•
2. Processus en avant et arrière plan
fd : liens vers les fichiers ouverts
• …
$ ls /proc/29526
3. Cycle de vie d’un processus
attr coredump_filter gid_map mountinfo oom_score sessionid task
autogroup cpuset io mounts oom_score_adj smaps timers
auxv
cgroup
cwd
environ
limits
loginuid
mountstats
net
pagemap
personality
stack
stat
uid_map
wchan
4. Variables et processus
clear_refs exe map_files ns projid_map statm
cmdline fd maps numa_maps root status
comm fdinfo mem oom_adj sched syscall 5. Gestion des processus dans le système d’exploitation
◼ Par défaut, une commande s'exécute en avant-plan (en ◼ Par défaut, une commande s'exécute en avant-plan (en
anglais, foreground) anglais, foreground)
• bash crée un processus enfant et attend qu'il termine • bash est bloqué tant que le processus fils s'exécute
• Le processus enfant exécute le programme
$ $ xeyes
terminal terminal
xeyes
◼ Par défaut, une commande s'exécute en avant-plan (en ◼ Pour exécuter une commande arrière-plan (en anglais,
anglais, foreground) background)
• Quand le processus fils se termine, bash reprend son exécution • Terminer la commande par « & »
$ xeyes $
$ terminal terminal
bash bash
◼ Commande en arrière-plan (en anglais, background) ◼ Commande en arrière-plan (en anglais, background) :
• bash crée un enfant et n'attend pas qu'il se termine • bash et le processus fils s'exécutent en parallèle
• bash affiche le numéro de job (JobID) et le PID du fils • bash peut donc exécuter d'autres commandes
• Le processus enfant exécute le programme
◼ Chaque commande crée un processus ◼ Par défaut, un script est lancé dans un processus enfant
Sauf pour les commandes internes qui sont directement interprétées
par bash (exit, source…)
En attente
$ $ xeyes &
$
xeyes
bash bash
temps temps
xeyes xeyes
grep grep
bash bash
temps temps
xeyes xeyes
grep grep
bash bash
temps temps
2. Processus en avant et arrière plan ◼ Une variable peut être exportée chez un enfant
• La variable et sa valeur sont recopiées chez l’enfant à la création
• Les variables du père et du fils sont ensuite indépendantes
3. Cycle de vie d’un processus
• Par défaut une variable n’est pas exportée
4. Variables et processus • Marquer une variable comme exportée : export var
• Arrêter d’exporter une variable : unset var
5. Gestion des processus dans le système d’exploitation (détruit aussi la variable)
35 CSC 3102 CI5 - Processus 36 2015-2016 CSC 3102 Complément sur bash
Portée des variables Portée des variables
#! /bin/bash #! /bin/bash
export b export b
b="existe" b="existe"
echo "a: $a" echo "a: $a"
echo "b: $b" echo "b: $b"
variable_exportee.sh variable_exportee.sh
export b export b
b="existe" b="existe"
echo "a: $a" echo "a: $a"
echo "b: $b" echo "b: $b"
variable_exportee.sh variable_exportee.sh
variable_exportee.sh variable_exportee.sh
$ a="existe" #! /bin/bash
$ ./variable.sh ◼ Une variable exportée s’appelle une variable d’environnement
a: b="existe"
b: existe echo "a: $a" Par convention, son nom est en majuscules
$ export a echo "b: $b" ◼ Certaines variables sont souvent dans l’environnement :
$ ./variable.sh a="autre chose"
• HOME : chemin absolu du répertoire de connexion
a: existe variable.sh
b: existe – cd , cd ~ et cd $HOME sont des commandes équivalentes
$ echo "a: $a - b: $b" • PS1 : prompt (par défaut $)
#! /bin/bash
a: existe - b: • PATH : liste des répertoires de recherche des commandes
$ ./variable_exortee.sh export b – Rappel : entre chaque chemin, séparateur « : »
a: existe b="existe"
b: existe ◼ La commande env liste toutes les variables de l’environnement courant
echo "a: $a"
$ echo "b: $b" echo "b: $b"
b: ◼ La commande source charge un script (et ses variables !) dans le
$ variable_exportee.sh processus bash courant
• Exemple pour recharger la configuration Bash : source ~/.bashrc
43 CSC 3102 Le shell bash 44 2015-2016 CSC 3102 Complément sur bash
Partage de ressources
• Entrées-sorties
2. Processus en avant et arrière plan
Système d’exploitation
3. Cycle de vie d’un processus ◼ Gestion par le Système d'Exploitation
• Exclusion mutuelle
4. Variables et processus • Contrôle de l'accès au matériel
• Droits d'accès
processeur
5. Gestion des processus dans le système d’exploitation • Non-dépassement des limites disque mémoire
dur
◼ À un instant donné, le CPU n'exécute qu'un processus ◼ Entrées/sorties ⇒ attente d'une ressource (disque, carte
• Les autres processus attendent réseau, écran, etc.)
◼ L'ordonnanceur partage le CPU par « quantum de temps » (en ◼ Libération du CPU en attendant la ressource
anglais, timeslice)
Processus
• À la fin du timeslice, l’ordonnanceur préempte le processus P2 P2 P2
en attente
s’exécutant et choisit un autre processus
Processus P2 P1 P1 P2 P1
P1 P3 P1
P2 P1 P1 P2 P1 P1 prêt P3 P3 P2 P3 P3
Processus
prêt P3 P3 P2 P3 P3 P2
Processus
P1 P2 P3 P1 P3 P1 P2
Processus exécuté
P1 P2 P3 P1 P2 P3
exécuté t
t
destruction
La commutation a lieu lors de l'élection d'un processus :
Terminé • Sauvegarde du contexte du processus évincé
• Chargement du contexte du processus élu
création terminaison Contexte : ensemble des infos associées au processus
(kill, exit, fin) • Valeur des registres
élection • Informations mémoire (emplacement, etc.)
Prêt Actif
préemption
Restauration
du contexte
acquisition de la ressource attente d'une
Processus P1 P2 P1
(ou kill pour certaines ressource exécuté
attentes) Sauvegarde du
t
contexte
En attente Mem
55
55 2015-2016 CSC 3102 CI5et- Script
CI1 - Shell Processus
Shell
Présentation du cours
5 20/10/2021 CSC 3102 Communication entre processus 6 20/10/2021 CSC 3102 Communication entre processus
Les signaux Les signaux
◼ Deux signaux bien utiles ◼ Un processus peut attacher un gestionnaire dit de signal avec
• SIGTSTP : demande au système de suspendre un processus trap 'expression' sig
• SIGCONT : demande au système de le redémarrer ⇒ exécution de expression lors de la réception de sig
À faire avant de recevoir le signal (en gén., au début du programme)
◼ Bash utilise ces signaux :
◼ Un processus peut envoyer un signal à un destinataire avec
• control-z : envoie un SIGTSTP au processus au premier plan
• bg et fg : envoient un SIGCONT au processus stoppé kill -sig pid
(rappel : bg background, fg foreground) ◼ Où
• expression : expression quelconque bash
• sig : numéro de signal (nombre ou symbole comme USR1)
• pid : PID du processus destinataire
7 20/10/2021 CSC 3102 Communication entre processus 8 20/10/2021 CSC 3102 Communication entre processus
◼ Où Terminal 1 Terminal 2
• expression : expression quelconque bash
• sig : numéro de signal (nombre ou symbole comme USR1)
• pid : PID du processus destinataire
9 20/10/2021 CSC 3102 Communication entre processus 10 20/10/2021 CSC 3102 Communication entre processus
kill -USR1 $1 trap 'echo coucou' USR1 kill -USR1 $1 trap 'echo coucou' USR1
emetteur.sh echo "PID: $$" emetteur.sh echo "PID: $$"
$ $ ./recepteur.sh $ $ ./recepteur.sh
11 20/10/2021 CSC 3102 Communication entre processus 12 20/10/2021 CSC 3102 Communication entre processus
Principe de fonctionnement Principe de fonctionnement
#! /bin/bash #! /bin/bash #! /bin/bash #! /bin/bash
kill -USR1 $1 trap 'echo coucou' USR1 kill -USR1 $1 trap 'echo coucou' USR1
emetteur.sh echo "PID: $$" emetteur.sh echo "PID: $$"
$ $ ./recepteur.sh $ $ ./recepteur.sh
PID: 52075 PID: 52075
13 20/10/2021 CSC 3102 Communication entre processus 14 20/10/2021 CSC 3102 Communication entre processus
15 20/10/2021 CSC 3102 Communication entre processus 16 20/10/2021 CSC 3102 Communication entre processus
kill -USR1 $1 trap 'echo coucou' USR1 kill -USR1 $1 trap 'echo coucou' USR1
emetteur.sh echo "PID: $$" emetteur.sh echo "PID: $$"
19 20/10/2021 CSC 3102 Communication entre processus 20 20/10/2021 CSC 3102 Communication entre processus
À vous de jouer!
5 20/10/2021 CSC 3102 Communication entre processus 6 20/10/2021 CSC 3102 Communication entre processus
Principe de mise en œuvre Principe de mise en œuvre
#!/bin/bash #!/bin/bash
/tmp/canal /tmp/canal
#!/bin/bash #!/bin/bash
"Bonjour"
read line </tmp/canal read line </tmp/canal
echo "Reçoit $line" echo "Reçoit $line"
echo "Au revoir" >/tmp/canal au-revoir.sh echo "Au revoir" >/tmp/canal au-revoir.sh
7 20/10/2021 CSC 3102 Communication entre processus 8 20/10/2021 CSC 3102 Communication entre processus
/tmp/canal /tmp/canal
#!/bin/bash #!/bin/bash
9 20/10/2021 CSC 3102 Communication entre processus 10 20/10/2021 CSC 3102 Communication entre processus
11 20/10/2021 CSC 3102 Communication entre processus 12 20/10/2021 CSC 3102 Communication entre processus
La vie est malheureusement complexe ! La vie est malheureusement complexe !
◼ On fait souvent des envois/réceptions dans des boucles ◼ On fait souvent des envois/réceptions dans des boucles
#!/bin/bash #!/bin/bash #!/bin/bash #!/bin/bash
mkfifo tube mkfifo tube
while true; do while true; do while true; do while true; do
echo "yes" >tube read line <tube echo "yes" >tube read line <tube
done done done done
emetteur_tube.sh recepteur_tube.sh emetteur_tube.sh recepteur_tube.sh
13 20/10/2021 CSC 3102 Communication entre processus 14 20/10/2021 CSC 3102 Communication entre processus
◼ On fait souvent des envois/réceptions dans des boucles ◼ On fait souvent des envois/réceptions dans des boucles
#!/bin/bash #!/bin/bash #!/bin/bash #!/bin/bash
mkfifo tube mkfifo tube
while true; do while true; do while true; do while true; do
echo "yes" >tube read line <tube echo "yes" >tube read line <tube
done done done done
emetteur_tube.sh recepteur_tube.sh emetteur_tube.sh recepteur_tube.sh
15 20/10/2021 CSC 3102 Communication entre processus 16 20/10/2021 CSC 3102 Communication entre processus
◼ On fait souvent des envois/réceptions dans des boucles ◼ On fait souvent des envois/réceptions dans des boucles
#!/bin/bash #!/bin/bash #!/bin/bash #!/bin/bash
mkfifo tube mkfifo tube
while true; do while true; do while true; do while true; do
echo "yes" >tube read line <tube echo "yes" >tube read line <tube
done done done done
emetteur_tube.sh recepteur_tube.sh emetteur_tube.sh recepteur_tube.sh
17 20/10/2021 CSC 3102 Communication entre processus 18 20/10/2021 CSC 3102 Communication entre processus
La vie est malheureusement complexe ! La vie est malheureusement complexe !
◼ On fait souvent des envois/réceptions dans des boucles ◼ On fait souvent des envois/réceptions dans des boucles
#!/bin/bash #!/bin/bash #!/bin/bash #!/bin/bash
mkfifo tube mkfifo tube
while true; do while true; do while true; do while true; do
echo "yes" >tube read line <tube echo "yes" >tube read line <tube
done done done done
emetteur_tube.sh recepteur_tube.sh emetteur_tube.sh recepteur_tube.sh
emetteur_tube_exec.sh recepteur_tube_exec.sh
• Effet connexe : ni l’émetteur ni le récepteur ne bloquent pendant (redirection avancée pas nécessaire chez le
récepteur dans ce cas, mais bonne habitude
l’ouverture s’il n’existe pas encore d’interlocuteur à prendre car souvent, un récepteur est
aussi un émetteur)
21 20/10/2021 CSC 3102 Communication entre processus 22 20/10/2021 CSC 3102 Communication entre processus
Retour sur les tubes anonymes Retour sur les tubes anonymes
◼ Tube anonyme : comme tube nommé, mais sans nom cat /etc/passwd | grep root
Lecture à
Écriture Tube anonyme partir de l’entrée
◼ Le « | » entre deux processus shell crée un tube anonyme sur sortie standard
cmd_gauche | cmd_droite standard
• Sortie standard de cmd_gauche connectée au tube Lecture Écriture
fichier grep sur sortie
• Entrée standard de cmd_droite connectée au tube cat
/etc/passwd standard
Terminal
23 20/10/2021 CSC 3102 Communication entre processus 24 20/10/2021 CSC 3102 Communication entre processus
Commande utile : tee Notions clés
Lit à partir de
/etc/passwd ◼ Tubes anonyme (|)
• Comme un tube nommé, mais sans nom dans le système de
Écrit dans fichier
Disque dur /tmp/result
25 20/10/2021 CSC 3102 Communication entre processus 26 20/10/2021 CSC 3102 Communication entre processus
À vous de jouer !
100
P2 : débite le compte d’Igor de 100 euros
read b < compte-igor
Enfants 1 puis 2 Enfants 1 et 2 en parallèle Enfants 2 puis 1
b=$(expr $b – 100)
echo $b > compte-igor Fichier partagé par P1 et P2
Donnée incohérente!
5 18/11/2021 CSC 3102 Communication entre processus 6 18/11/2021 CSC 3102 Communication entre processus
Problème de la mise à jour concurrente Problème de la mise à jour concurrente
100 100
P2 : débite le compte d’Igor de 100 euros P2 : débite le compte d’Igor de 100 euros
read b < compte-igor read b < compte-igor
b=$(expr $b – 100) b=$(expr $b – 100)
echo $b > compte-igor echo $b > compte-igor
7 18/11/2021 CSC 3102 Communication entre processus 8 18/11/2021 CSC 3102 Communication entre processus
9 18/11/2021 CSC 3102 Communication entre processus 10 18/11/2021 CSC 3102 Communication entre processus
11 18/11/2021 CSC 3102 Communication entre processus 12 18/11/2021 CSC 3102 Communication entre processus
Problème de la mise à jour concurrente Principe de solution
P1 : crédite le compte d’Igor de 2 euros Éviter que deux sections de code accédant au même fichier
read a < compte-igor partagé puissent s’exécuter en même temps
a=$(expr $a + 2) a : 102 ⇒ on parle de sections de code en exclusion mutuelle
Fichier
echo $a > compte-igor
compte-igor Sections critiques : sections de code en exclusion mutuelle
P2 se termine
102 ⇒ les sections critiques s’exécutent entièrement l’une après
⇒ commutation de P2 vers P1
l’autre
⇒ P1 exécute le echo
Le retrait de 100 euros a été perdu! Remarque : une section critique est souvent en exclusion mutuelle
avec elle-même
13 18/11/2021 CSC 3102 Communication entre processus 14 18/11/2021 CSC 3102 Communication entre processus
◼ Mutex : verrou (lock) en exclusion mutuelle ◼ Le verrou a été introduit par Edsger W. Dijkstra en 1965
E. W. Dijkstra. 1965. Solution of a problem in concurrent programming control.
Commun. ACM 8, 9, pp. 569-569.
◼ Principe :
◼ Puis généralisé par Edsger W. Dijkstra avec les sémaphores
• Verrouille le verrou avant d’entrer en section critique E. W. Dijkstra. 1968. The structure of the “THE”-multiprogramming system.
• Déverrouille le verrou à la sortie d’une section critique Commun. ACM 11, 5, pp. 341-346.
15 18/11/2021 CSC 3102 Communication entre processus 16 18/11/2021 CSC 3102 Communication entre processus
Exemple Exemple
P1 : crédite le compte d’Igor de 2 euros 100 P1 : crédite le compte d’Igor de 2 euros 100
P.sh compte-igor.lock P.sh compte-igor.lock
read a < compte-igor compte-igor read a < compte-igor compte-igor
a=$(expr $a + 2) a=$(expr $a + 2)
echo $a > compte-igor echo $a > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
compte-igor.lock compte-igor.lock
P2 : débite le compte d’Igor de 100 euros P2 : débite le compte d’Igor de 100 euros
P.sh compte-igor.lock P.sh compte-igor.lock
read b < compte-igor read b < compte-igor
b=$(expr $b – 100) b=$(expr $b – 100)
echo $b > compte-igor echo $b > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
17 18/11/2021 CSC 3102 Communication entre processus 18 18/11/2021 CSC 3102 Communication entre processus
Exemple Exemple
P1 : crédite le compte d’Igor de 2 euros 100 P1 : crédite le compte d’Igor de 2 euros 100
P.sh compte-igor.lock P.sh compte-igor.lock
read a < compte-igor compte-igor read a < compte-igor compte-igor
a=$(expr $a + 2) a : 100 a=$(expr $a + 2) a : 102
echo $a > compte-igor echo $a > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
compte-igor.lock compte-igor.lock
P2 : débite le compte d’Igor de 100 euros P2 : débite le compte d’Igor de 100 euros
P.sh compte-igor.lock P.sh compte-igor.lock
read b < compte-igor read b < compte-igor
b=$(expr $b – 100) b=$(expr $b – 100)
echo $b > compte-igor echo $b > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
19 18/11/2021 CSC 3102 Communication entre processus 20 18/11/2021 CSC 3102 Communication entre processus
Exemple Exemple
P1 : crédite le compte d’Igor de 2 euros 100 P1 : crédite le compte d’Igor de 2 euros 102
P.sh compte-igor.lock P.sh compte-igor.lock
read a < compte-igor compte-igor read a < compte-igor compte-igor
a=$(expr $a + 2) a : 102 a=$(expr $a + 2) a : 102
echo $a > compte-igor echo $a > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
compte-igor.lock compte-igor.lock
P2 : débite le compte d’Igor de 100 euros P2 : débite le compte d’Igor de 100 euros
P.sh compte-igor.lock Commutation de P1 vers P2 P.sh compte-igor.lock Commutation de P1 vers P2
read b < compte-igor P2 bloque car verrou pris read b < compte-igor P2 bloque car verrou pris
b=$(expr $b – 100) b=$(expr $b – 100) ⇒ réélection de P1
echo $b > compte-igor echo $b > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
21 18/11/2021 CSC 3102 Communication entre processus 22 18/11/2021 CSC 3102 Communication entre processus
Exemple Exemple
23 18/11/2021 CSC 3102 Communication entre processus 24 18/11/2021 CSC 3102 Communication entre processus
Exemple Exemple
102 102
compte-igor compte-igor
compte-igor.lock compte-igor.lock
P2 : débite le compte d’Igor de 100 euros P2 : débite le compte d’Igor de 100 euros
P.sh compte-igor.lock P.sh compte-igor.lock
read b < compte-igor read b < compte-igor
b : 102 b=$(expr $b – 100) b:2
b=$(expr $b – 100)
echo $b > compte-igor echo $b > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
25 18/11/2021 CSC 3102 Communication entre processus 26 18/11/2021 CSC 3102 Communication entre processus
Exemple Exemple
2 2
compte-igor compte-igor
compte-igor.lock compte-igor.lock
P2 : débite le compte d’Igor de 100 euros P2 : débite le compte d’Igor de 100 euros
P.sh compte-igor.lock P.sh compte-igor.lock
read b < compte-igor read b < compte-igor
b:2 b:2
b=$(expr $b – 100) b=$(expr $b – 100)
echo $b > compte-igor echo $b > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock
27 18/11/2021 CSC 3102 Communication entre processus 28 18/11/2021 CSC 3102 Communication entre processus
29 18/11/2021 CSC 3102 Communication entre processus 30 18/11/2021 CSC 3102 Communication entre processus
Attention à l’inter-blocage Attention à l’inter-blocage
◼ Processus P1 ◼ Processus P1
P.sh v1.lock P.sh v1.lock
P.sh v2.lock P.sh v2.lock
… …
V.sh v2.lock v1.lock V.sh v2.lock v1.lock
V.sh v1.lock V.sh v1.lock
◼ Processus P2 ◼ Processus P2
P.sh v2.lock P.sh v2.lock
v2.lock v2.lock
P.sh v1.lock P.sh v1.lock
… …
V.sh v1.lock V.sh v1.lock
V.sh v2.lock V.sh v2.lock
31 18/11/2021 CSC 3102 Communication entre processus 32 18/11/2021 CSC 3102 Communication entre processus
◼ Processus P2 ◼ Processus P2
P.sh v2.lock P.sh v2.lock
v2.lock v2.lock
P.sh v1.lock P.sh v1.lock P2 bloqué car
… … v1.lock est pris
V.sh v1.lock V.sh v1.lock par P1
V.sh v2.lock V.sh v2.lock
33 18/11/2021 CSC 3102 Communication entre processus 34 18/11/2021 CSC 3102 Communication entre processus
35 18/11/2021 CSC 3102 Communication entre processus 36 18/11/2021 CSC 3102 Communication entre processus
Notions clés À vous de jouer!
37 18/11/2021 CSC 3102 Communication entre processus 38 18/11/2021 CSC 3102 Communication entre processus