Csc3102 Cours.3x2

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 81

CSC 3102 – COURS

Introduction aux systèmes


d’exploitation

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

Commandes utiles utilisées dans le cours


cat fich Affiche le contenu du fichier fich sur la sortie standard.
echo args Affiche les arguments args sur la sortie standard.
expr expression Calcule le résultat de l’expression arithmétique indiquée en
argument et affiche le résultat sur la sortie standard. Attention, ne
travaille qu’en arithmétique entière. Typiquement, vous pouvez
incrémenter un compteur i avec l'expression suivante i=$(expr
$i + 1).
grep [opt] motif fich Affiche sur la sortie standard les lignes de fich correspondant au
motif bash motif. Si l'option –v est précisée, les lignes ne
correspondant pas au motif motif sont affichées. Si aucun nom
de fichier n'est donné, fait la recherche à partir de l'entrée
standard. Les motifs utilisés par grep sont différents de ceux
utilisés par bash et nous invitons les étudiants à consulter la page
de man. Pour grep, le caractère ^ indique le début de ligne et le
caractère $ indique la fin de ligne.
du [opt] fich Affiche la taille du fichier fich en nombre de blocs suivi du nom
du fichier (un bloc correspond à 512 octets). L'option -h permet
d'afficher la taille en utilisant des unités de mesure plus usitées
par les humains.
read var Copie la ligne de caractères lue sur l'entrée standard dans la
variable var. Typiquement, pour lire une ligne d'un fichier, on
utilise read var < fichier. Pour lire un fichier ligne à ligne, on
utilise while read var; do echo $var; done < fichier.
touch fich Crée le fichier fich si il n'existait pas.
which cmd Indique le chemin absolue de la commande cmd après avoir
recherché cmd dans le PATH.
alias cmd='...' cmd devient un alias pour la commande .... alias sans autres
options donnent la liste des alias utilisés par bash.
unalias cmd Supprime l'alias associé à cmd.
source script.sh ou . Exécute les instructions de script.sh dans le processus courant.
script.sh

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.

tree [chem] Affiche l'arborescence des fichiers accessibles à partir de chem. Si


chem n'est pas spécifié, utilise le répertoire courant.
mkdir [opt] rep Crée le répertoire rep dans le répertoire courant. Si l'option -p est
passée en argument, les répertoires intermédiaires sont aussi
créés.
mv f1 f2 Déplace le fichier f1 dans le fichier f2. Cette commande peut
aussi s'appliquer à des répertoires. Si f2 existait déjà, son ancien
contenu est perdu. Après l’opération, f1 n’existe plus.
pwd Permet de connaître le chemin absolu du répertoire courant (celui
dans lequel on se trouve).
rm f1 Détruit le fichier f1.
rmdir rep Détruit le répertoire rep, à condition que celui­ci soit vide.
Variables notables
HOME Chemin vers le répertoire de connextion.
PS1 Prompt utilisé par bash. Par exemple PS1="\w$ " permet d'avoir un
prompt qui indique le répertoire courant.
PS2 Prompt en cas de commandes sur plusieurs lignes.
PATH Liste de chemins séparés par des « : » dans lesquels bash
recherche les commandes.
Redirection des entrées­sorties
exec n<> fichier Ouvre le flux de numéro n en écriture à partir de fichier (en
écrasant son contenu).
Par exemple : exec 3<>mon-tube.pipe. Dans la suite du script, on
peut alors exécuter echo coucou >&3 pour lire une donnée ou read
x <&3 pour écrire une donnée.
exec n> fichier Ouvre le flux de numéro n en écriture à partir de fichier (en
écrasant son contenu).
exec n>> fichier Ouvre le flux de numéro n en écriture à partir de fichier (en
ajout).
exec n< fichier Ouvre le flux de numéro n en lecture à partir de fichier.
cmd >&n Redirige la sortie standard de la commande cmd dans le flux
numéro n.
cmd <&n Redirige l'entrée standard de la commande cmd à partir du flux
numéro n.
cmd > fichier Ouvre un flux en écriture à partir de fichier (en écrasant son
contenu), avant de rediriger la sortie de cmd dans le flux.
cmd >> fichier Ouvre un flux en écriture à partir de fichier (en ajout à la fin),
avant de rediriger la sortie de cmd dans le flux.
cmd < fichier Ouvre un flux en lecture à partir de fichier, avant de rediriger
l'entrée de cmd à partir du flux.
Processus
; Permet de séparer deux commandes exécutées en séquentiel.
& Exécute la commande à gauche en arrière plan.
$$ Identifiant (PID) du processus en cours d’exécution.
$PPID Identifiant (PID) du processus père du processus en cours
d’exécution.
$! Identifiant (PID) du dernier processus lancé en arrière plan.
$? Valeur de retour de la dernière commande exécutée en premier
plan.
exit [n] Interrompre l’exécution d’un script avec la valeur de retour n. Par
convention, une commande renvoie une valeur différente de 0 en
cas d'erreur et 0 sinon.
export var Crée une copie de la variable var lorsque le processus engendre
des enfants. La variable sera aussi exportée par les enfants.
wait [n1 n2 ...] Bloque le processus courant tant que les fils dont les identifiants
sont passés en paramètre ne sont pas terminés. Si aucun
paramètre n’est donné, le processus attend la fin de tous ses fils.
$(xyz) Le shell substitue à $(xyz) le texte produit sur la sortie standard
par l’exécution de la commande xyz.
ps [opt] Affiche la liste des processus en cours d'exécution. 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 (PPID, état, priorité...).
e: affiche la liste de tous les processus (pas seulement ceux
attachés au terminal courant).
u: affiche le nom de l'utilisateur qui a lancé chaque
processus.

pstree Affiche l'arborescence des processus.


top Fournie une vue dynamique temps réel des processus en cours
d'exécution.
Arguments
$# Nombre de paramètres de la ligne de commande.
$n avec n ∈ [0,9] Valeur du ne paramètre. $0 correspond au nom de la commande
invoquée. $n correspond à la chaîne vide s’il y a moins de n
paramètres.
"$@" Donne l'ensemble des paramètres à partir de $1 en préservant
les espaces à l'intérieur de chaque paramètre. Équivalent à écrire
"$1" "$2" ....
shift [n] Décale d’un cran les paramètres du script (pas de valeur n) ou
bien de “n crans” (si n est précisé). Par exemple, dans le cas où n
n'est pas spécifié, $2 devient $1, $3 devient $2 etc... Attention :
Le comportement n'est pas spécifié si le nombre de paramètres
n'est pas suffisant.
Chaînes et protections de caractères
\x Un \ protège n’importe quel caractère ayant normalement un
sens particulier pour le shell. Par exemple, \* est interprété
comme le caractère * et non comme le motif *. \\ correspond au
caractère \.
"xyz" Protège la chaîne xyz du découpage sur les espaces lors de la
séparation des arguments. Empêche l’interprétation des méta­
caractères du langage, sauf $, ` et \. En particulier, les variables
($mavar) et les substitutions de commandes ($(xyz)) sont
($mavar) et les substitutions de commandes ($(xyz)) sont
interprétées.
'xyz' Protège la chaîne xyz du découpage, comme les guillemets, mais
n’effectue aucune substitution. Aucun caractère autre que ' n’a
de sens particulier dans une chaîne entre apostrophes, pas
même \.
Tests
[ -z ch1 ] Renvoie vrai si la chaîne de caractères ch1 est vide.
[ -n ch1 ] Renvoie vrai si la chaîne de caractères ch1 est non vide.
[ ch1 = ch2 ] Renvoie vrai si les chaînes de caractères ch1 et ch2 sont égales.
[ ch1 != ch2 ] Renvoie vrai si les chaînes de caractères ch1 et ch2 sont
différentes.
[ n1 -eq n2 ] Renvoie vrai si les nombres n1 et n2 sont égaux. Par exemple, [
"01" -eq "1" ] renvoie vrai puisque les nombres sont égaux,
alors que [ "01" = "1" ] renvoie faux puisque les chaînes de
caractères sont différentes.
[ n1 -ne n2 ] Renvoie vrai si les nombres n1 et n2 sont différents.
[ n1 -lt n2 ] Renvoie vrai si le nombre n1 est strictement inférieur au nombre
n2.
[ n1 -le n2 ] Renvoie vrai si le nombre n1 est inférieur ou égal au nombre n2.
[ n1 -gt n2 ] Renvoie vrai si le nombre n1 est strictement supérieur au nombre
n2.
[ n1 -ge n2 ] Renvoie vrai si le nombre n1 est supérieur ou égal au nombre n2.
[ -e chemin ] Renvoie vrai si le chemin chemin existe dans le système de fichier
(fichier, répertoire, lien symbolique...).
[ -f chemin ] Renvoie vrai si chemin correspond à un fichier.
[ -d chemin ] Renvoie vrai si chemin correspond à un répertoire.
[ -L chemin ] Renvoie vrai si chemin correspond à un lien symbolique.
! test Renvoie vrai si test renvoie faux. Par exemple ! [ 42 -eq 67 ]
renvoie vrai.
test1 && test2 Renvoie vrai si test1 et test2 renvoie vrai.
test1 || test2 Renvoie vrai si test1 ou test2 renvoie vrai.
Structures de contrôle
if test1; then Execute corps1 si le test test1 renvoie vrai. Dans le cas où test1
corps1 renvoie faux, exécute corps2 si test2 renvoie vrai et corps3 sinon.
elif test2; then
corps2
Les parties elif et else sont optionnelles.
else
corps3
fi

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

CSC 3102 2 CSC 3102 De l'ordinateur au processus

Définition d’un ordinateur

◼ Machine électronique capable d’exécuter des instructions


effectuant des opérations sur des nombres
I. Qu’est ce qu’un ordinateur ? - 1946 : ENIAC
(calculateur à tubes
30 tonnes, 72m2
pour 330 mult/s)
- Un processeur actuel
(Intel i5) : 5.28*10⁶
opérations (à virgule
flottante) par seconde

CSC 3102 4 CSC 3102 De l'ordinateur au processus

Définition d’un ordinateur Définition d’un ordinateur

◼ 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

- Janv 1948 : SSEC


(premier ordinateur chez
IBM) avec
une capacité mémoire de
150 nombres
- Ordinateur récent avec
4 Go de mémoire : 10⁶
nombres entiers

5 CSC 3102 De l'ordinateur au processus 6 CSC 3102 De l'ordinateur au processus


Schéma de haut niveau d’un ordinateur Schéma de haut niveau d’un ordinateur

◼ Processeur : unité capable d’effectuer des calculs


Mémoire vive Carte graphique
◼ Mémoire vive : matériel stockant des données directement
accessibles par le processeur
Accès rapide, données perdues en cas de coupure électrique.
Par exemple : SDRAM (Synchronous Dynamic Random Access Memory)
Bus de communication
◼ Périphériques : matériel fournissant ou stockant des données
secondaires
Réseau, disque dur, souris, clavier, carte graphique, carte son…
Internet
◼ Bus de communication : bus interconnectant le processeur, la
Processeur Disque dur Carte mémoire vive et les périphériques
Réseau

7 CSC 3102 De l'ordinateur au processus 8 CSC 3102 De l'ordinateur au processus

Fonctionnement d’un processeur Fonctionnement d’un ordinateur

◼ Un processeur exécute des instructions qui peuvent


• Effectuer des calculs Et c’est tout!
• Accéder à la mémoire
• Accéder aux autres périphériques
• Sélectionner l’instruction suivante à exécuter (saut) Un ordinateur ne sait rien faire de mieux que des calculs

◼ Le processeur identifie une instruction par un numéro


(Par exemple : 1 = additionne, 2 = soustrait, etc.)

9 CSC 3102 De l'ordinateur au processus 10 CSC 3102 De l'ordinateur au processus

Ce qu’il faut retenir

◼ Une machine est constituée d’un processeur, d’une mémoire


vive et de périphériques, le tout interconnecté par un bus

◼ Un processeur exécute de façon séquentielle des instructions II. Logiciels et programmes


qui se trouvent en mémoire

◼ Chaque instruction est identifiée par un numéro, elle peut


• Effectuer une opération sur des variables internes (registres)
• Lire ou écrire en mémoire ses registres
• Accéder à un périphérique
• Modifier la prochaine instruction à effectuer (saut)

11 CSC 3102 De l'ordinateur au processus CSC 3102


L’ordinateur vu par l’utilisateur

◼ L’utilisateur installe des logiciels


Microsoft office, Chrome, Civilization V…

◼ Logiciel = ensemble de fichiers III. Processus et système


• Fichiers ressources : images, vidéos, musiques…
• Fichiers programmes : fichier contenant des données et des
instructions destinées à être exécutées par un ordinateur

◼ In fine, l’utilisateur lance l’exécution de programmes


Excel, Word, Chrome, Civilization V, CivBuilder (permet de
construire des cartes pour civilization V)…

13 CSC 3102 De l'ordinateur au processus CSC 3102

Du programme au processus Gestion des processus

◼ Le système d’exploitation est un logiciel particulier qui gère


◼ Un processus est un programme en cours d’exécution les processus
• Contient bien sûr les opérations du programme • Un noyau de système
• Mais aussi son état à un instant donné (Le noyau du système est le seul programme qu’on n’appelle pas
– Données en mémoire manipulées par le programme processus quand il s’exécute)
– État des périphériques (fichiers ouverts, connexions réseaux…) • Un ensemble de programmes utilitaires
– ...
◼ Rôle du système d’exploitation
• Démarrer des processus
• Arrêter des processus
• Offrir une vision de haut niveau du matériel aux processus
• Offrir des mécanismes de communication inter-processus

15 CSC 3102 De l'ordinateur au processus 16 CSC 3102 De l'ordinateur au processus

Naissance des premiers systèmes UNIX Utilité d’un système d’exploitation ?

◼ 1969 : première version d’UNIX en assembleur ◼ Est-ce bien utile ?


◼ 1970 : le nom UNIX est créé • Ca doit bien l’être vu qu’il y en a sur nos ordinateurs et nos
téléphones
◼ 1971 : invention du langage de programmation C pour réécrire
• Mais il y a des plates-formes qui n’en ont pas
UNIX dans un langage de haut niveau – dans ce cas, une seule application tourne
– mais on veut tout faire en même temps (travailler, écouter de la
musique, …)

◼ L’utilité du système d’exploitation est donc de permettre le


multi-tâches


Vidéo sur les systèmes d'exploitation à regarder

Ken Thompson Dennis Ritchie Brian Kernighan


17 CSC 3102 De l'ordinateur au processus 18 CSC 3102
Comment gérer le multi-tâches ? Objectif du module

◼ 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)

19 CSC 3102 20 CSC 3102 De l'ordinateur au processus


◼ Terminal et shell

◼ Le langage bash
Le shell bash ◼ Les variables

◼ Les structures algorithmiques

◼ Arguments d’une commande


CSC3102 - Introduction aux systèmes d’exploitation
Élisabeth Brunet et Gaël Thomas ◼ Commandes imbriquées

CSC 3102 2 CSC 3102 Le shell bash

Le terminal Le terminal

◼ Porte d’entrée d’un ordinateur


Un ordinateur n’a pas toujours un terminal intégré

◼ 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

Remarque : lorsqu’un terminal est fermé,


Terminaux virtuels tous les processus attachés au terminal sont détruits

5 CSC 3102 Le shell bash 6 CSC 3102 Le shell bash


Le shell

Le shell est un programme permettant d’interagir avec les ◼ Terminal et shell


services fournis par un système d’exploitation
◼ Le langage bash

◼ Les variables

◼ Les structures algorithmiques

◼ Arguments d’une commande

◼ Commandes imbriquées

Shell en mode graphique Shell en mode texte


(Bureau windows, X-windows…) (bash, tcsh, zsh, ksh, cmd.exe…)

7 CSC 3102 Le shell bash 8 CSC 3102 Le shell bash

Le Bourne-Again Shell (bash) Remarque importante

◼ Dans ce cours, nous étudions le shell en mode texte bash


En mode texte car permet d’écrire des scripts ! Dans la suite du cours, nous utiliserons souvent le terme « shell »
pour désigner le « Bourne-Again shell »
◼ Attaché à un terminal virtuel en mode texte

Mais n’oubliez pas que bash n’est qu’un shell parmi de


nombreux autres shells (bash, tcsh, zsh, ksh, cmd.exe…)

9 CSC 3102 Le shell bash 10 CSC 3102 Le shell bash

Bash Un texte bash

◼ Interpréteur de commandes ◼ Un texte est formé de mots bash


• Lit des commandes (à partir du terminal ou d’un fichier)
• Exécute les commandes ◼ Un mot bash est
• Écrit les résultats sur son terminal d’attache • Formé de caractères séparés par des délimiteurs
(délimiteurs : espace, tabulation, retour à la ligne)
◼ Bash définit un langage, appelé le langage bash Exemple : Coucou=42!* est un unique mot
• Structures de contrôle classiques • Exceptions :
(if, while, for, etc.) – ; & && | || ( ) ` sont des mots ne nécessitant pas de
• Variables délimiteurs
– Si une chaîne de caractères est entourée de "" ou '', bash
considère un unique mot
◼ Accès rapide aux mécanismes offert par le noyau du système
d’exploitation (tube, fichiers, redirections, …) bash est sensible à la casse (c.-à-d., minuscule ≠ majuscule)

11 CSC 3102 Le shell bash 12 CSC 3102 Le shell bash


Un texte bash Un texte bash

◼ Un texte est formé de mots ◼ Un texte est formé de mots

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

13 CSC 3102 Le shell bash 14 CSC 3102 Le shell bash

Invocation d’une commande bash Invocation d’une commande bash

◼ Invocation d’une commande : ◼ Invocation d’une commande :


var1=val1 var2=val2… cmd arg1 arg2… var1=val1 var2=val2… cmd arg1 arg2…
(tout est optionnel sauf cmd) (tout est optionnel sauf cmd)
• Lance la commande cmd avec les arguments arg1, arg2… et • Lance la commande cmd avec les arguments arg1, arg2… et
les variables var1, var2… affectées aux valeurs val1, val2… les variables var1, var2… affectées aux valeurs val1, val2…

$ $ echo Salut tout le monde

15 CSC 3102 Le shell bash 16 CSC 3102 Le shell bash

Invocation d’une commande bash Invocation d’une commande bash

◼ Invocation d’une commande : ◼ Invocation d’une commande :


var1=val1 var2=val2… cmd arg1 arg2… var1=val1 var2=val2… cmd arg1 arg2…
(tout est optionnel sauf cmd) (tout est optionnel sauf cmd)
• Lance la commande cmd avec les arguments arg1, arg2… et • Lance la commande cmd avec les arguments arg1, arg2… et
les variables var1, var2… affectées aux valeurs val1, val2… les variables var1, var2… affectées aux valeurs val1, val2…

$ echo Salut tout le monde $ echo Salut tout le monde


Salut tout le monde

17 CSC 3102 Le shell bash 18 CSC 3102 Le shell bash


Invocation d’une commande bash Invocation d’une commande bash

◼ Invocation d’une commande : ◼ Invocation d’une commande :


var1=val1 var2=val2… cmd arg1 arg2… var1=val1 var2=val2… cmd arg1 arg2…
(tout est optionnel sauf cmd) (tout est optionnel sauf cmd)
• Lance la commande cmd avec les arguments arg1, arg2… et • Lance la commande cmd avec les arguments arg1, arg2… et
les variables var1, var2… affectées aux valeurs val1, val2… les variables var1, var2… affectées aux valeurs val1, val2…

$ echo "Salut tout le monde" $ echo "Salut tout le monde"

19 CSC 3102 Le shell bash 20 CSC 3102 Le shell bash

Invocation d’une commande bash La première commande à connaître

◼ Invocation d’une commande : ◼ man 1 cmd


var1=val1 var2=val2… cmd arg1 arg2… • man pour manuel : donne de l’aide
(tout est optionnel sauf cmd) • 1 (optionnel) indique la section d’aide de la commande
• Lance la commande cmd avec les arguments arg1, arg2… et – 1 : commandes
les variables var1, var2… affectées aux valeurs val1, val2… • cmd est la commande dont on veut consulter le manuel

$ echo "Salut tout le monde" $ man ls


Salut tout le monde

21 CSC 3102 Le shell bash 22 CSC 3102 Le shell bash

La première commande à connaître Caractères spéciaux de bash

◼ man 1 cmd ◼ Caractères spéciaux


• man pour manuel : donne de l’aide • \ ' ` " > < $ # * ~ ? ;( ) { }
• 1 (optionnel) indique la section d’aide de la commande (' est appelé quote ou apostrophe
– 1 : commandes alors que ` est appelé antiquote ou accent grave)
• cmd est la commande dont on veut consulter le manuel • Explication de chacun donnée dans la suite du cours

◼ Désactiver l’interprétation des caractères spéciaux


• \ désactive l’interprétation spéciale du caractère suivant
• '…' ⇒ désactive l’interprétation dans toute la chaîne
• "…" ⇒ seuls sont interprétés les caractères $ \ ` (accent grave)

23 CSC 3102 Le shell bash 24 CSC 3102 Le shell bash


Script bash Structure d’un script bash
◼ Programme bash = texte bash dans un fichier texte ◼ Première ligne : #! /bin/bash
• Interprétable par bash au lancement par l’utilisateur • #! : indique au système que ce fichier est un ensemble de
• Modifiable par un éditeur de texte (p. ex. emacs, vi, mais pas word !) commandes à exécuter par l’interpréteur dont le chemin suit
• Un programme bash doit être rendu exécutable avec : – par exemple : /bin/sh, /usr/bin/perl, /bin/awk, etc.
chmod u+x mon_script.sh • /bin/bash lance bash
(notion vue dans le CI2 sur le système de fichiers)
• Par convention, les noms de script sont suffixés par l’extension « .sh »
– p. ex., mon_script.sh ◼ Puis séquence structurée de commandes shell
#! /bin/bash

◼ Invocation du script nommé mon_script.sh avec commande1


• ./mon_script.sh commande2
./ indique que le script se trouve … mon_script.sh
• Avec ses arguments :
dans le répertoire courant
./mon_script.sh arg1 arg2 (notion vue dans le CI2) ◼ Sortie implicite du script à la fin du fichier
• Sortie explicite avec la commande exit
25 CSC 3102 Le shell bash 26 CSC 3102 Le shell bash

Variables bash

◼ Terminal et shell
◼ Déclaration/affectation avec = (exemple ma_var=valeur)
◼ Le langage bash

◼ Les variables ◼ Consultation en préfixant du caractère $ (exemple $ma_var)

◼ Les structures algorithmiques


◼ Saisie interactive : read var1 var2 ... varn
◼ Arguments d’une commande • Lecture d’une ligne saisie par l’utilisateur (jusqu’au retour chariot)
• Le premier mot va dans var1
◼ Commandes imbriquées • Le second dans var2
• Tous les mots restants vont dans varn

27 CSC 3102 Le shell bash 28 CSC 3102 Le shell bash

Variables bash Variables bash - exemple

$
◼ 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

29 CSC 3102 Le shell bash 30 CSC 3102 Le shell bash


Variables bash - exemple Variables bash - exemple

$ a=42 $ a=42
$ $ echo $a
42
$

31 CSC 3102 Le shell bash 32 CSC 3102 Le shell bash

Variables bash - exemple Variables bash - exemple

$ a=42 $ a=42
$ echo $a $ echo $a
42 42
$ s='Bonjour, monde!!!' $ s='Bonjour, monde!!!'
$ $ echo $s
Bonjour, monde!!!
$

33 CSC 3102 Le shell bash 34 CSC 3102 Le shell bash

Variables bash - exemple Variables bash - exemple

$ 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
$

35 CSC 3102 Le shell bash 36 CSC 3102 Le shell bash


Variables bash - exemple Variables bash - exemple

$ 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
$

37 CSC 3102 Le shell bash 38 CSC 3102 Le shell bash

Variables bash - exemple

$ a=42 ◼ Terminal et shell


$ echo $a
42 ◼ Le langage bash
$ s='Bonjour, monde!!!'
$ echo $s
Bonjour, monde!!!
◼ Les variables
$ read x
Ceci est une phrase ◼ Les structures algorithmiques
$ echo $x
Ceci est une phrase ◼ Arguments d’une commande
$ read x y
Ceci est une phrase
$ echo $x ◼ Commandes imbriquées
Premier mot
Ceci
$ echo $y
Tous les mots qui suivent
est une phrase

39 CSC 3102 Le shell bash 40 CSC 3102 Le shell bash

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

• Sur des lignes séparées • Si alors … sinon ( si alors … sinon … )


• Sur une même ligne en utilisant le caractère point virgule (;) pour • elif et else sont optionnels
séparateur

41 CSC 3102 Le shell bash 42 CSC 3102 Le shell bash


Conditions de test Conditions de test

◼ 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

43 CSC 3102 Le shell bash 44 CSC 3102 Le shell bash

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

• Si alors … sinon ( si alors … sinon … ) x=1


y=2
◼ test est une commande renvoyant vrai (valeur 0) ou faux • elif et else sont optionnels if [ $x -eq $y ]; then
echo "$x = $y"
(valeur différente de 0) en fonction de l’expression qui la suit elif [ $x -ge $y ]; then
echo "$x >= $y"
if [ $x -eq 42 ]; then else
echo "$x < $y"
echo coucou
fi
fi

Équivaut à
if test $x -eq 42; then
echo coucou
fi

45 CSC 3102 Le shell bash 46 CSC 3102 Le shell bash

if cond; then if cond; then


cmds cmds
Schéma alternatif (case) elif cond; then
cmds
Schéma alternatif (case) elif cond; then
cmds
else else
cmds cmds
◼ Schéma alternatif simple fi ◼ Schéma alternatif simple fi

• Si alors … sinon ( si alors … sinon … ) • Si alors … sinon ( si alors … sinon … )


• elif et else sont optionnels case mot in • elif et else sont optionnels case mot in
motif1) motif1)
…;; …;;
motif2) motif2)
…;; …;;
*) *)
◼ Schéma alternatif multiple …;; ◼ Schéma alternatif multiple …;;
• Si mot vaut motif1 … esac • Si mot vaut motif1 … esac

Sinon si mot vaut motif2 … Sinon si mot vaut motif2 … res="fr"


Sinon … Sinon … case $res in
"fr")
• Motif : chaîne de caractères pouvant • Motif : chaîne de caractères pouvant echo "Bonjour";;
utiliser des méta-caractères (voir CI3) utiliser des méta-caractères (voir CI3) "it")
echo "Ciao";;
• * ) correspond au cas par défaut • * ) correspond au cas par défaut *)
echo "Hello";;
47 CSC 3102 Le shell bash 48 CSC 3102
esac Le shell bash
Schémas itératifs Schémas itératifs
while cond; do while cond; do
cmds cmds
◼ Boucles done ◼ Boucles done
• while • while
x=10
– Tant que … faire … – Tant que … faire … while [ $x –ge 0 ]; do
– Mot clé break pour sortir de la boucle – Mot clé break pour sortir de la boucle read x
echo $x
done

49 CSC 3102 Le shell bash 50 CSC 3102 Le shell bash

Schémas itératifs Schémas itératifs


while cond;
<cond>do
; do while cond;
<cond>do
; do
<cmds>
cmds <cmds>
cmds
◼ Boucles done ◼ Boucles done
• while • while
x=10 x=10
– Tant que … faire … while [ $x –ge 0 ]; do
– Tant que … faire … while [ $x –ge 0 ]; do
– Mot clé break pour sortir de la boucle read x – Mot clé break pour sortir de la boucle read x
echo $x echo $x
done done
• for • for
– Pour chaque … dans … faire … for var in liste; do – Pour chaque … dans … faire … for var in liste; do
– var correspond à la variable d’itération cmds – var correspond à la variable d’itération cmds
done done
– liste : ensemble sur lequel var itère – liste : ensemble sur lequel var itère
for var in 1 2 3 4; do
echo $var
done

51 CSC 3102 Le shell bash 52 CSC 3102 Le shell bash

Arguments d’une commande

◼ Terminal et shell ◼ mon_script.sh arg1 arg2 arg3 arg4 …


⇒ chaque mot est stocké dans une variable numérotée
◼ Le langage bash
mon_script.sh arg1 arg2 arg3 arg4 …
◼ Les variables "$0" "$1" "$2" "$3" "$4" …

◼ Les structures algorithmiques • "$0" : toujours le nom de la commande


• "$1" … "$9" : les paramètres de la commande
◼ Arguments d’une commande
• $# : nombre de paramètres de la commande
◼ Commandes imbriquées • "$@" : liste des paramètres : "arg1" "arg2" "arg3" "arg4" …
• shift : décale d’un cran la liste des paramètres

53 CSC 3102 Le shell bash 54 CSC 3102 Le shell bash


Arguments d’une commande Arguments d’une commande
#! /bin/bash #! /bin/bash
for i in "$@"; do for i in "$@"; do
echo $i echo $i
done done
mon_echo.sh mon_echo.sh

$ $./mon_echo.sh
$

55 CSC 3102 Le shell bash 56 CSC 3102 Le shell bash

Arguments d’une commande Arguments d’une commande


#! /bin/bash #! /bin/bash
for i in "$@"; do for i in "$@"; do
echo $i echo $i
done done
mon_echo.sh 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
$

57 CSC 3102 Le shell bash 58 CSC 3102 Le shell bash

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

◼ Arguments d’une commande

◼ Commandes imbriquées

59 CSC 3102 Le shell bash 60 CSC 3102 Le shell bash


Imbrication de commandes Imbrication de commandes

◼ 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).
$

61 CSC 3102 Le shell bash 62 CSC 3102 Le shell bash

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

◼ Besoin de mémoriser des informations


• Photos, PDF, données brutes, exécutables d’applications, le système
d’exploitation lui-même, etc.
Système de Fichiers
◼ Organisation du stockage sur mémoire de masse
• Localisation abstraite grâce à un chemin dans une arborescence
• Unité de base = fichier

CSC3102 – Introduction aux systèmes d’exploitation ◼ Exemples de types de systèmes de fichiers


Élisabeth Brunet & Gaël Thomas • NTFS pour Windows, ext2, ext3, ext4 pour Linux, HFSX pour Mac-OS
• FAT pour les clés USB, ISO pour les CD
• … et des myriades d’autres types de systèmes de fichiers

CSC 3102 2 2015-2016 CSC 3102 Système de Fichiers

Qu’est-ce qu’un fichier

◼ Le système de fichiers vu par un processus ◼ Un fichier est la réunion de


• Un contenu, c’est-à-dire un ensemble ordonné d’octets
◼ Le système de fichiers sur disque • Un propriétaire
• Des horloges scalaires (création, dernier accès, dernière modif)
◼ Les commandes utilisateurs • Des droits d’accès (en lecture, en écriture, en exécution)

◼ Attention : c’est inattendu, mais un fichier est indépendant de


◼ Les droits d’accès
son nom (c.-à-d., le nom ne fait pas parti du fichier et un fichier
peut avoir plusieurs noms)

3 2015-2016 CSC 3102 Système de Fichiers 4 2015-2016 CSC 3102 Système de Fichiers

On stocke de nombreux fichiers Organisation en répertoires

◼ 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 ?

◼ Solution : en rangeant les fichiers dans des répertoires (aussi


appelés dossiers) script.sh
#! /bin/bash

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

Arborescence standard Arborescence standard


des systèmes d’exploitation UNIX des systèmes d’exploitation UNIX
La racine est référencée La racine est référencée
par le nom vide par le nom vide

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)

◼ En bash, le séparateur de répertoires est le caractère /

◼ Un chemin s’écrit sous la forme a/b/c qui référence


• le fichier c
home etc bin lib usr media …
• se trouvant dans le répertoire b
• se trouvant lui même dans le répertoire a
arya cersei daenerys … bin lib …

◼ Un chemin absolu part de la racine du système de fichiers


photo cours
Commence par le nom vide (racine), par exemple /a/b/c
/home/arya/photo/peinture.jpg
peinture.jpg
◼ Un chemin relatif part du répertoire de travail du processus
Commence par un nom non vide, par exemple a/b/c
13 2015-2016 CSC 3102 Système de Fichiers 14 2015-2016 CSC 3102 Système de Fichiers

Exemple de chemin absolu (2/2) Exemple de chemin relatif (1/3)


Un utilisateur peut utiliser ~ comme raccourci pour son répertoire de connexion
processus bash
lancé par arya

home etc bin lib usr media … cwd home etc bin lib usr media …

arya cersei daenerys … bin lib … arya cersei daenerys … bin lib …

photo cours photo cours


~/photo/peinture.jpg Pour le processus bash de arya
photo/peinture.jpg
peinture.jpg peinture.jpg
équivaut à
Remarque : un utilisateur peut référencer le répertoire
de connexion d’un autre utilisateur avec ~name
/home/arya/photo/peinture.jpg
(par exemple ~arya/photo/peinture.jpg)
15 2015-2016 CSC 3102 Système de Fichiers 16 2015-2016 CSC 3102 Système de Fichiers

Exemple de chemin relatif (2/3) Exemple de chemin relatif (3/3)


Chaque répertoire possède un fichier nommé . s’auto-référençant Chaque répertoire possède un fichier nommé .. référençant son
parent
processus bash
lancé par 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 processus bash


photo cours photo cours
Pour le processus bash de arya lancé par daenerys
./photo/peinture.jpg
équivaut à Pour le processus bash de daenerys
peinture.jpg peinture.jpg ../arya/photo/peinture.jpg
photo/peinture.jpg
équivaut à
/home/arya/photo/peinture.jpg
17 2015-2016 CSC 3102 Système de Fichiers 18 2015-2016 CSC 3102 Système de Fichiers
Remarque Exemple
#! /bin/bash

◼ Dans bash, quand vous écrivez ./script.sh, vous référencez


le fichier script.sh du répertoire de travail du processus bash echo "Bonjour, vous êtes dans le répertoire $PWD"
de votre terminal echo "Votre maison se trouve en $HOME"
echo "Et vous avez lancé le script $0"
/home/gael/tmp/script.sh

$ ./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

Explorer l’arborescence de fichiers Explorer l’arborescence de fichiers

◼ cd chem : change directory ◼ ls chem : list


⇒ change le répertoire courant vers chem ⇒ liste le chemin chem
Exemple : cd ../cersei; cd /home/arya/photo • Si chem absent : affiche le contenu du répertoire courant
(sans argument, cd va dans votre répertoire de connexion) • Si chem répertoire : affiche le contenu du répertoire chem
• Sinon si chem est un fichier : affiche le nom du fichier
◼ pwd : print working directory • Options utiles :
⇒ affiche le répertoire de travail (⇔ echo $PWD) -a : affiche les fichiers cachés (c.-à.d., commençant par '.')
-l : affichage long (propriétaire, droits d’accès, taille etc.)
-d : affiche le informations sur un répertoire au lieu de son contenu

21 2015-2016 CSC 3102 Système de Fichiers 22 2015-2016 CSC 3102 Système de Fichiers

Organisation des disques

◼ Une machine peut posséder plusieurs disques


◼ Le système de fichiers vu par un processus ◼ Et chaque disque peut être scindé en plusieurs partitions
Utile pour installer plusieurs systèmes d’exploitation ou pour
◼ Le système de fichiers sur disque augmenter l’indépendance entre les données utilisateurs et le
système d’exploitation
• Chaque partition possède son système de fichiers indépendant
◼ Les commandes utilisateurs
Disque 1 Disque 2
◼ Les droits d’accès Partition 2
(par exemple Linux) Partition 1
Partition 1 (par exemple données personnelles)
(par exemple windows)

Table des partitions Table des partitions

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)

◼ Un disque est identifié par le préfixe sd (scsi drive) ◼ 3 concepts fondamentaux


◼ Les disques sont numérotés a, b, c… • Le bloc : unité de transfert entre le disque et la mémoire
◼ Les partitions sont numérotées 1, 2, 3… (souvent 4096 octets)
(vous pouvez voir les disques/partitions en faisant ls /dev)
• L’inode (index node) : descripteur d’un fichier
– Type de l’inode (fichier ordinaire, répertoire, autres)
– Propriétaire, droits, dates de création/modification/accès
sda sdb – Taille
sda2 – Liste des blocs du contenu du fichier
sdb1 – …
sda1
• Donc, dans ce cours : fichier = inode + blocs du fichier
Table des partitions Table des partitions

25 2015-2016 CSC 3102 Système de Fichiers 26 2015-2016 CSC 3102 Système de Fichiers

Le système de fichiers sur disque (2/2) Montage d’une partition (1/2)

◼ 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

Montage d’une partition (2/2) Lien direct (1/2)

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)

sdb1 ◼ On peut créer plusieurs liens directs vers le même inode


Commande ln chem-cible chem-lien
home etc bin lib usr mnt sdb2 • Aucune différence entre le nom original et le nouveau nom
• Facilite l’accès à des fichiers à partir d’emplacements connus
arya daenerys bin lib windows
apollinaire.txt
arya …
photo cours Avec ses quatre dromadaires
home cersei
Program Files Don Pedro d’Alfaroubeira…

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)

◼ Le nom d’un inode dans un répertoire s’appelle un lien direct


(hard link en anglais, aussi appelé parfois lien dur, physique ou matériel)

◼ 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

Notion de lien symbolique (1/2) Notion de lien symbolique (2/2)

◼ Pour faire des raccourcis on utilise aussi des liens symboliques


Comme ln –s chem-cible chem-lien ◼ Avantages des liens symboliques
• Fichier spécial (type lien) dont le contenu est un chemin cible • Dès que le fichier cible est détruit, son espace est libéré
• Lorsque le système doit ouvrir le fichier, il ouvre la cible à la place (ouvrir le lien symbolique engendre alors une erreur)
de l’original • Un lien symbolique peut référencer un fichier quelconque, y
Avec ses quatre dromadaires compris appartenant à une autre partition
apollinaire.txt
arya … Don Pedro d’Alfaroubeira…
home cersei

◼ Principal inconvénient des liens symboliques
pedro.txt • En cas de déplacement du fichier cible, le lien symbolique peut
/home/arya/apollinaire.txt
… devenir invalide
Fichier de type lien symbolique

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

Il existe de nombreux types de fichiers

• Fichier ordinaire ◼ Le système de fichiers vu par un processus


• Répertoire
• Lien symbolique ◼ Le système de fichier sur disque
• Device : un fichier qui représente un périphérique
(disque dur, carte son, carte réseau, …)
◼ Les commandes utilisateurs
– Par exemple /dev/sda1
• Tube nommé : fichier spécial étudié en CI6
◼ Les droits d’accès
• Socket : fichier spécial proche des tubes (non étudié dans ce
cours)

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

◼ Commandes de base sur les fichiers ◼ Création d’un fichier ordinaire :


• Création • Au travers de logiciels
• Suppression – en particulier des éditeurs : emacs, vi, gedit, etc…
• Copie • touch chem : crée fichier vide + mise à jour heures modif.
• Déplacement / renommage
• Consultation ◼ Création d’un répertoire :
• Recherche • mkdir rep : make directory

◼ Commandes utilitaires bien pratiques ◼ Création d’un lien :


• Principales vues en TP • Lien dur : ln chem-cible chem-lien
• Lien symbolique : ln –s chem-cible chem-lien

37 2015-2016 CSC 3102 Système de Fichiers 38 2015-2016 CSC 3102 Système de Fichiers

Suppression d’un fichier (1/5) Suppression d’un fichier (2/5)

◼ 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

Suppression d’un fichier (3/5) Suppression d’un fichier (4/5)

◼ 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)

◼ Supprimer un fichier (tout type, sauf répertoire) ◼ cp src dest : copy


rm chem : remove Création d’un nouvel inode et duplication des blocs de données
• Suppression de l’entrée associée au chemin dans le répertoire • src correspond au chemin du fichier à copier
parent
– Décrémentation du compteur de liens directs de l’inode
• dest, au chemin où doit être copiée src
– Libère le fichier (inode + données) si compteur tombe à zéro
◼ Deux fonctionnements différents
◼ Supprimer un répertoire • Si dest est un répertoire, copie src dans le répertoire dest
• rmdir <rep> : suppression d’un répertoire vide (dans ce cas, multiples copies possibles avec cp fic1 fic2 … rep)
• rm –r <rep> : suppression récursive d’un répertoire et de tous • Sinon, copie src sous le nom dest
les sous-fichiers (sous-répertoires inclus)
(faites très attention avec cette commande !) ◼ L’option -r permet de copier récursivement un répertoire
• rm –i <rep> : demande confirmation avant suppression (utile !) (sans -r, si src est un répertoire, erreur)

43 2015-2016 CSC 3102 Système de Fichiers 44 2015-2016 CSC 3102 Système de Fichiers

Copie d’un fichier (2/3) Copie d’un fichier (3/3)

◼ cp src dest : copy ◼ cp src dest : copy


Création d’un nouvel inode et duplication des blocs de données Création d’un nouvel inode et duplication des blocs de données
• src correspond au chemin du fichier à copier • src correspond au chemin du fichier à copier
• dest, au chemin où doit être copiée src • dest, au chemin où doit être copiée src

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

Déplacement d’un fichier (1/7) Déplacement d’un fichier (2/7)

◼ 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

◼ Dans la même partition :


◼ Fonctionnement : arya apollinaire.txt Avec ses quatre dromadaires
• Déplacement dans la même partition home cersei … Don Pedro d’Alfaroubeira…
– Crée un lien direct à partir de dest puis supprime src …

• Déplacement sur une autre partition …
– Copie src vers dest puis supprime src mv /home/arya/apollinaire.txt /home/cersei/pedro.txt
48 2015-2016 Système de Fichiers
47 2015-2016 CSC 3102 Système de Fichiers CSC 3102
Déplacement d’un fichier (3/7) Déplacement d’un fichier (4/7)

◼ 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

◼ Dans la même partition : ◼ Dans la même partition :


arya apollinaire.txt Avec ses quatre dromadaires arya apollinaire.txt Avec ses quatre dromadaires
home cersei … Don Pedro d’Alfaroubeira… home cersei … Don Pedro d’Alfaroubeira…
… …

pedro.txt pedro.txt
… …
mv /home/arya/apollinaire.txt /home/cersei/pedro.txt mv /home/arya/apollinaire.txt /home/cersei/pedro.txt
49 2015-2016 Système de Fichiers 50 2015-2016 Système de Fichiers
CSC 3102 CSC 3102

Déplacement d’un fichier (5/7) Déplacement d’un fichier (6/7)

◼ 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

◼ Vers une autre partition : ◼ Vers une autre partition :


apollinaire.txt Avec ses quatre dromadaires apollinaire.txt Avec ses quatre dromadaires
arya Don Pedro d’Alfaroubeira… arya Don Pedro d’Alfaroubeira…
home … home …
mnt mnt
cersei … cersei pedro.txt Avec ses quatre dromadaires
… … Don Pedro d’Alfaroubeira…
mv /home/arya/apollinaire.txt /mnt/cersei/pedro.txt mv /home/arya/apollinaire.txt /mnt/cersei/pedro.txt
51 2015-2016 Système de Fichiers 52 2015-2016 Système de Fichiers
CSC 3102 CSC 3102

Déplacement d’un fichier (7/7)

◼ mv src dest : move (déplace ou renomme)


• src : fichier de type quelconque ◼ Le système de fichiers vu par un processus
• Si dest est un répertoire, déplace src dans le répertoire dest
(dans ce cas, multiples déplacements possibles avec
mv fic1 fic2 … rep)
◼ Le système de fichiers sur disque
• Sinon, déplace src sous le nom dest
– Si dest est dans le même répertore : renommage ◼ Les commandes utilisateurs
◼ Vers une autre partition :
apollinaire.txt Avec ses quatre dromadaires ◼ Les droits d’accès
arya Don Pedro d’Alfaroubeira…
home …
mnt
cersei pedro.txt Avec ses quatre dromadaires
… Don Pedro d’Alfaroubeira…
mv /home/arya/apollinaire.txt /mnt/cersei/pedro.txt
53 2015-2016 Système de Fichiers
CSC 3102 54 2015-2016 CSC 3102 Système de Fichiers
Droits d’accès Droits d’accès

◼ Toute opération sur un fichier est soumise à droits d’accès


• Message d’erreur « Permission non accordée »
◼ 3 catégories d’utilisateurs :
• Propriétaire (u)
◼ 3 types d’accès
• r : droit de lecture • Groupe propriétaire (g)
– Si répertoire, consultation de ses entrées (c.-à-.d, ls autorisé) • Tous les autres (o)
– Sinon, consultation du contenu du fichier
• w : droit d’écriture
– Si répertoire, droit de création, de renommage et de suppression d’une ◼ Chaque catégorie possède ses types d’accès r w x
entrée dans le répertoire
– Sinon, droit de modification du contenu du fichier
• x:
– si répertoire, droit de traverser (c.-à-.d., cd autorisé)
– sinon, droit d’exécution

55 2015-2016 CSC 3102 Système de Fichiers 56 2015-2016 CSC 3102 Système de Fichiers

Droits d’accès – consultation Droits d’accès – modification

◼ 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)

Type du fichier : $ ls –l fichier


d : répertoire - rwx r-- --- fichier
l : lien symbolique $
- : fichier ordinaire

57 2015-2016 CSC 3102 Système de Fichiers 58 2015-2016 CSC 3102 Système de Fichiers

Droits d’accès – modification Droits d’accès – modification

◼ Modification sur un fichier existant ◼ Modification sur un fichier existant


chmod droit fichier : change mode chmod droit fichier : change mode

◼ Droits à !appliquer! au fichier ◼ Droits à !appliquer! au fichier


• Catégories : u, g, o ou a (= all c.-à-.d., ugo) • Catégories : u, g, o ou a (= all c.-à-.d., ugo)
• Opérations : Ajout (+), retrait (-), affectation (=) • Opérations : Ajout (+), retrait (-), affectation (=)
$ ls –ld fichier $ ls –ld fichier
-rwx r-- --- fichier -rwx r-- --- fichier
$ $ chmod u-x fichier
$ ls –ld fichier
-rw- r-- --- fichier
$

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 $

chmod droit fichier : change mode

◼ Droits à !appliquer! au fichier


• Catégories : u, g, o ou a (= all c.-à-.d., ugo)
• Opérations : Ajout (+), retrait (-), affectation (=)
$ ls –ld fichier
-rwx r-- --- fichier
$ chmod u-x fichier
$ ls –ld fichier
-rw- r-- --- fichier
$ chmod u+x fichier
$ ls –ld fichier
-rwx r-- --- fichier

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

Démonstration Droits d’accès initiaux


$ cp /etc/passwd .
$ ls -l
◼ Masque de droits d’accès !retirés! à la création de tout fichier
total 4 • Commande umask (user mask)
-rw-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd • Le masque est donné en octal (base 8) avec 3 chiffres (u, g, o)
$ chmod u-r passwd
$ cat passwd • En standard, masque par défaut = 022
cat: passwd: Permission non accordée – r = 100 en binaire = 4 en octal, w = 010 = 2
$ mkdir rep – Si droits retirés --- -w- -w-, alors droits appliqués rw- r–- r--
$ ls -l
– Le droit x est déjà retiré par défaut en général
total 8
--w-r--r-- 1 gthomas users 1120 19 juil. 2016 passwd
drwxr-xr-x 2 gthomas users 68 19 juil. 2016 rep
$ cd rep/ • Modification du masque grâce à la commande umask
$ cd .. – Attention : umask sans effet rétroactif sur les fichiers préexistants
$ chmod u-x rep – Attention : umask n’a d’effet que sur le bash courant
$ cd rep
-bash: cd: rep: Permission non accordée

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

73 CSC 3102 74 CSC 3102

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 »

75 CSC 3102 76 CSC 3102

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

77 CSC 3102 78 CSC 3102


Conclusion En route pour le TP !
◼ Concepts clés :
• Arborescence, racine du système de fichier, répertoire de
connexion, répertoire de travail
• Chemin absolu, chemin relatif
• Droits d’accès
• Partition, inode
• Fichier, répertoire, liens (direct et symbolique)

◼ 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

◼ Code de retour d’un processus


Compléments sur bash
◼ Alias de commandes

◼ Fichier de configuration bash


CSC3102 – Introduction aux systèmes d’exploitation
Elisabeth Brunet & Gaël Thomas
◼ Filtrage de fichiers par motif

CSC 3102 2 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
yes!
$

3 2015-2016 CSC 3102 Complément sur bash 4 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
++++

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

La variable d’environnement PATH La variable d’environnement PATH

◼ PATH : ensemble de chemins séparés par des deux points (:)


Typiquement : PATH=/bin:/usr/bin

◼ 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

La variable d’environnement PATH Plan

Attention : il est fortement déconseillé de mettre . dans PATH ◼ Variables notables


(surtout si . est en tête du PATH)
◼ Code de retour d’un processus
• Avantage : mettre . dans PATH évite le ./ pour trouver les
commandes du répertoire de travail
◼ Alias de commandes
($ script.sh au lieu de $ ./script.sh)
• Mais n’importe quel virus/malware peut alors créer un cheval de
troie en : ◼ Fichier de configuration bash
– Plaçant un script nommé ls dans le répertoire /tmp
– Attendant tranquillement que l’administrateur entre dans /tmp ◼ Filtrage de fichiers par motif
– Attendant ensuite que l’administrateur lance ls dans /tmp,
=> lancement du ls du malware avec les droits administrateurs
La malware a pris le contrôle de la machine !
11 2015-2016 CSC 3102 Complément sur bash 12 2015-2016 CSC 3102 Complément sur bash
Code de retour d’un processus Code de retour d’un processus

◼ 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 $?

$ #! /bin/bash $ ./replay.sh 42 #! /bin/bash


$
exit $1 exit $1

replay.sh replay.sh

13 2015-2016 CSC 3102 Complément sur bash 14 2015-2016 CSC 3102 Complément sur bash

Code de retour d’un processus Code de retour d’un processus

◼ 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 42 #! /bin/bash $ ./replay.sh 42 #! /bin/bash


$ echo $? $ echo $?
42 exit $1 42 exit $1
$ $ if ./replay.sh 0; then echo coucou; fi
coucou
$

replay.sh replay.sh

15 2015-2016 CSC 3102 Complément sur bash 16 2015-2016 CSC 3102 Complément sur bash

Code de retour d’un processus Code de retour d’un processus

◼ 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

◼ Variables notables ◼ Sert à (re)définir le nom d’une commande


• Pour créer des noms abrégés ou passer des options
◼ Code de retour d’un processus
◼ Création :
◼ Alias de commandes alias cmd='…'

◼ Fichier de configuration bash ◼ Suppression :


unalias cmd
◼ Filtrage de fichiers par motif
◼ Consultation :
alias

19 2015-2016 CSC 3102 Complément sur bash 20 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 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

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
◼ 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

Plan Fichiers de configuration bash

◼ Variables notables ◼ Exécutés automatiquement au démarrage de bash


• La prise en compte d’une modification de configuration impose le
redémarrage de bash (ou l’utilisation de la source ~/.bashrc)
◼ Code de retour d’un processus ◼ Configuration
• Globale du système d’exploitation par l’administrateur
◼ Alias de commandes – Fichier /etc/profile
• Pour son compte par l’utilisateur
– Fichier ~/.bashrc (+ d’autres fichiers non étudiés dans ce cours)
◼ Fichier de configuration bash ◼ Opérations typiquement réalisées :
• Affectation de variables : PATH, PS1, etc.
◼ Filtrage de fichiers par motif • Déclaration de variables liées à des logiciels installés en sus
• Création d’alias
• Positionnement du masque des droits d’accès
• Etc.
27 2015-2016 CSC 3102 Complément sur bash 28 2015-2016 CSC 3102 Complément sur bash

Plan Filtrage de fichiers par motif (1/3)

◼ 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

◼ Filtrage de fichiers par motif

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

$ ls # contenu du répertoire $ ls # contenu du répertoire


CSC3101 CSC3102 CSC3601 CSC3602 NET3101 NET3102 CSC3101 CSC3102 CSC3601 CSC3602 NET3101 NET3102
$ echo CSC*1 # les cours CSC se terminant par 1 $ echo CSC*1 # les cours CSC se terminant par 1
CSC3101 CSC3601 CSC3101 CSC3601
$ $ echo CSC?1?? # les cours CSC de semestre 1
CSC3101 CSC3102
$

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)

◼ Filtre suivant un ensemble de caractères $ ls


CSC3102 CSC3501 CSC4501 CSC5001 NET3101 NET3102
• [...]  un caractère dans l’ensemble donné $ echo CSC[45]* # cours de 2A et 3A
• [!...]  un caractère hors de l’ensemble donné CSC4502 CSC5001

◼ 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

◼ Bash présente des variables d’environnement



PATH configure la localisation des exécutables des commandes
◼ Communication inter-processus avec le code de retour ($?)
◼ Alias de commandes
◼ Motifs pour écrire des sélections complexes de fichiers

*, ?, [...]

Interprétés par Bash

35 2015-2016 CSC 3102 Complément sur bash


Notion de flux

◼ Pour accéder aux données d’un fichier (écran, clavier, fichier


ordinaire…), le système d’exploitation définit une notion de flux

Les flux ◼ Un flux est définit par :


• Un fichier
• Une fonction de lecture : permet d’extraire des données du flux
• Une fonction d’écriture : permet d’ajouter des données au flux
CSC 3102
• Une tête de lecture/écriture : position dans le fichier pour les
Introduction aux systèmes d’exploitation lectures/écritures
Gaël Thomas
◼ Un flux est représenté par un numéro

CSC 3102 2 29/09/2021 CSC 3102 Les flux

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
$

• stdin (0) : standard input


– canal de lecture, par défaut clavier du terminal (celui de read) Tête de lecture/écriture
• stdout (1) : standard output dans le flux de sortie
– canal de sortie, par défaut écran du terminal (celui d’echo)
(écran associé au terminal)
• stderr (2) : standard error
– canal de sortie pour les erreurs, par défaut écran du terminal
– pour le moment, on n’utilise pas ce canal
3 29/09/2021 CSC 3102 Les flux 4 29/09/2021 CSC 3102 Les flux

Redirections simples

◼ Toute commande peut être lancée en redirigeant les flux du


1. Redirections simples processus vers un fichier

1: stdout un-autre-fichier
2. Redirections avancées 0: stdin
mon-fichier cmd
2: stderr fichier-d-erreur
3. Les tubes

4. Fichiers associés aux périphériques ◼ À ce moment :


• echo écrit dans un-autre-fichier
• read lit à partir de mon-fichier

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

◼ Lancement d’une commande en redirigeant un flux


• Un fichier associé au nouveau flux
• Le numéro du flux à rediriger cmd n[<,>,>>,<>]fic
• Un mode d’ouverture
Lance la commande cmd dans un nouveau processus après avoir
Lecture Écriture Tête de lecture Remarque
ouvert le flux numéro n associé au fichier fic avec le mode idoine
< Oui Non Au début
> Non Oui Au début Ancien contenu effacé $ echo coucou 1>fic
2 : stderr défaut
>> Non Oui À la fin
<> Oui Oui Au début
0 : stdin Processus
Remarque : lors d’une ouverture en écriture, défaut
echo 1 : stdout
le fichier est toujours créé s’il n’existe pas Fichier fic

7 29/09/2021 CSC 3102 Les flux 8 29/09/2021 CSC 3102 Les flux

Redirection de flux Redirection de 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

$ echo coucou 1>fic $ echo coucou >fic


2 : stderr défaut 2 : stderr défaut

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

Redirection de flux Redirection de flux

$ echo Coucou vous >fic $ echo Coucou vous >fic


Exécute echo en redirigeant Exécute read en redirigeant
$ $ read x y <fic
la sortie standard l’entrée standard
$
(redirection en écriture) (redirection en lecture)

Coucou vous Coucou vous

Fichier fic Fichier fic

11 29/09/2021 CSC 3102 Les flux 12 29/09/2021 CSC 3102 Les flux
Redirection de flux Redirection de flux

$ echo Coucou vous >fic $ echo Coucou vous >fic


$ read x y <fic $ read x y <fic
$ echo $x $ echo $x
Coucou Coucou
$ $ echo $y
vous
$

Coucou vous Coucou vous

Fichier fic Fichier fic

13 29/09/2021 CSC 3102 Les flux 14 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

É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

Fichier fic Fichier fic

15 29/09/2021 CSC 3102 Les flux 16 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

Valeur lue dans x


Étape 3 : exécute read ⇒ déplace la tête de lecture Étape 4 : affiche la variable x

Coucou Coucou
Tête de lecture Vous Tête de lecture Vous

Fichier fic Fichier fic

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

Valeur lue dans y


Étape 5 : exécute read ⇒ déplace la tête de lecture Étape 6 : affiche la variable y

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

Redirection de flux et regroupement Lecture d’un flux ligne à ligne

◼ 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

$ #! /bin/bash $ ./script.sh #! /bin/bash

while read line; do while read line; do


echo ":: $line" echo ":: $line"
done <fic done <fic
Fichier script.sh Ouverture du flux associé Fichier script.sh
à fic avant d’exécuter la boucle
Avec ses quatre dromadaires Tête de lecture Avec ses quatre dromadaires
Don Pedro d’Alfaroubeira Don Pedro d’Alfaroubeira

Fichier fic Fichier fic

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

$ ./script.sh #! /bin/bash $ ./script.sh #! /bin/bash


:: Avec ses quatre dromadaires
while read line; do while read line; do
echo ":: $line" echo ":: $line"
done <fic done <fic
read renvoie vrai car pas fin de fichier Fichier script.sh Fichier script.sh

Avec ses quatre dromadaires Avec ses quatre dromadaires


Tête de lecture Don Pedro d’Alfaroubeira Tête de lecture Don Pedro d’Alfaroubeira

Fichier fic Fichier fic

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

$ ./script.sh #! /bin/bash $ ./script.sh #! /bin/bash


:: Avec ses quatre dromadaires :: Avec ses quatre dromadaires
while read line; do :: Don Pedro d’Alfaroubeira while read line; do
echo ":: $line" echo ":: $line"
done <fic done <fic
read renvoie vrai car pas fin de fichier Fichier script.sh Fichier script.sh

Avec ses quatre dromadaires Avec ses quatre dromadaires


Don Pedro d’Alfaroubeira Don Pedro d’Alfaroubeira
Tête de lecture Tête de lecture
Fichier fic Fichier fic

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

$ ./script.sh #! /bin/bash $ ./script.sh #! /bin/bash


:: Avec ses quatre dromadaires :: Avec ses quatre dromadaires
:: Don Pedro d’Alfaroubeira while read line; do :: Don Pedro d’Alfaroubeira while read line; do
echo ":: $line" $ echo ":: $line"
done <fic done <fic
Fichier script.sh Termine la boucle, ferme le flux puis Fichier script.sh
read renvoie faux car fin de fichier termine le processus
(valeur de line indéfinie)
Avec ses quatre dromadaires Avec ses quatre dromadaires
Don Pedro d’Alfaroubeira Don Pedro d’Alfaroubeira
Tête de lecture
Fichier fic Fichier fic

29 29/09/2021 CSC 3102 Les flux 30 29/09/2021 CSC 3102 Les flux
Redirections avancées

◼ La commande exec redirige les flux du processus courant


1. Redirections simples (au lieu de lancer un nouveau processus)

2. Redirections avancées exec n[<,>,>>,<>]fic

3. Les tubes ⇒ ouvre le flux n associé à fic avec le mode idoine

◼ Et une redirection peut se faire vers n’importe quel flux ouvert


4. Fichiers associés aux périphériques

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

Redirections avancées Intérêt des redirections avancées

◼ Permet de lire et écrire dans plusieurs fichiers simultanément


$ echo coucou >fic #! /bin/bash

⇒ exec 3>redoublants # flux 3 pour les redoublants


Ouverture du flux 3 en
écriture vers le fichier fic while read etudiant note; do
$ exec 3>fic if [ "$note" –lt 10 ]; then
$ echo coucou >&3 echo $etudiant >&3
Redirection dans le flux 3
préalablement ouvert
fi
echo "Etudiant $etudiant a eu $note/20"
done <fichier-de-notes script.sh

Les redoublants sont ajoutés à la fin du fichier redoublants

33 29/09/2021 CSC 3102 Les flux 34 29/09/2021 CSC 3102 Les flux

Les tubes

◼ On peut rediriger la sortie d’une commande


1. Redirections simples dans l’entrée d’une autre
cmd1 | cmd2
• Exécute cmd1 et cmd2 en parallèle
2. Redirections avancées
• La sortie de cmd1 est redirigée dans l’entrée de cmd2

3. Les tubes ◼ À gros grain, comportement proche de


• cmd1 >temp-file
4. Fichiers associés aux périphériques • cmd2 <temp-file
• rm temp-file
(la mise en œuvre est différente et repose sur des concepts vus dans les
prochains cours)

35 29/09/2021 CSC 3102 Les flux 36 29/09/2021 CSC 3102 Les flux
Les tubes par l’exemple

◼ Chaînage de deux commandes utiles (vues au cours 4)


• cat fic : affiche le contenu de fic sur la sortie standard 1. Redirections simples
• grep motif : lit ligne à ligne l’entrée et n’affiche que celles qui
contiennent motif
2. Redirections avancées

$ cat dromadaire.txt 3. Les tubes


Avec ses quatre dromadaires
Don Pedro d'Alfaroubeira
Courut le monde et l'admira. 4. Fichiers associés aux périphériques
Il fit ce que je voudrais faire
Si j'avais quatre dromadaires.
$ cat dromadaire.txt | grep Pedro
Don Pedro d'Alfaroubeira

37 29/09/2021 CSC 3102 Les flux 38 29/09/2021 CSC 3102 Les flux

Redirection et fichiers de périphérique Redirection et fichiers de périphérique

◼ 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

• Périphérique logiciel appelé pseudo-périphérique Ligne de caractères aléatoires


• Suppression d’un affichage
– /dev/null : lecture donne une chaîne vide et écriture ne fait rien
– /dev/tty : terminal
$ echo "Je ne veux pas voir ça" >/dev/null
– /dev/urandom : générateur de nombres aléatoire $
– …

39 29/09/2021 CSC 3102 Les flux 40 29/09/2021 CSC 3102 Les flux

Concepts clés

◼ Un flux est la réunion de


• Un numéro représentant le flux
• Un mode d’ouverture (lecture/écriture, ajout/écrasement)
• Un fichier associé au flux

◼ Tout flux peut être redirigé avec


• cmd n[<,>,>>,<>]fic où fic est un fichier
(la commande exec ouvre le flux dans le processus courant)
• cmd n[<,>,<>]&k où k est un numéro de flux ouvert

◼ Le tube (|) permet de chaîner une sortie et une entrée


cmd1 | cmd2

41 29/09/2021 CSC 3102 Les flux


Plan

◼ 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

CSC 3102 2 CSC 3102 Outils indispensables

Nature d’une entrée du système de fichiers Nature d’une entrée du système de fichiers

◼ Traitement applicable à un fichier dépend de sa nature


• Est-ce un fichier texte ? Une image ? Une archive ? Un pdf ?
◼ La commande test teste aussi la nature d’un fichier
◼ Commande file : affiche la nature d’une entrée (rappel test cond peut s’écrire [ cond ] avec bash)
• Si texte, précise le type de codage
– ASCII s’il n’y a que des caractères, UTF-8 si caractères accentués, etc. • [ -e fichier ] : vrai si fichier existe
• [ -f fichier ] : vrai si fichier existe et est normal
$ file *
• [ -d fichier ] : vrai si fichier existe et est répertoire
TP3 directory • [ -L fichier ] : vrai si fichier existe et est un lien symbolique
TP3.html exported SGML document, UTF-8 Unicode text
(remarque : les autres tests suivent les liens symboliques)
Ci3.pdf PDF document, version 1.5
Ci3.pptx Microsoft Powerpoint 2010
Notes.txt ASCII text
Pedagogie.txt UTF-8 Unicode text

3 CSC 3102 Outils indispensables 4 CSC 3102 Outils indispensables

Taille de l’occupation disque Archivage


◼ df : connaître l’état d’occupation des partitions ◼ Commande tar (pour tape archive) ⇒ manipuler des archives
Archive = rassemblement d’une arborescence de fichiers en un seul fichier
◼ ls –lh chem … : taille des chemins cibles
• Si répertoire, donne la taille nécessaire au stockage de sa table • tar -czf fic.tgz rep : crée l’archive fic.tgz à partir de rep
• tar –xf fic.tgz : extrait l’archive fic.tgz
d’entrées mais n’inclut pas celle de ses sous-entrées
• tar -tf fic.tgz : liste le contenu de l’archive fic.tgz
• Si lien symbolique, donne sa taille, i.e. l’espace nécessaire au stockage
du chemin vers sa cible, ce qui correspond au nombre de caractères
de ce chemin • Option –c chem, pour créer l’archive à partir du chemin chem
• Option -v, pour un affichage en mode verbeux
◼ du : totalise l’occupation disque d’une entrée • Option -z, pour une compression des données au format gzip
• Si répertoire, parcours récursif de son arborescence • Option –f nom.tgz, pour préciser le nom de l’archive voulue
• Par défaut, donne le nombre de blocs occupés  Par convention, extension .tgz ou .tar.gz
– Option –h, pour afficher l’équivalent de ce nombre de blocs de manière • Option -x, pour extraire (-z, pour la décompression via gzip)
« lisible pour un humain » en o/K/M/G ⇒ décompression dans le répertoire courant
– Option –d0 pour éviter l’affichage des tailles des sous-répertoires • Option -t, pour lister
5 CSC 3102 Outils indispensables 6 CSC 3102 Outils indispensables
À propos de cat et
Affichage d’un fichier en mode texte
des commandes qui suivent
◼ Consultation du contenu d’un fichier ordinaire

◼ 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

7 CSC 3102 Outils indispensables 8 CSC 3102 Outils indispensables

Supprimer ou transformer des


Extraire des parties de lignes
caractères
◼ cut -c plage fic : extrait des caractères de chaque ligne
de fic
◼ tr s1 s2 : transforme chaque caractère de l’ensemble s1 en
• plage : num ou num1, num2, … ou num1-num2
ceux de l’ensemble s2
Exemple : cut –c3-7 fic.txt
(la commande ne prend pas de fichier en argument : toujours à
⇒ extrait les caractères 3 à 7 de fic.txt
partir de stdin)
• Exemple : cat fic | tr '\n ' 'ab'
◼ cut -d car -f plage fic : extraits des champs ⇒ transforme les retours à la ligne en a et les espaces en b
• -d car : car = séparateur de champs (tabulation par défaut) • Exemple : cat fic | tr '\n ' 'a'
• plage comme avec -c ⇒ transforme les retours à la ligne et espaces en a
Exemple : cut -d’ ’ -f2,4 fic.txt
⇒ extrait les 2ième et 4ième mots de chaque ligne de fic.txt ◼ tr –d s : élimine chaque caractère de la chaîne s
• Exemple : cat fic | tr -d 'aeiouy'
⇒ élimine les voyelles de fic
9 CSC 3102 Outils indispensables 10 CSC 3102 Outils indispensables

Trier les lignes de fichiers texte Recherche d’un motif dans du texte (1/3)

◼ sort fic… ◼ grep motif fic1 fic2 …


• Par défaut, tri lexicographique • Affiche les lignes des fichiers qui contiennent le motif
– Option -n pour un tri numérique – Peut aussi lire l’entrée standard : cat fic | grep motif
• Par défaut, tri appliqué en tenant compte de toute la ligne • Le motif est une expression régulière (ou rationnelle)
– Option –k x,x pour un tri selon le champs x – grep = global regular expression print
• sort –k 2,2 fic : tri selon le 2 champ de chaque ligne
ème • Pour CSC3102, seul un sous-ensemble d’expressions régulières
• sort –k 2,2 –k 3,3 fic : tri selon les 2ème et 3ème champs GNU
• Remarque : pour un tri non numérique, -k x,y pour champs x à y – Chaînes de caractères
• Par défaut, le séparateur de champs est l’espace – Attention ! Les méta-caractères de grep sont différents de ceux de
bash !
– Option –t <caractère> pour changer le séparateur
• . : n’importe quel caractère
• Option -r pour inverser l’ordre du tri appliqué • * : répétition du caractère précédent, 0 ou plusieurs fois
• Peut s’appliquer sur un ensemble de fichiers • […] (/ [^…]) : met en correspondance un caractère de (/hors) l’ensemble
• D’autres options à consulter dans la page du manuel • ^ / $ : ancre le motif au début / à la fin de la ligne
– Attention : mettre le motif entre guillemets simples (« ' »)
11 CSC 3102 Outils indispensables 12 CSC 3102 Outils indispensables
Recherche d’un motif dans du texte (2/3) Recherche d’un motif dans du texte (3/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

Recherche dans une arborescence Conclusion


◼ find : recherche des entrées satisfaisants un ensemble de
critères de sélection dans une arborescence ◼ Commandes clés :
• Parcourt récursivement et teste les critères sur chaque entrée • more, less, head, tail, cat, wc
• find rep_de_recherche liste des critères • cut, tr, sort, grep
– -name "<motif>" : précise le nom des entrées à rechercher • df, du, ls –lh
• <motif> est motif conforme à bash à l’exception des crochets [ … ]
• Attention : mettre le motif entre guillemets (« " ») • tar
– -type <type> : précise le type des entrées à rechercher • find,
• f : fichier normal ; d : dossier ; l : lien symbolique
– -print : permet l’affichage des résultats (par défaut)
– Exemple : find . –name core –print
 affiche les chemins des entrées nommées core de mon répertoire courant
find /usr –name "*.c" –print
 affiche les chemins des entrées dont le nom se terminent par .c sous /usr

15 CSC 3102 Outils indispensables 16 CSC 3102 Outils indispensables

En route pour le TP!

17 CSC 3102 Outils indispensables


Le langage bash

◼ Des variables : x=42; echo $x

◼ Des structures algorithmiques : if, for, while


Petit bilan à mi-module
◼ Des paramètres : shift, "$@", "$0", "$1", "$2"…

◼ Des codes de retour : exit n


CSC3102 – Introduction aux systèmes d’exploitation
Gaël Thomas
◼ Des imbrications de commandes : x=$(expr $x + 1)

1 CSC 3102 2 CSC 3102 CI5 - Processus

Des commandes de base Des commandes de base

◼ Lecture/écriture : ◼ Lecture/écriture :
• echo, read • echo, read

◼ Le système de fichier : ◼ Le système de fichier :


• ls, rm, cp, mv, ln, • ls, rm, cp, mv, ln, Nota bene :
• find, df, du, tar • find, df, du, tar
expr affiche son résultat
sur la sortie standard
$ expr 1 + 2
◼ Le contenu d’un fichier : ◼ Le contenu d’un fichier : 3
• cat, grep, cut, sort, tr • cat, grep, cut, sort, tr $

◼ Le calcul : ◼ Le calcul :
• expr • expr

3 CSC 3102 CI5 - Processus 4 CSC 3102 CI5 - Processus

Des commandes de base Des commandes de base

◼ Lecture/écriture : ◼ Lecture/écriture :
• echo, read • echo, read

◼ Le système de fichier : ◼ Le système de fichier :


• ls, rm, cp, mv, ln, Nota bene : • ls, rm, cp, mv, ln, Nota bene :
• find, df, du, tar
expr affiche son résultat • find, df, du, tar
expr affiche son résultat
sur la sortie standard sur la sortie standard
$ expr 1 + 2 $ expr 1 + 2
◼ Le contenu d’un fichier : 3 ◼ Le contenu d’un fichier : 3
• cat, grep, cut, sort, tr $ x=$(expr 1 + 2) • cat, grep, cut, sort, tr $ x=$(expr 1 + 2)
$ $ echo $x
3
◼ Le calcul : ◼ Le calcul : $
• expr • expr

5 CSC 3102 CI5 - Processus 6 CSC 3102 CI5 - Processus


Interprétation de commandes Les entrées/sorties

◼ 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

7 CSC 3102 CI5 - Processus 8 CSC 3102 CI5 - Processus

Les entrées/sorties Les entrées/sorties

◼ Des redirections ◼ Des redirections


• echo coucou >fic • echo coucou >fic
• read line <fic • read line <fic
• exec 3>fic; echo coucou >&3 • exec 3>fic; echo coucou >&3
$ ls $ ls Le flux, et donc le fichier plop, sont
bap bip bap bip
$ $ ls -l >plop créés avant de lancer la commande ls
$

9 CSC 3102 CI5 - Processus 10 CSC 3102 CI5 - Processus

Les entrées/sorties Les entrées/sorties

◼ Des redirections ◼ Des redirections


• echo coucou >fic • echo coucou >fic
• read line <fic • read line <fic
• exec 3>fic; echo coucou >&3 • exec 3>fic; echo coucou >&3
$ ls Le flux, et donc le fichier plop, sont $ ls
bap bip bap bip
$ ls -l >plop créés avant de lancer la commande ls $ ls -l >plop
$ cat plop ⇒ plop apparaît dans plop ! $ cat plop
total 96 total 96
-rw-r--r-- 1 gthomas staff 5925 11 oct 16:38 bap -rw-r--r-- 1 gthomas staff 5925 11 oct 16:38 bap
-rwxr-xr-x 1 gthomas staff 38512 11 oct 16:38 bip -rwxr-xr-x 1 gthomas staff 38512 11 oct 16:38 bip
-rw-r--r-- 1 gthomas staff 0 11 oct 16:39 plop -rw-r--r-- 1 gthomas staff 0 11 oct 16:39 plop
$ $ echo * >plip
$ cat plip Le motif est évalué avant la redirection
bap bip plop ⇒ plip n’apparaît pas dans plip !
11 CSC 3102 CI5 - Processus 12 CSC 3102 CI5 - Processus
Motifs bash, motifs de commandes Motifs bash, motifs de commandes

◼ echo rep/19[7-9][[:digit:]][-_][[:upper:]]* ◼ echo rep/19[7-9][[:digit:]][-_][[:upper:]]*

$ ls $ ls
$ . $ mkdir test .
$

test

13 CSC 3102 CI5 - Processus 14 CSC 3102 CI5 - Processus

Motifs bash, motifs de commandes Motifs bash, motifs de commandes

◼ echo rep/19[7-9][[:digit:]][-_][[:upper:]]* ◼ echo rep/19[7-9][[:digit:]][-_][[:upper:]]*

$ 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

bash commence par chercher le motif bip*


⇒ pas de correspondance trouvée dans le répertoire courant
⇒ bash conserve bip*
⇒ bash exécute find avec comme paramètre bip*

15 CSC 3102 CI5 - Processus 16 CSC 3102 CI5 - Processus

Motifs bash, motifs de commandes Motifs bash, motifs de commandes

◼ echo rep/19[7-9][[:digit:]][-_][[:upper:]]* ◼ echo rep/19[7-9][[:digit:]][-_][[:upper:]]*

$ 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 !

17 CSC 3102 CI5 - Processus 18 CSC 3102 CI5 - Processus


Motifs bash, motifs de commandes

◼ 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*

19 CSC 3102 CI5 - Processus


Présentation du cours

◼ 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

1 CSC 3102 2 CSC 3102 CI5 - Processus

Notion de processus

◼ Processus = programme en cours d'exécution


• Un espace mémoire + contexte d'exécution (fichiers ouverts, etc.)
1. Observer un processus
◼ Caractéristiques statiques
• PID : Process Identifier (identifie le processus) 2. Processus en avant et arrière plan
• PPID : Parent Processus Identifier (identifie le parent)
• Utilisateur propriétaire 3. Cycle de vie d’un processus
• Droits d'accès aux ressources (fichiers, etc.)
◼ Caractéristiques dynamiques 4. Variables et processus
• Priorité, environnement d’exécution, etc.
• Quantité de ressources consommées (temps CPU, etc.) 5. Gestion des processus dans le système d’exploitation

3 CSC 3102 CI5 - Processus 4 CSC 3102 CI5 - Processus

Arborescence de processus Observer les 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

gnome sshd cron

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

7 CSC 3102 CI5 - Processus 8 CSC 3102 CI5 - Processus

Variables relatives aux processus Variables relatives aux processus

◼ 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

Détail d'un 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

11 CSC 3102 CI5 - Processus 12 CSC 3102 CI5 - Processus


Processus en avant-plan Processus en avant-plan

◼ 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

bash bash (bloqué)

xeyes

13 CSC 3102 CI5 - Processus 14 CSC 3102 CI5 - Processus

Processus en avant-plan Processus en arrière-plan

◼ 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

15 CSC 3102 CI5 - Processus 16 CSC 3102 CI5 - Processus

Processus en arrière-plan Processus en arrière-plan

◼ 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

$ xeyes & $ xeyes &


[1] 35794 terminal [1] 35794 terminal
$ $ grep c bjr.txt
bash coucou bash

xeyes xeyes grep

17 CSC 3102 CI5 - Processus 18 CSC 3102 CI5 - Processus


Processus en arrière-plan Processus en arrière-plan

◼ Commande en arrière-plan (en anglais, background) : ◼ Commande en arrière-plan (background) :


• bash et le processus fils s'exécutent en parallèle • Quand le fils se termine, le système d’exploitation informe bash
• bash peut donc exécuter d'autres commandes

$ xeyes & $ xeyes &


[1] 35794 terminal [1] 35794 terminal
$ grep c bjr.txt $ grep c bjr.txt JobID
coucou bash coucou bash
$ $
[1]+ Done xeyes
xeyes
$

19 CSC 3102 CI5 - Processus 20 CSC 3102 CI5 - Processus

PID du dernier processus lancé

◼ Le PID du dernier processus lancé en arrière-plan est dans la


variable $!
1. Observer un processus
$ xeyes &
[1] 35794 2. Processus en avant et arrière plan
$ xeyes &
[2] 35795
$ echo $! 3. Cycle de vie d’un processus
35795
$ echo $!
35795
4. Variables et processus

5. Gestion des processus dans le système d’exploitation

21 CSC 3102 CI5 - Processus 22 CSC 3102 CI5 - Processus

Commandes et processus Scripts et processus

◼ 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…)

bash (8281) #! /bin/bash


bash vacances.sh (8281) #! /bin/bash if [ $1 –eq 0 ] || [ $1 –eq 1 ];
then
head –n 30 itineraire > debut_iti ./fibo 3 (16837) echo 1
head grep cut rm grep plage debut_iti> baignade else
(8282) (8287) (8293) (8297) cut –d’ ’ –f3 baignade > tresor n=$1
rm baignade fib1=$(./fibo $(expr $n – 1))
./fibo 2 (16838) ./fibo 1 (16841)
vacances.sh fib2=$(./fibo $(expr $n - 2))
echo $(expr $fib1 + $fib2 )
fi
./fibo 1 (16839) ./fibo 0 (16840) fibo

23 CSC 3102 CI5 - Processus 24 CSC 3102 CI5 - Processus


Suspendre un processus Suppression d'un processus

◼ Un processus se termine s’il atteint sa dernière instruction


◼ Suspendre un processus en avant-plan : control+z ◼ Ou s’il appelle exit
• Le processus est placé « en attente » ◼ Ou s’il reçoit un signal (voir CI6)
• control-c : tue le processus en avant plan (avec SIGINT)
◼ Reprendre un processus en attente • kill ou killall : tue un processus (avec SIGTERM)
• Pour le mettre en avant-plan : fg (foreground) – kill %JobID : tue le processus de numéro de job JobID
– kill PID : tue le processus d’identifiant PID
 fg N : mettre en avant-plan le job N
– killall prog : tue tous les processus dont le chemin du
• Pour le mettre en arrière-plan : bg (background)
programme est prog
 bg N : mettre en arrière-plan le job N
• Remarque : vous verrez en CI6 que les processus peuvent résister
à control-c, kill ou killall. Si c’est le cas, ajoutez -9
(SIGKILL) après kill/killlall pour forcer leur mort
25 CSC 3102 CI5 - Processus 26 CSC 3102 CI5 - Processus

États d'un processus Attendre la fin d’un processus

◼ La commande wait permet d’attendre la fin d’un fils


création destruction • wait sans argument : attend la fin de tous les fils
Terminaison, • wait %jobid1 %jobid2… ou wait pid1 pid2… : attend la
exit, kill, fin des processus passés en argument
control-C
En exécution Terminé

bg, fg, kill


control+z

En attente

27 CSC 3102 CI5 - Processus 28 CSC 3102 Le shell bash

Attendre la fin d’un processus Attendre la fin d’un processus

$ $ xeyes &
$

xeyes

bash bash
temps temps

Processus en exécution Processus en exécution Création de processus

29 CSC 3102 Le shell bash 30 CSC 3102 Le shell bash


Attendre la fin d’un processus Attendre la fin d’un processus

$ xeyes & $ xeyes &


$ grep gthomas /etc/passwd $ grep gthomas /etc/passwd
gthomas:x:501:20::/home/gthomas:/bin/bash
$

xeyes xeyes
grep grep
bash bash
temps temps

Processus en exécution Création de processus Processus en exécution Création de processus


Processus en attente Processus en attente Notification de fin de processus
31 CSC 3102 Le shell bash 32 CSC 3102 Le shell bash

Attendre la fin d’un processus Attendre la fin d’un processus

$ xeyes & $ xeyes &


$ grep gthomas /etc/passwd $ grep gthomas /etc/passwd
gthomas:x:501:20::/home/gthomas:/bin/bash gthomas:x:501:20::/home/gthomas:/bin/bash
$ wait $ wait
[1]+ Done xeyes
$

xeyes xeyes
grep grep
bash bash
temps temps

Processus en exécution Création de processus Processus en exécution Création de processus


Processus en attente Notification de fin de processus Processus en attente Notification de fin de processus
33 CSC 3102 Le shell bash 34 CSC 3102 Le shell bash

Variables bash et processus

◼ Une variable est toujours locale à un processus


1. Observer un processus ⇒ les modifications sont toujours locales

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

$ a="existe" #! /bin/bash $ a="existe" #! /bin/bash


$ $ ./variable.sh
b="existe" a: b="existe"
echo "a: $a" b: existe echo "a: $a"
echo "b: $b" $ echo "b: $b"
a="autre chose" a="autre chose"
variable.sh variable.sh

#! /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

37 CSC 3102 Le shell bash 38 CSC 3102 Le shell bash

Portée des variables Portée des variables

$ a="existe" #! /bin/bash $ a="existe" #! /bin/bash


$ ./variable.sh $ ./variable.sh
a: b="existe" a: b="existe"
b: existe echo "a: $a" b: existe echo "a: $a"
$ export a echo "b: $b" $ export a echo "b: $b"
$ a="autre chose" $ ./variable.sh a="autre chose"
variable.sh a: existe variable.sh
b: existe
#! /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

39 CSC 3102 Le shell bash 40 CSC 3102 Le shell bash

Portée des variables Portée des variables

$ a="existe" #! /bin/bash $ a="existe" #! /bin/bash


$ ./variable.sh $ ./variable.sh
a: b="existe" a: b="existe"
b: existe echo "a: $a" b: existe echo "a: $a"
$ export a echo "b: $b" $ export a echo "b: $b"
$ ./variable.sh a="autre chose" $ ./variable.sh a="autre chose"
a: existe variable.sh a: existe variable.sh
b: existe b: existe
$ echo "a: $a - b: $b" #! /bin/bash $ echo "a: $a - b: $b" #! /bin/bash
a: existe - b: a: existe - b:
$ export b $ ./variable_exportee.sh export b
b="existe" a: existe b="existe"
echo "a: $a" b: existe echo "a: $a"
echo "b: $b" $ echo "b: $b"

variable_exportee.sh variable_exportee.sh

41 CSC 3102 Le shell bash 42 CSC 3102 Le shell bash


Portée des variables Variables d’environnement

$ 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

◼ Ressources partagées par les processus


• CPU (cœur d’un processeur)
1. Observer un processus Proc Proc Proc Proc
• Mémoire 1 2 3 4

• 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

45 CSC 3102 CI5 - Processus 46 CSC 3102 CI5 - Processus

Partage du CPU Partage du CPU et entrées/sorties

◼ À 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

47 CSC 3102 CI5 - Processus 48 CSC 3102 CI5 - Processus


États d'un processus Commutation de processus
Le point de vue du système d’exploitation

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

49 CSC 3102 CI5 - Processus 50 CSC 3102 CI5 - Processus

Ordonnancement de processus Changer la priorité d’un processus


Exemple d’algorithme d’ordonnancement à priorité

 Une file d’attente des processus prêts  Exemple d'algorithme d'ordonnancement


par niveau de priorité
◼ Possibilité de changer manuellement la priorité d’un processus
• Choisir un processus de la file d’attente
 L’ordonnanceur choisit plus souvent les non vide de plus haute priorité • Exemple: baisser la priorité d’un programme qui indexe le contenu
processus de forte priorité • Si un processus consomme tout son d’un disque dur
 Ajustement de la priorité d’un processus timeslice : priorité--
au court de son exécution
• Régulièrement : priorité++ pour les
processus non élus ◼ Lancer un programme avec une certaine priorité
• $ nice –n priorité commande

◼ Changer la priorité d’un processus déjà lancé


priorité • $ renice –n priorité PID
file d'attente n
croissante Terminaison du
processus
file d'attente 1
entrée des
processus
file d'attente 0

51 CSC 3102 CI5 - Processus 52 CSC 3102 CI5 - Processus

Introduction à la concurrence Conclusion


◼ Concepts clés
◼ Accès concurrent à une ressource gérée par l'OS • Processus
• Disque dur, imprimante, sortie du terminal, … – Caractéristiques statiques et dynamiques
◼ L'OS assure l'exclusion mutuelle de ses ressources – Processus parent, processus enfant
• À tout moment, seul un processus manipule la ressource – Exécution en avant-plan, arrière-plan, suspension/reprise de
processus
$ ./do_ping.sh & ./do_pong.sh #!/bin/bash #!/bin/bash • Ordonnancement de processus
ping
pong while true; do while true; do – Quantum de temps, préemption
ping
pong
echo ping echo pong – changement de contexte
ping done done
pong ◼ Commandes clés
ping do_ping.sh do_pong.sh
pong
pong
• ps, pstree, top
pong
ping
• CTRL+Z, fg, bg
ping P1 P2 P1 P1 P1 P2 P2 P1 • CTRL+C, kill, killall
ping
ping ping pong ping ping ping pong pong ping
pong
t
53 CSC 3102 CI5 - Processus 54
54 2015-2016 CSC 3102 CI5
CI5--Processus
Processus
En route pour le TP !!

55
55 2015-2016 CSC 3102 CI5et- Script
CI1 - Shell Processus
Shell
Présentation du cours

◼ Contexte : comprendre un mécanisme de communication inter-


Les signaux processus

◼ Objectif : Savoir utiliser les signaux


CSC 3102
Introduction aux systèmes d’exploitation ◼ Notion clé : Signaux (kill, trap)
Gaël Thomas

CSC 3102 2 20/10/2021 CSC 3102 Communication entre processus

Les signaux Principe de fonctionnement


Envoi

kill –num-signal PID


◼ Signal = un mécanisme de communication inter-processus
• Communication simple par envoi de message direct
• Message = un entier n entre 1 et 31
Émetteur Récepteur
• Perte de message possible (si sig. n envoyé 2x avant réception)
• Ordre de réception aléatoire (différent de l’ordre d’émission)
• Émetteur envoie un message à un processus
◼ Souvent utilisé pour • Une routine de réception est automatiquement invoquée chez
• Arrêter un processus (par exemple, control-c) le récepteur dès que le signal arrive
• Notifier un processus lorsque sa configuration change • Par défaut, cette routine tue le récepteur
• Prévenir un processus qu’il effectue une opération invalide (sauf pour les signaux SIGCHLD, SIGTSTP, SIGSTOP, SIGCONT)
(accès mémoire invalide, division par zéro…)
3 20/10/2021 CSC 3102 Communication entre processus 4 20/10/2021 CSC 3102 Communication entre processus

Principe de fonctionnement Les signaux


Envoi

kill –num-signal PID Quelques exemples (man 7 signal) :


• SIGHUP (1) : fermeture terminal ⇒ à tous les processus attachés
• SIGINT (2) : control-c dans un terminal ⇒ au processus au premier plan
• SIGQUIT (3) : souvent control-d, généré par un processus à lui-même
Émetteur Récepteur • SIGILL (4) : instruction illégale (envoyé par le noyau)
• SIGFPE (8) : division par 0 (envoyé par le noyau)
• SIGKILL (9) : pour terminer un processus
• SIGSEGV (11) : accès mémoire invalide (envoyé par le noyau)
◼ Nota bene : • SIGTERM (15) : argument par défaut de la commande kill
• Un message est limité à un nombre compris entre 1 et 31 • SIGCHLD (17) : envoyé par le noyau lors de la mort d’un fils
• Tout signal émis est livré • SIGCONT (18) : redémarre un procesus suspendu (avec bg ou fg)
• SIGTSTP (20) : suspend un processus (généré par control-z)
(sauf si le même numéro de signal est émis une seconde fois
• SIGUSR1 (10) : libre, sémantique définie pour chaque processus
avant réception – dans ce cas le deuxième signal est perdu)
• SIGUSR2 (12) : libre, sémantique définie pour chaque processus
• Ordre de réception aléatoire

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

Les signaux Attention : n’oubliez pas les apostrophes ! Principe de fonctionnement


#! /bin/bash #! /bin/bash
◼ Un processus peut attacher un gestionnaire dit de signal avec
kill -USR1 $1 trap 'echo coucou' USR1
Trap 'expression' sig emetteur.sh echo "PID: $$"
⇒ exécution de expression lors de la réception de sig
while true; do
À faire avant de recevoir le signal (en grl., au début du programme) sleep 1
done recepteur.sh
◼ Un processus peut envoyer un signal à un destinataire avec
kill -sig pid $ $

◼ 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

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: $$"

while true; do while true; do


sleep 1 sleep 1
done recepteur.sh done recepteur.sh

$ $ ./recepteur.sh $ $ ./recepteur.sh

Terminal 1 Terminal 2 Terminal 1 Terminal 2

Terminal 2 : lancement de recepteur.sh recepteur.sh attache le gestionnaire 'echo coucou' à USR1

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: $$"

while true; do while true; do


sleep 1 sleep 1
done recepteur.sh done recepteur.sh

$ $ ./recepteur.sh $ $ ./recepteur.sh
PID: 52075 PID: 52075

Terminal 1 Terminal 2 Terminal 1 Terminal 2

recepteur.sh affiche son PID recepteur.sh exécute la boucle infinie

13 20/10/2021 CSC 3102 Communication entre processus 14 20/10/2021 CSC 3102 Communication entre processus

Principe de fonctionnement Principe de fonctionnement


USR1 en attente
#! /bin/bash #! /bin/bash #! /bin/bash #! /bin/bash
Envoi du signal
kill -USR1 $1 trap 'echo coucou' USR1 kill -USR1 $1 trap 'echo coucou' USR1
emetteur.sh echo "PID: $$" emetteur.sh echo "PID: $$"

while true; do while true; do


sleep 1 sleep 1
done recepteur.sh done recepteur.sh

$ ./emetteur.sh 52075 $ ./recepteur.sh $ ./emetteur.sh 52075 $ ./recepteur.sh


PID: 52075 PID: 52075

Terminal 1 Terminal 2 Terminal 1 Terminal 2

Terminal 1 : lancement de emetteur.sh emetteur.sh envoie le signal USR1 à recepteur.sh

15 20/10/2021 CSC 3102 Communication entre processus 16 20/10/2021 CSC 3102 Communication entre processus

Principe de fonctionnement Principe de fonctionnement


USR1 en attente
#! /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: $$"

while true; do while true; do


sleep 1 sleep 1
done recepteur.sh done recepteur.sh

$ ./emetteur.sh 52075 $ ./recepteur.sh $ ./emetteur.sh 52075 $ ./recepteur.sh


$ PID: 52075 $ PID: 52075
coucou
Terminal 1 Terminal 2 Terminal 1 Terminal 2

emetteur.sh termine recepteur.sh reçoit le signal


(l’ordre entre emetteur.sh et recepteur.sh est aléatoire) ⇒ le système déroute l’exécution de recepteur.sh vers le gestionnaire
⇒ affiche coucou
17 20/10/2021 CSC 3102 Communication entre processus 18 20/10/2021 CSC 3102 Communication entre processus
Principe de fonctionnement Notions clés
#! /bin/bash #! /bin/bash

kill -USR1 $1 trap 'echo coucou' USR1


◼ Les signaux
emetteur.sh echo "PID: $$" • Mécanisme de communication à base de messages
while true; do • Message = nombre entre 1 et 31
sleep 1 • Ordre de réception aléatoire
done recepteur.sh
• Perte possible en cas d’envoi multiple du même numéro de signal
$ ./emetteur.sh 52075 $ ./recepteur.sh • kill –sig pid : envoie un signal sig à pid
$ PID: 52075 • trap 'expr' sig : associe expr à la réception d’un signal
coucou sig
Terminal 1 Terminal 2

À la fin du gestionnaire du signal, l’exécution reprend là où elle s’était arrêtée

19 20/10/2021 CSC 3102 Communication entre processus 20 20/10/2021 CSC 3102 Communication entre processus

À vous de jouer!

21 20/10/2021 CSC 3102 Communication entre processus


Présentation du cours

◼ Contexte : comprendre comment les processus interagissent


Les tubes
◼ Objectifs :
• Savoir utiliser les tubes
CSC 3102
Introduction aux systèmes d’exploitation ◼ Notions clés :
Gaël Thomas • Les tubes (mkfifo, redirections avancées, |)

CSC 3102 2 20/10/2021 CSC 3102 Communication entre processus

Les tubes Tubes nommés


Tube nommé
◼ Tube = mécanisme de communication par envoi de messages
• envoi réception
Via un canal de communication
• Message = données quelconques
• Pas de perte de message,
Émetteur messages Récepteur
• Réception dans l’ordre d’émission (ordre FIFO)
– (Réception dite FIFO pour First In First Out)

◼ Échange de messages complexes entre processus ◼ Principe :


• Base de données + serveur Web • Un tube est un fichier spécial dans le système de fichiers
• Processus d’affichage de notifications pour les autres processus • L’émetteur écrit dans le tube
• De façon générale, pour mettre en place une architecture de type • Le récepteur lit dans le tube
client/serveur
3 20/10/2021 CSC 3102 Communication entre processus 4 20/10/2021 CSC 3102 Communication entre processus

Principe de mise en œuvre Principe de mise en œuvre


Tube nommé de nom "chemin" #!/bin/bash

echo read mkfifo /tmp/canal Création du canal


echo "Bonjour" >/tmp/canal
read line </tmp/canal
Émetteur messages Récepteur echo "Reçoit $line" bonjour.sh
(ordre FIFO)
/tmp/canal
◼ Principe de mise en œuvre :
• mkfifo chemin : crée un tube nommé (visible avec ls) #!/bin/bash
• echo message > chemin : écrit dans le tube nommé
• read message < chemin : lit à partir du tube nommé read line </tmp/canal
echo "Reçoit $line"
(bloque si pas encore de message dans le tube) echo "Au revoir" >/tmp/canal au-revoir.sh
• rm chemin : détruit le tube nommé

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

mkfifo /tmp/canal mkfifo /tmp/canal


echo "Bonjour" >/tmp/canal "Bonjour" echo "Bonjour" >/tmp/canal
read line </tmp/canal read line </tmp/canal
echo "Reçoit $line" bonjour.sh echo "Reçoit $line" bonjour.sh

/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

Principe de mise en œuvre Principe de mise en œuvre


#!/bin/bash #!/bin/bash

mkfifo /tmp/canal mkfifo /tmp/canal


echo "Bonjour" >/tmp/canal echo "Bonjour" >/tmp/canal
read line </tmp/canal read line </tmp/canal "Au revoir"
echo "Reçoit $line" bonjour.sh echo "Reçoit $line" bonjour.sh

/tmp/canal /tmp/canal

#!/bin/bash #!/bin/bash

read line </tmp/canal "Au revoir" 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

9 20/10/2021 CSC 3102 Communication entre processus 10 20/10/2021 CSC 3102 Communication entre processus

La vie est malheureusement complexe ! La vie est malheureusement complexe !


Tube nommé
◼ On fait souvent des envois/réceptions dans des boucles
envoi réception
#!/bin/bash #!/bin/bash
mkfifo tube
while true; do while true; do
Émetteur messages Récepteur echo "yes" >tube read line <tube
(ordre FIFO) done done
emetteur_tube.sh recepteur_tube.sh
Démarre emetteur_tube.sh puis recepteur_tube.sh
◼ Les contraintes
• Le récepteur bloque en attendant un message ◼ La plupart des tours de boucle s’exécutent sans problème
• Ouverture bloque si interlocuteur n’existe pas • L’émetteur émet "yes"
read line < f bloque en attendant echo msg > f et vice-versa • Le récepteur reçoit le "yes"
• Erreur si émission alors qu’il n’existe plus de récepteur ◼ Mais parfois...
(voir l’exemple donné dans les prochaines diapositives)

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

1. Ouvre tube 1. Ouvre tube


2. Ouvre tube

13 20/10/2021 CSC 3102 Communication entre processus 14 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

1. Ouvre tube 1. Ouvre tube


2. Ouvre tube 2. Ouvre tube
3. Écrit "yes" 3. Écrit "yes"
4. Ferme tube

15 20/10/2021 CSC 3102 Communication entre processus 16 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

1. Ouvre tube 1. Ouvre tube


2. Ouvre tube 2. Ouvre tube
3. Écrit "yes" 3. Écrit "yes"
4. Ferme tube 4. Ferme tube
5. Ré-ouvre tube(ok car ∃ récepteur) 5. Ré-ouvre tube(ok car ∃ récepteur)
6. Lit yes

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

1. Ouvre tube 1. Ouvre tube


2. Ouvre tube 2. Ouvre tube
3. Écrit "yes" 3. Écrit "yes"
4. Ferme tube 4. Ferme tube
5. Ré-ouvre tube(ok car ∃ récepteur) 5. Ré-ouvre tube(ok car ∃ récepteur)
6. Lit yes 6. Lit yes
7. Ferme tube 7. Ferme tube
8. Écriture ⇒ plantage (silencieux) : pas de récepteur
19 20/10/2021 CSC 3102 Communication entre processus 20 20/10/2021 CSC 3102 Communication entre processus

Tube et redirection avancée Tube et redirection avancée

◼ Toujours ouvrir un tube avec une redirection avancée en


◼ Pour éviter ces fermetures intempestives de tubes lecture/écriture

On préconise dans ce cours de toujours ouvrir un tube #!/bin/bash #!/bin/bash


avec une redirection avancée en lecture/écriture mkfifo tube
exec 3<>tube exec 3<>tube
while true; do while true; do
• Si le récepteur ferme le tube, l’émetteur agissant comme echo "yes" >&3 read line <&3
récepteur, plus de plantage done done

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

◼ À haut niveau, un peu comme si on exécutait


mkfifo tube-avec-nom
cmd_gauche > tube-avec-nom & Disque dur
cmd_droite < tube-avec-nom

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

◼ Écrit les données lues à partir de l’entrée standard


• Sur la sortie standard ◼ Tube nommé
• Et dans un fichier passé en argument • Fichier spécial dans le système de fichiers
• Envoi de messages de taille quelconque, ordre de réception =
ordre d’émission, pas de perte de message
◼ Exemple : cat /etc/passwd | grep root | tee /tmp/result
• mkfifo nom-tube : crée un tube nommé mon-tube
cat grep tee • Toujours utiliser des redirections avancées

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 !

27 20/10/2021 CSC 3102 Communication entre processus


Communication par fichiers partagés

écrit Valeur lit


Communication entre
processus : communication par Processus
Fichier partagé
Processus
fichiers partagés
CSC 3102 ◼ Des processus écrivent dans et lisent un fichier partagé
Introduction aux systèmes d’exploitation
Gaël Thomas

CSC 3102 2 18/11/2021 CSC 3102 Communication entre processus

Communication par fichiers partagés Le problème des fichiers partagés

echo Bonjour read

Fichier ◼ Les fichiers peuvent être mis à jour concurremment


Processus Processus

◼ Les accès concurrents aux fichiers partagés peuvent mener à


◼ Exemple des incohérences
• P1 exécute : echo "Bonjour" > f1
• P2 exécute : read a < f1

◼ Différence entre tube nommé et fichier


• Tube nommé : messages supprimés après la lecture
• Fichier partagé : données non supprimées après la lecture
3 18/11/2021 CSC 3102 Communication entre processus 4 18/11/2021 CSC 3102 Communication entre processus

Problème de la mise à jour concurrente Problème de la mise à jour concurrente

Deux enfants dessinent sur un tableau P1 : crédite le compte d’Igor de 2 euros


read a < compte-igor
a=$(expr $a + 2)
Fichier
echo $a > compte-igor
compte-igor

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

P1 : crédite le compte d’Igor de 2 euros P1 : crédite le compte d’Igor de 2 euros


 read a < compte-igor read a < compte-igor
a=$(expr $a + 2) a : 100  a=$(expr $a + 2) a : 102
Fichier Fichier
echo $a > compte-igor echo $a > compte-igor
compte-igor compte-igor

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

Problème de la mise à jour concurrente Problème de la mise à jour concurrente

P1 : crédite le compte d’Igor de 2 euros P1 : crédite le compte d’Igor de 2 euros


read a < compte-igor read a < compte-igor
a=$(expr $a + 2) a : 102 a=$(expr $a + 2) a : 102
Fichier Fichier
 echo $a > compte-igor  echo $a > compte-igor
compte-igor compte-igor
Commutation de P1 vers P2 avant le echo
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 : 100  b=$(expr $b – 100) b:0
echo $b > compte-igor echo $b > compte-igor

9 18/11/2021 CSC 3102 Communication entre processus 10 18/11/2021 CSC 3102 Communication entre processus

Problème de la mise à jour concurrente Problème de la mise à jour concurrente

P1 : crédite le compte d’Igor de 2 euros P1 : crédite le compte d’Igor de 2 euros


read a < compte-igor read a < compte-igor
a=$(expr $a + 2) a : 102 a=$(expr $a + 2) a : 102
Fichier Fichier
 echo $a > compte-igor  echo $a > compte-igor
compte-igor compte-igor
P2 se termine
0 0
P2 : débite le compte d’Igor de 100 euros
read b < compte-igor
b=$(expr $b – 100) b:0
 echo $b > compte-igor

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

Mise en œuvre de l’exclusion : le verrou Mise en œuvre de l’exclusion : le verrou

◼ 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.

◼ Deux opérations atomiques


Atomique : semble s’exécuter instantanément
• P.sh : attend que le verrou soit déverrouillé et le verrouille
P comme « puis-je? » (Proberen = tester en Néerlandais)
• V.sh : déverrouille le verrou
V comme « vas-y » (Verhogen = incrémenter en Néerlandais)

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

P1 : crédite le compte d’Igor de 2 euros 102 102


P.sh compte-igor.lock
read a < compte-igor compte-igor compte-igor
a=$(expr $a + 2) a : 102
echo $a > compte-igor
 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 P1 a terminé sa  P.sh compte-igor.lock Fin P1
read b < compte-igor section critique read b < compte-igor ⇒ commutation vers P2
b=$(expr $b – 100) ⇒ déverrouille le verrou b=$(expr $b – 100) Et P2 prend le verrou
echo $b > compte-igor echo $b > compte-igor
V.sh compte-igor.lock V.sh compte-igor.lock

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

Remarques Attention à l’inter-blocage

◼ Inter-blocage : des processus concurrents s’attendent


mutuellement
◼ Blocage définitif de l’avancée du programme
Un mutex ne sert à rien si une section critique ne le prend pas! ◼ Exemples :
 Un processus s’attend lui-même (wait sur son PID…)
Si on oublie de déverrouiller le mutex en fin de section critique,
l’application reste bloquée  Un processus P1 verrouille V1 puis attend V2, qui est
pris par P2 qui attend V1 (voir diapositives suivantes)

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

Attention à l’inter-blocage Attention à l’inter-blocage

◼ Processus P1 Commutation de P1 vers P2 ◼ 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 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

Attention à l’inter-blocage Règle pour éviter l’inter-blocage

◼ Processus P1 Commutation de P2 vers P1


P.sh v1.lock
 P.sh v2.lock P1 bloqué car
… v2.lock est pris
V.sh v2.lock par P2 v1.lock
V.sh v1.lock
Il faut toujours prendre les verrous dans le même ordre
dans tous les processus
◼ Processus P2
P.sh v2.lock
v2.lock
 P.sh v1.lock P2 bloqué car
… v1.lock est pris
V.sh v1.lock par P1 ⇒ ni P1, ni P2 ne peuvent
V.sh v2.lock progresser…

35 18/11/2021 CSC 3102 Communication entre processus 36 18/11/2021 CSC 3102 Communication entre processus
Notions clés À vous de jouer!

◼ Section critique : section de code en exclusion mutuelle


• Deux sections critiques ne peuvent pas s’exécuter en parallèle

◼ Mise en œuvre des sections critiques avec des mutex :


• P.sh : entrée en section critique
Bloque tant qu’il existe un processus en section critique
• V.sh : sortie de section critique

◼ Attention aux inter-blocages : toujours prendre les mutex dans


le même ordre dans tous les processus

37 18/11/2021 CSC 3102 Communication entre processus 38 18/11/2021 CSC 3102 Communication entre processus

Vous aimerez peut-être aussi