Telechargé par salah gharbi

Système d’exploitation(chapitre 4)

publicité
Université de la Manouba
Ecole supérieur d’économie numérique
Système d’exploitation
Chapitre 4:
Principes et bases du système
UNIX
Niveau: 1 TSI/ECOM
Enseignant: Mme Wiem Trabelsi
E-mail: [email protected]
ESEN
Plan
1.
Aspect multi utilisateur
2.
Aspect gestion des périphériques
3.
Commandes et langage de commandes
4.
Aspect fichiers
5.
Commandes supplémentaire
6.
Aspect processus
1 . Aspect multi-utilisateurs
Il y a deux types d’utilisateurs:
 Un utilisateur du système:
 C’est un personne physique
 Qui possède des droit d’accès au système
 Qui possède un répertoire personnel
 Qui appartient à un groupe d’utilisateur
Cours systèmes d'exploitation
3
1 . Aspect multi-utilisateurs
 Un utilisateur particulier: « root »
 C’est l’administrateur du système
 Il Possède tous les droits sur le système, sur les utilisateurs et sur les
fichiers.
 Il n’intervient que pour changer la configuration et lors de l’installation.
 Les commandes utilisable par root:
 « adduser »: ajouter un utilisateur.
 « deluser »: supprimer un utilisateur.
 « usermod »: modifier ou changer les propriétés d’un compte
utilisateur.
Cours systèmes d'exploitation
4
1 Aspect multi-utilisateurs
 Identification d’un utilisateur:
Compte = Nom de connexion ou nom d’utilisateur + mot de passe
 Nom : « login »
 Mot de passe : « password »
Exemple:
Login: Jean
Password: ????
5
1 Aspect multi-utilisateurs
 Modification du mot de passe:
 « passwd »: c’est la commande qui permet de changer
le mot de passe.
Exemple:
$ passwd
Changing password for Jean
Old password:
New password:
Re-enter new password:
$
6
1 Aspect multi-utilisateurs
 Les fichiers qui contient des information sur les utilisateurs:
 Référence à tous les utilisateurs: « /etc/passwd » et/ou
« /etc/shadow ».
 Référence à un groupe: « /etc/group ».
 Répertoire personnel: « /home/<login> ».
7
1 Aspect multi-utilisateurs
Exemple: Le fichier « /etc/passwd »
 Contient toutes les informations sur les comptes utilisateurs du
système.
 Seul root a le droit d‘écriture dessus.
 Chaque utilisateur est référencé par une ligne.
Exemple:
bernardi:ZyXD4:501:510:Bernardi Fabrice:/home/bernardi:/bin/bash
login
Mot de passe crypté GID: n° du groupe
UID: n° unique de l’utilisateur
Répertoire personnel
Shell par défaut
Commentaire
8
2 . Aspect gestion des périphériques
L’interface entre UNIX et les terminaux (tty abréviation de teletype) est prise en
charge par un gestionnaire de ligne série (driver tty). Celui−ci est paramétrable
:
• erase annule le dernier caractère frappé (#, ^H ou DEL),
• kill annule tous les caractères de la ligne (@ ou ^U),
• intr envoie le signal « interrupt » ; interrompt la commande en cours (DEL ou
^C),
• quit envoie le signal « quit » ; provoque la fin du processus courant (^| ou ^\),
• eof simule une fin de fichier à partir d’un terminal (^D),
• tabs indique si le terminal sait faire des tabulations,
• speed indique la vitesse du terminal.
9
2 Aspect gestion des périphériques
Exemple:
 Pour voir les paramètres courants, tapez:
$ stty
speed 9600 baud; ...
 Pour voir tous les paramètres, tapez :
$ stty −a
speed 9600 baud; ...
line = 0; ...
10
3. Commandes et langage de commandes
Il existe un très grand nombre de commandes sous Unix.
Elles sont écrite de la forme :
nom_commande
[-options]
<cible1> <cible2>...
Remarque:
Pour taper plusieurs commandes sur la même ligne, il faut utiliser le séparateur « ; » :
Cmd1 ; Cmd2;…………………; Cmdn
11
3 Commandes et langage de commandes
Quelques commandes utiles dès le premier contact avec le système :
uname informations relatives à la version du système,
date date et heure connues par le système,
tty nom de la ligne sur laquelle on est connecté,
who liste des utilisateurs connectés,
grep recherche les fichiers possédant des chaînes de caractères données,
cal calendrier des mois de l’année demandée,
pg affiche le contenu du fichier passé en argument par pages de 23 lignes,
man pages du manuel correspondant à la commande demandée,
echo affiche ses arguments,
wc compte le nombre de lignes, de mots et de caractères contenus dans le fichier
passé en argument,
sort tri le contenu du fichier passé en argument,
12
3. Commandes et langage de commandes
Les cas d’erreurs
Plusieurs cas d’erreurs peuvent se produire par exemples:
La commande n’existe pas.
ATTENTION
Le shell distingue les lettres majuscules des minuscules.
Vous n’avez pas le droit d’exécuter cette commande.
Les options de la commande sont erronées.
En général la commande affiche un message d’utilisation,
précisant quels sont les options et arguments. Pour plus de détails
taper $ man commande.
Les arguments de la commande sont erronés
13
3. Commandes et langage de commandes
Exemples:
$ uname −a
system node Release_3.2 2 Machine_i386
$
L’option −a (all) affiche toutes les informations.
$ date
Wed Jul 6 11:34:52 MET 1995
$
MET est le nom du fuseau horaire, ici Mean Europeen Time.
$ tty
/dev/ttyp0
$
/dev/ttyp0 est le nom de la ligne série. En effet sous UNIX les périphériques sont désignés
par des noms de fichiers.
14
$ man date
date(C) ...
Manuel de référence (man) sur la commande date. Pour avoir plus de détails sur
l’utilisation de la commande man, faire « $ man man ».
$ echo installation terminée
installation terminée
$ echo ’voulez−vous continuer [y]/n?\c’
voulez−vous continuer [y]/n? $
Affiche à l’écran la chaîne de caractères suivant la commande « echo », après
d’éventuelles interprétations(variables, fonctions ...).
$ wc fichier
8 48 208 fichier
$
Affiche les caractéristiques du fichier de nom « fichier » en terme de contenu, de la
façon suivante : il possède 8 lignes, 48 mots et 208 caractères.
15
4. Aspect fichiers
A. Fichiers ordinaires
– Pour ce système, les données d’un fichier
forment une suite non structurée d’octets
(byte stream).
– Un fichier texte, par exemple, est une suite
de codes ASCII, les lignes étant séparées par
le code ASCII ’nouvelle ligne’ (012 octal). Il
n’existe aucune notion d’organisation telle
que séquentiel indéxé, etc ...
– Un certain nombre de caractéristiques sont
associées à un fichier : la date de sa création,
celle de la dernière modification, le
propriétaire, la taille, etc ...
– > Ces caractéristiques sont regroupées dans
un descripteur de fichier, appelé noeud
d’index (i−node ou index−node).
16
4 . Aspect fichiers
Commandes associées aux fichiers
ls fichier ... [list]
Affiche le contenu des répertoires (à un niveau) et les noms des fichiers passés en
argument, c’est_à−dire fichier ..., ou s’il n’y a pas d’argument, tous les fichiers du
répertoire courant sauf ceux commençant par un point.
cat fichier ... [concatenate]
Affiche le contenu des fichiers fichier.
touch fichier1 fichier2 [create]
Crée des fichiers vide nommé fichier1 fichier2
cp fichier1 fichier2 [copy]
Copie fichier1 dans fichier2
mv fichier1 fichier2 [move]
Renomme fichier1 en fichier2
rm fichier [remove]
Détruit ou supprime le fichier fichier ;
17
4. Aspect fichiers
Résultat de la commande : $ ls –l
La commande ls avec l’option −l (long) affiche de nombreuses informations sur le fichier :
$ ls −l
Le type du fichier : ’d’ pour répertoire, ’−’ pour un fichier ordinaire, ’b’ ou ’c’ pour des
fichiers spéciaux (périphériques).
Le nom de fichier : Limité à 14 (ou 255) caractères parmi le jeu ASCII. Le système n’impose
aucun format. On évite les caractères invisibles et les méta−caractères (*, ?, [ et ]).
La taille du fichier : C’est son nombre d’octets. Elle sert à déterminer la fin du fichier. Il n’y a
donc pas de marque de fin de fichier.
18
4. Aspect fichiers
Droits d’accès:
Trois groupes d’autorisation:
– l’utilisateur propriétaire (u)
– les personnes appartenant au groupe propriétaire (g)
– les autres (o: others)
– tous (a: all)
Pour chaque groupe 3 caractères indiquent les autorisations : r, w et x.
– r (read): permission de lecture
• Autorisation de lire le contenu (cat, pg ...) ;
• ce droit est nécessaire pour faire une copie du fichier.
• ls permet de lister le contenu du fichier
• Attention: pour ls −l il faut aussi le droit x).
19
4. Aspect fichiers
– w (write): permission d’écriture
• Autorisation de modifier le contenu ;
• On peut écrire dans un fichier avec un éditeur ou une commande (cat).
• Il faut ce droit pour le fichier destination d’une copie, d’un déplacement ou
d’un lien, si le fichier existe déjà.
• Pour un répertoire on peut créer et détruire des fichiers et des répertoires.
• Lors d’une destruction, seule cette permission prévaut. Elle permettra de
détruire un fichier, même si on n’a aucun droit dessus. La destruction d’un
fichier revient à modifier le répertoire, pas le fichier !
– x exécution/traverse
• Pour un répertoire (cd)
• Pour exécuter un script (programme shell)
– − à la place de r, w ou x signifie non−autorisé.
20
4. Aspect fichiers
B. Répertoire
Un répertoire ou catalogue
(directory) est un fichier qui
contient une liste de noms de
fichiers, parmi lesquels on peut
trouver des sous−répertoires, et
ainsi de suite (arborescence
logique).
• les répertoires sont
représentés par des
rectangles
• les fichiers par des
cercles.
21
4. Aspect fichiers
Répertoire courant :
A chaque processus est associé un répertoire, appelé répertoire
courant ou de travail (défaut).
Chemin absolu :
Pour accéder à un fichier à partir de la racine et en indiquant tous
les sous−répertoires rencontrés.
Chemin relatif :
On peut ne spécifier qu’une partie du chemin d’accès, pour que ce
chemin soit interprété à partir du répertoire courant.
On désigne par « . » : répertoire courant
Et par « .. » : répertoire père
22
4. Aspect fichiers
Exemple:
répertoire courant
/usr/c2
/usr/c2/projet
/tmp
/usr/c1
/usr/c1
/usr/c1
chemin relatif
./.profile
./fichA
../etc/passwd
../c2/.profile
../c2/projet/fichA
../../tmp/fich1
23
4. Aspect fichiers
Un répertoire est un fichier ordinaire dans le sens où il possède un index et des
données sous forme de suite d’octets. Seul le système peut écrire dans un
répertoire.
– répertoire = table de liens (i−nombre, chaîne de caractère)
– i−nombre = numéro d’index (i−node) de la structure décrivant le fichier.
Fichier−répertoire "projet"
On peut voir les numéros d’i−nodes par la commande :
$ ls −i
423 fichA
666 fichB
759 toto
$
24
4. Aspect fichiers
Gestion des liens entre fichiers
– Un fichier (entête plus contenu) peut avoir plusieurs noms ; dans tous les
cas le système identifie un fichier non pas par un nom, mais par son numéro
de i−noeud.
– Un répertoire est un fichier dont le contenu contient un ensemble de
couples (nom, i−noeud) ; chaque nom est un lien vers un i−noeud
donné.
Il existe deux types de liens « lien hard (physique) » et « lien symbolique ».
Cours systèmes d'exploitation avancés
25
4. Aspect fichiers
Les liens "hard"
Création de deux ou plusieurs noms vers un i−noeud unique au
moyen de la commande ln.
Cette commande n’est utilisable qu’à l’intérieur d’un même
système de fichiers (arborescence).
Cours systèmes d'exploitation avancés
26
4. Aspect fichiers
Les liens "Symboliques"
• Ces liens, différents des précédents, permettent de lier plusieurs
noms à un même fichier sans rattacher ces derniers au i−noeud
correspondant.
• Pour cela on utilise la commande ln avec l’option −s.
La commande :
$ ln −s foo bar
Crée le lien symbolique bar qui pointe sur le fichier foo.
$ ls −i bar foo
22195 bar 22192 foo
$
Cours systèmes d'exploitation avancés
27
4. Aspect fichiers
On a des i−noeuds différents. Par contre si l’on utilise la
commande "ls −l" on voit apparaître le lien :
$ ls −l bar foo
lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar−>foo
−rw−r−−r−− 1 root root 12 Aug 5 16:50 foo
$
Cours systèmes d'exploitation avancés
28
4. Aspect fichiers
Commandes associées à un répertoire
mkdir répertoire [make directory] crée un répertoire.
rmdir répertoire [remove directory] détruit le répertoire si il est vide
et si ce n’est pas votre répertoire courant.
cd répertoire [change directory] change de répertoire courant. Sans
argument rapatrie dans le répertoire de connexion.
pwd [print working directory] affiche le chemin absolu du répertoire
courant.
Cours systèmes d'exploitation avancés
29
4. Aspect fichiers
ln fichier1 fichier2 [link] établit un nouveau lien sur le fichier
fichier1.
ls −F affiche les noms de fichiers suivis du caractère’/’ s’il s’agit d’un
répertoire, et du caractère ’*’ s’il s’agit d’un fichier ayant la
permission d’exécution.
ls −C affiche les noms de fichiers par colonnes.
cp fichier ... rép copie tous les fichiers fichier ... Dans le répertoire
rép.
mv fichier ... rép déplace tous les fichiers fichier ... dans le répertoire
rép.
Cours systèmes d'exploitation avancés
30
4. Aspect fichiers
C. Génération de noms de fichiers
Certains caractères spéciaux sont interprétés par le shell, et permettent de décrire les
noms de fichiers. Ce sont des méta−caractères (c’est−à−dire des caractères utilisés
pour décrire d’autres caractères) :
• Le caractère ’*’ signifie n’importe quelle chaîne de caractères.
• Le caractère ’?’ signifie n’importe quel caractère.
• Les crochets ’[]’ signifient un caractère appartenant à un ensemble de valeurs
décrites dans les crochets.
• Le caractère ’−’ utilisé avec les crochets permet de définir un intervalle, plutôt
qu’un ensemble de valeurs.
• Le caractère ’!’ utilisé entre crochets en première position, signifie tout
caractère excepté ceux spécifiés entre crochets.
Cours systèmes d'exploitation avancés
31
4. Aspect fichiers
Exemples
f* Tous les fichiers dont le nom commence par ’f’.
f? Tous les fichiers dont le nom commence par ’f’, suivi d’un seul
caractère quelconque.
f[12xy] Tous les fichiers dont le nom commence par ’f’, suivi d’un
caractère à choisir parmi ’1, ’2’, ’x’ ou ’y’.
f[a−z] Tous les fichiers dont le nom commence par ’f’, suivi d’un
caractère dont le code ASCII est compris entre le code ’a’ et le code
’z’, donc une lettre minuscule.
Cours systèmes d'exploitation avancés
32
4. Aspect fichiers
*.c Tous les fichiers dont le nom se termine par ’.c’
?.c Tous les fichiers dont le nom est formé d’un caractère quelconque,
suivi de ’.c’
?? Tous les fichiers dont le nom est formé de deux caractères.
*.[A−Za−z] Tous les fichiers dont le nom se termine par un ’.’ suivi
d’une seule lettre majuscule ou minuscule.
*.[ch0−9] Tous les fichiers dont le nom se termine par un ’.’ suivi
d’un seul caractère à choisir parmi ’c’, ’h’, ou un chiffre entre ’0’ et
’9’.
[!f]* Tous les fichiers dont le nom ne commence pas par ’f’
*[!0−9] Tous les fichiers dont le nom ne se termine pas par un chiffre.
Cours systèmes d'exploitation avancés
33
Substitution par le shell des méta−caractères
Lorsque le shell trouve des méta−caractères sur une ligne, il substitue l’expression entière,
par exemple :
f* −> f1 f36 foo fz
Chaque ligne est donc analysée deux fois :
1. Par le shell : celui−ci lit la ligne « ls −l f*.c » . Il enlève de
cette ligne
« f*.c » et le remplace par « f1.c f2.c f15.c ».
Le résultat est donc la ligne « ls −l f1.c f2.c f15.c ».
2. Par la commande : lorsque celle−ci est exécutée,
elle reçoit la ligne « ls −l f1.c f2.c f15.c »,
elle va donc travailler sur les 3 fichiers.
-> Le traitement des méta−caractères est indépendant de la commande. Il est effectué par le
shell, avant l’exécution de la commande.
Cours systèmes d'exploitation avancés
34
4. Aspect fichiers
D. Encore quelques commandes
find parcourt une arborescence en sélectionnant des fichiers selon des critères de
recherche, et en exécutant des actions sur chaque fichier sélectionné.
find répertoire critères_de_recherche actions
Exemple :
$ find /usr/c1 −name agenda −print
ici la commande find part du répertoire /usr/c1, parcourt toute la
sous−arborescence en recherchant les fichiers qui ont pour nom agenda, et
affiche sur la sortie standard le chemin absolu de chaque fichier trouvé.
Cours systèmes d'exploitation avancés
35
type commande ...
Donne le chemin absolu du fichier exécuté lorsque vous tapez commande.
Sinon, indique que la commande est interne au shell.
Exemple :
$ type find pg
find is /bin/find
pg is /usr/bin/pg
$ type umask
umask is a shell builtin
$
Cours systèmes d'exploitation avancés
36
file fichier
affiche le type du fichier (exécutable, répertoire, ASCII ...). En l’utilisant avant de
visualiser le contenu d’un fichier cela évite d’afficher un contenu binaire.
Exemple :
$ file /bin/ls /etc/passwd /usr/c1
/bin/ls: demand paged pure executable
/etc/passwd: ascii text
/usr/c1: directory
$
Cours systèmes d'exploitation avancés
37
test option fichier
Vérifie le fichier selon l’une des options suivantes :
−f fichier normal
−d répertoire
−w autorisé en écriture
−r autorisé en lecture
−x autorisé en exécution
−s taille du fichier supérieure à 0
test retourne 0 en cas de succès, 1 en cas d’échec. Cette valeur peut être consultée grâce à la
variable automatique « ? ».
Cours systèmes d'exploitation avancés
38
Exemple :
$ ls −l
drwxr−x−−− 11 c1 cours 17 Aug 1 09:00 save
−rw−r−−−−− 1 fun axis 21 Jul 25 17:05 data
$ whoami
c1 term/c4 Aug 2 09:01
$ test −f save; echo $?
1
$ test −d save; echo $?
0
$ test −r save; echo $?
0
$ test −f data; echo $?
0
$ test −w data; echo $?
1
$
Cours systèmes d'exploitation avancés
39
sum fichier
Calcule et affiche une somme de contrôle pour un fichier (intégrité des
fichiers).
diff fichier1 fichier2
Affiche les lignes différentes devant être modifiées pour que les deux fichiers
soient identiques.
touch fichier
Modifie la date de dernière modification du fichier, celle−ci devient égale à la
date à laquelle la commande a été exécutée. Si le fichier n’existe pas, il sera
créé (et de taille nulle) sauf si l’option c est utilisée.
Cours systèmes d'exploitation avancés
40
Exemple :
$ ls toto
toto not found
$ touch −c toto
$ ls toto
toto not found
$ touch 1009133591 toto
$ ls −l toto
−rw−r−−r−− 1 c1 cours 0 Oct 9 1991 toto
$ date
Wed Feb 07 10:59:09 1996 MET 1996
$ touch toto
$ ls −l toto
−rw−r−−r−− 1 c1 cours 0 Feb 07 10:59 toto
$
Cours systèmes d'exploitation avancés
41
4. Aspect fichiers
E. Protection des fichiers:
chmod c’est la commande qui permet de modifier les droits d’accès sur un fichier.
On a deux types d’écritures:
• L’écriture symbolique: chmod <personne concernée><Action><Accès autorisés> <fichier>
Cours systèmes d'exploitation avancés
42
Exemple :
$ ls –l fichA
-rw-rw-rw- 1 c1 cours 342 Oct 18 15:28 fichA
$ chmod go−w fichA; ls −l fichA
−rw−r−−r−− 1 c1 cours 342 Oct 18 15:28 fichA
$ chmod u+x fichA; ls −l fichA
−rwxr−−r−− 1 c1 cours 342 Oct 18 15:28 fichA
$ chmod g−r fichA; ls −l fichA
−rwx−−−r−− 1 c1 cours 342 Oct 18 15:28 fichA
$ chmod ug+rw fichA; ls −l fichA
−rwxrw−r−− 1 c1 cours 342 Oct 18 15:28 fichA
$ chmod g−rw fichA; ls −l fichA
−rwx−−−r−− 1 c1 cours 342 Oct 18 15:28 fichA
$ chmod ug=rw fichA; ls −l fichA
−rw−rw−r−− 1 c1 cours 342 Oct 18 15:28 fichA
$
Cours systèmes d'exploitation avancés
43
•
L’écriture octale (code): chmod <code> <fichier>
Exemple :
$ ls −l toto
−rw−r−−r−− 1 c1 cours 342 Oct 18 15:28 toto
$
$ chmod 760 toto; ls −l toto
−rwxrw−−−− 1 c1 cours 342 Oct 18 15:28 toto
$
Cours systèmes d'exploitation avancés
44
Autre Permission:
Nous avons vu que chaque i−noeud contient entre autre chose une zone
d’information sur les protections du fichier correspondant. Les droits d’accès à un
fichier sont mémorisés sur 12 bits.
un bit positionné, a la valeur 1.
bit 11: set−uid bit
bit 10: set−gid bit
bit 9: sticky bit
bit 8, 7, 6 : accès en l, w, x pour le propriétaire
bit 5, 4, 3 : accès en l, w, x pour le groupe du propriétaire
bit 2, 1, 0 : accès en l, w, x pour les autres utilisateurs
Cours systèmes d'exploitation avancés
45
• set−uid
-rwsr-x--x
100 111101001 <-> 4 751
La permission setuid permet, lorsqu’on exécute un programme, de prendre l’identité (user
id) effective du propriétaire du fichier. Cela permet aux utilisateurs d’accéder à des fichiers
ou des répertoires auxquels il n’ont pas accès normalement.
• set−gid
-rwxr-s--x
010 111101001 <-> 2 751
A le même rôle mais relativement au groupe.
• sticky bit
-rwxr-x--t
001 111101001 <-> 1 751
Permet de demander le maintien d’un texte binaire en zone de swap même lorsque plus
aucun processus ne l’exécute. C’est utile pour les programmes qui sont très utilisés
(éditeurs, compilateurs, ...) ; c’est un gain de temps, puisque le programme est déjà en
mémoire.
Cours systèmes d'exploitation avancés
46
Le masque:
umask [masque] : Permet de modifier le masque des droits de création de fichier.
Cours systèmes d'exploitation avancés
47
Exemple :
$ umask 000
$ mkdir foo
$ ls −l foo
drwxrwxrwx 2 c1 cours 512 Jul 3 16:39 foo
$ rmdir foo
$ umask 022
$ mkdir foo
$ ls −l foo
drwxr−xr−x 2 c1 cours 512 Jul 3 16:41 foo
$ rmdir foo
$ umask 077
$ mkdir foo
$ ls −ld foo
drwx−−−−−− 2 c1 cours 512 Jul 3 16:42 foo
$
Cours systèmes d'exploitation avancés
48
Autres commandes:
chgrp nom_groupe fichier [change group]
Modifie le groupe propriétaire d’un fichier.
chown nom_utilisateur fichier [change owner]
Modifie l’utilisateur propriétaire d’un fichier.
Exemple :
$ ls −l f1
−rw−r−−−−− 1 prof cours 11 Jul 13 13:00 f1
$ logname
prof
$ chown c1 f1
$ ls −l f1
−rw−r−−−−− 1 c1 cours 11 Jul 13 13:01 f1
$ chown c2 f1
f1 : Not owner
$
Cours systèmes d'exploitation avancés
49
5. Commandes supplémentaires
A. Redirection d’entrées/sorties
Lorsqu’une commande est lancée, ses entrées/sorties peuvent être redirigées sur un fichier.
•
Ainsi, l'utilisation du caractère «>» permet de rediriger la sortie standard d'une
commande située à gauche vers le fichier situé à droite :
$ date > date.out
Dans ce cas les données produites par la commande date ne sont pas affichées sur
l’écran, mais écrites dans le fichier date.out.
La redirection «>» a pour but de créer un nouveau fichier. Ainsi, si un fichier du même
nom existait, celui-ci sera écrasé. La commande suivante crée tout simplement un
fichier vide :
$ >fichier
L'emploi d'un double caractère «>>» permet de concaténer la sortie standard vers le
fichier,
c'est-à-dire ajouter la sortie à la suite du fichier, sans l'écraser.
Cours systèmes d'exploitation avancés
50
• De manière analogue, le caractère «<» indique une redirection de l'entrée
standard.
$ cat < toto.txt
Dans ce cas le contenu du fichier toto.txt est envoyé en entrée de la
commande cat, dont le seul but est d'afficher le contenu sur la sortie
standard.
Enfin l'emploi de la redirection «<<» permet de lire sur l'entrée standard
jusqu'à ce que la chaîne située à droite soit rencontrée.
$ cat << STOP
L'exemple suivant va lire l'entrée standard jusqu'à ce que le mot STOP soit
rencontré, puis va
afficher le résultat.
Cours systèmes d'exploitation avancés
51
B − Syntaxe générale
n<fichier redirige en lecture le descripteur n sur fichier. Si n n’est pas précisé, ce sera 0
(l’entrée standard). Si fichier n’existe pas le shell renvoie une erreur.
n>fichier redirige en écriture le descripteur n sur fichier. Si n n’est pas précisé, ce sera 1
(la sortie standard). Si fichier existe il sera écrasé, sinon créé.
n>>fichier redirige en écriture le descripteur n à la fin de fichier, sans détruire les
données préalablement contenues par ce fichier. Si n n’est pas précisé, ce sera 1 (la sortie
standard). Si fichier n’existe pas il sera créé.
C − Remarques générales
a. Il est possible de rediriger à la fois l’entrée et la sortie.
Exemples :
$ wc < /etc/passwd > tmp
$ cat tmp
20 21 752
$
Cours systèmes d'exploitation avancés
52
b. Les redirections d’entrées/sorties standards sont effectuées par le shell d’une façon
totalement indépendante du contexte. Les caractères spéciaux ’>’ et ’<’ peuvent être
situés n’importe où sur une ligne de commande (précéder ou suivre la commande). Les
deux lignes suivantes produisent le même résultat :
$ who > tmp; grep ’c[12]’ < tmp
c1 tty4 Jul 31 09:46
c2 tty2 Jul 31 09:17
$ > tmp who; < tmp grep ’c[12]’
c1 tty4 Jul 31 09:46
c2 tty2 Jul 31 09:17
C. On peut rediriger la sortie d’erreur vers la « poubelle » (/dev/null) ; dans ce cas les
messages d’erreur seront perdus :
$ cat fichier−inexistant 2>/dev/null
Cours systèmes d'exploitation avancés
53
Autres commandes:
Syntaxe : grep [options] expreg [fichiers]
Recherche dans les fichiers ou sur son entrée standard des lignes de texte qui
satisfont l'expression régulière expreg indiquée. Sa sortie peut être redirigée dans
un fichier.
Options
-c donne seulement le nombre de lignes trouvées obéissant au critère
-l donne seulement le nom des fichiers où le critère a été trouvé
-v donne les lignes où le critère n'a pas été trouvé
-i ne pas tenir compte de la casse (ne pas différencier majuscules minuscules)
-n pour n'afficher que les numéros des lignes trouvées
-w pour imposer que le motif corresponde à un mot entier d'une ligne
Cours systèmes d'exploitation avancés
54
Les expressions régulières lié à la commande grep
Expressions reconnues :
. signifie un caractère quelconque
* répétition du caractère situé devant
^ début de ligne
$ fin d'une ligne (donc "e$" mots se terminant par e)
[...] contient une liste ou un intervalle de caractères cherchés
[^..] caractères interdits.
Cours systèmes d'exploitation avancés
55
Les symboles ^ et $ indiquent le début ou la fin d'une chaîne, et permettent donc
de la délimiter.
– "^debut": chaîne qui commence par "debut"
– "fin$": chaîne qui se termine par "fin"
– "^chaîne$": chaîne qui commence et se termine par "chaîne"
– "abc": chaîne contenant la chaîne "abc "
Les symboles *, + et ?, respectivement "zero ou plusieurs", "un ou plusieurs", "un
ou aucun", permettent de donner une notions de nombre.
– "abc+": chaîne qui contient "ab" suivie de un ou plusieurs "c" ("abc",
"abcc" ...)
– "abc*": chaîne qui contient "ab" suivie de zero ou plusieurs "c" ("ab",
"abc" ...)
– "abc?": chaîne qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc")
– "^abc+": chaîne commençant par "ab" suivie de un ou plusieurs "c" ("abc",
"abcc" ...)
Cours systèmes d'exploitation avancés
56
Les accolades {X,Y} permettent de donner des limites de nombre.
– "abc{2}": chaîne qui contient "ab" suivie de deux "c" ("abcc")
– "abc{2,}": chaîne qui contient "ab" suivie de deux "c" ou plus ("abcc"
etc..)
– "abc{2,4}": chaîne qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" ..
"abcccc")
Les parenthèses ( ) permettent de représenter une séquence de caractères.
– "a(bc)*": chaîne qui contient "a" suivie de zero "bc" ou plus
La barre verticale | se comporte en tant qu'opérateur OU
– "un|le": chaîne qui contient "un" ou "le"
– "(un|le) chien": chaîne qui contient "un chien" ou "le chien"
– "(a|b)*": chaîne qui contient une suite de "a" ou de "b"
Cours systèmes d'exploitation avancés
57
Le point . indique n'importe quel caractère (une fois)
– "^.{3}$": chaîne qui contient 3 caractères
Les crochets [ ] définissent une liste de caractères autorisés (ou interdits). Le
signe – permet quand à lui de définir un intervalle. Le caractère ^ après le
premier crochet indique quand à lui une interdiction.
– "[abc]": chaîne qui contient un "a", un "b", ou un "c"
– "[a-z]": chaîne qui contient un caractère compris entre "a" et "z"
– "^[a-zA-Z]": chaîne qui commence par une lettre
– "^[^a-zA-Z]": chaîne qui ne commence pas par une lettre
Cours systèmes d'exploitation avancés
58
Exemples
• cherche dans fichier, les lignes dont la 1ère lettre est qcq et la 2ème doit être o
grep "^.o" fichier
• cherche dans le fichier passwd les lignes commençant par t
grep "^t" /etc/passwd
• cherche les lignes ne commençant pas commençant par t
grep -v "^t" /etc/passwd
• cherche les lignes contenant les mots suivant le modèle T.t.
grep "T.t." /etc/passwd
• compter les lignes saisies au clavier qui se termine par a
grep -c "a$"
• afficher les lignes des fichiers essai?.txt qui contiennent a, b ou c
grep [abc] "essai?.txt"
Cours systèmes d'exploitation avancés
59
6. Aspect processus
A. Définition
• Les processus correspondent à l’exécution de tâches (programmes des
utilisateurs, entrées−sorties, ...) par le système.
• Un système d’exploitation doit en général traiter plusieurs tâches en même
temps. Comme il n’a, la plupart du temps (UNIX), qu’un processeur, il résout ce
problème grâce à un pseudo−parallélisme. Il traite une tâche à la fois,
s’interrompt et passe à la suivante. La commutation de tâches étant très rapide, il
donne l’illusion d’effectuer un traitement simultané.
• Le mot processus désigne un programme binaire en cours d’exécution,
c’est−à−dire un programme dans un environnement.
Cours systèmes d'exploitation avancés
60
6 Aspect processus
Les processus des utilisateurs sont lancés par un interprète de commande (shell).
Ils peuvent eux−même lancer ensuite d’autres processus.
On appelle le processus créateur, le père, et les processus créés, les fils. Les
processus peuvent donc se structurer sous la forme d’une arborescence. Au
lancement du système, il n’existe qu’un seul processus, qui est l’ancêtre de tous
les autres.
Cours systèmes d'exploitation avancés
61
Les processus sont composés d’un espace de travail en mémoire formé de 3
segments :
 Le code correspond aux instructions, en
langage d’assemblage, du programme à exécuter.
 La zone de données contient les variables
globales ou statiques du programme ainsi que les
allocations dynamiques de mémoire.
 Enfin, les appels de fonctions, avec leurs
paramètres et leurs variables locales, viennent
s’empiler sur la pile.
Cours systèmes d'exploitation avancés
62
L’environnement d’un processus encore appelé contexte, comprend entre autre :
• un numéro d’identification unique appelé PID (Process IDentifier) ;
• le numéro d’identification de l’utilisateur qui a lancé ce processus, appelé UID
(User IDentifier), et le numéro du groupe auquel appartient cet utilisateur, appelé GID
(Group IDentifier) ;
• le répertoire courant ;
• les fichiers ouverts par ce processus ;
• le masque de création de fichier, appelé umask ;
• la taille maximale des fichiers que ce processus peut créer, appelée ulimit ;
• la priorité ;
• les temps d’exécution ;
• le terminal de contrôle, c’est−à−dire le terminal à partir duquel la commande a été
lancée.
Cours systèmes d'exploitation avancés
63
Voici un premier schéma (simplifié) d’un processus :
Cours systèmes d'exploitation avancés
64
Ce prosessus a le numéro 36. Il a été lancé par l’utilisateur qui a 106 pour UID. Il
est en train d’exécuter le programme ’cmd1’. Il a consommé 0.3 seconde, avec une
priorité de 20. Son masque de création de fichier est 027. Son terminal de contrôle
est /dev/term/c4.
Son répertoire courant est /usr/c1. Il a 4 fichiers ouverts :
Cours systèmes d'exploitation avancés
65
Sur le schéma ci−dessous, les trois programmes deviennent trois processus indépendants
qui ont chacun leur propre contrôle de flux (compteur ordinal).
Cours systèmes d'exploitation avancés
66
-> Sur un intervalle de temps assez grand, tous les processus ont
progressé, mais à un instant donné un seul processus est actif.
– La commutation des tâches (multiprogrammation), c’est−à−dire le
passage d’une tâche à une autre, est réalisée par un ordonnanceur
(scheduler) au niveau le plus bas du système. Cet ordonnanceur est activé
par des interruptions d’horloge, de disque et de terminaux.
Différence entre un processus et un programme :
– Un processus est une activité d’un certain type qui possède un programme,
des données en entrée et en sortie, ainsi qu’un état courant.
– Un seul processeur peut être partagé entre plusieurs processus en se
servant d’un algorithme d’ordonnancement qui détermine quand il faut
suspendre un processus pour en servir un autre.
Cours systèmes d'exploitation avancés
67
logname affiche uniquement le nom associé à l’UID.
Exemple :
$ logname
c1
$
Le PID est stocké dans une pseudo−variable spéciale que l’on appelle $.
On peut consulter le PID du shell courant en tapant :
$ echo $$
36
$
Le 1er "$" définit le contenu de la pseudo−variable, alors que le second "$"
correspond au PID du shell courant.
Cours systèmes d'exploitation avancés
68
B. Commandes associés aux processus
Certaines des caractéristiques de l’environnement peuvent être consultées par
diverses commandes. Nous connaissons déjà :
pwd affiche le chemin du répertoire courant
tty affiche le terminal de contrôle
umask affiche le masque de création de fichier
Voici d’autres commandes :
id consulte l’UID et le GID.
Exemple :
$ id
uid=106(c1) gid=104(cours)
$
Cours systèmes d'exploitation avancés
69
C. Création de processus
Pour chaque commande lancée (sauf les commandes internes), le shell crée
automatiquement un nouveau processus.
Il y a donc 2 processus. Le premier, appelé processus père, exécute le programme shell, et
le deuxième, appelé processus fils, exécute la commande.
Le fils hérite de tout l’environnement du père, sauf bien sûr du PID, du PPID et des temps
d’exécution.
Cours systèmes d'exploitation avancés
70
Un nouvel élément de l’environnement apparaît ici, le PPID. C’est le PID du
processus père. Le père du processus 36 est le processus 27, et celui de 27 est le
processus 1. Seul le fils (36) a ouvert le fichier /tmp/toto.
Les deux processus peuvent
parfaitement tourner en
parallèle. La puissance de
traitement est partagée entre
tous les programmes lancés
et, mis à part les machines
multi−processeurs, un seul
processus est actif à un
instant t.
Cours systèmes d'exploitation avancés
71
On utilisera cette solution (processus lancés en parallèle) par exemple pour
lancer un traitement très long, et continuer à travailler en même temps. Dans ce
cas, on dit que le père a lancé un fils en tâche de fond (background) ou encore
en mode asynchrone.
Cours systèmes d'exploitation avancés
72
Une autre solution consiste à placer le processus père en attente jusqu’à ce
que le processus fils soit terminé.
Pour lancer une commande en plaçant le père en attente, il suffit de taper cette
commande :
$ cmd1
... résultat de la commande cmd1
$
Ce mode est donc le mode par défaut dans le shell.
Cours systèmes d'exploitation avancés
73
Pour lancer une commande en tâche de fond, il faut faire suivre cette
commande par le caractère ’&’:
$ cmd1 &
[1] 127
$
Le Korn Shell affiche un numéro de tâche entre [] et le PID de cette tâche de
fond, puis continue à travailler, donc affiche la chaîne d’invite et attend la
prochaine commande.
En Bourne Shell, il n’y a pas de numéro de tâche, la même commande aurait
donnée :
$ cmd1 &
127
$
Cours systèmes d'exploitation avancés
74
Si vous avez plusieurs commandes successives à lancer en arrière plan, il faudra utiliser
les parenthèses.
$ (cmd1; cmd2) &
[2] 128
$
La commande cmd2 ne sera lancée que lorsque la commande cmd1 sera terminée. Ceci
dit, l’utilisateur récupère la main tout de suite. Le shell détecte la présence du ’&’ partout
sur la ligne.
Dans le cas suivant, la commande cmd1 sera lancée par un sous−processus shell :
$ (cmd1)
$
La commande cmd1 est lancée en arrière plan et la commande cmd2 est tout de suite lancée
derrière en direct.
$ cmd1 & cmd2
[3] 130
$
Cours systèmes d'exploitation avancés
75
La commande wait n permet d’attendre la mort de la tâche de fond dont le
PID est n.
$ cmd1 &
[4] 132
$ wait 132
... on est bloqué jusqu’à ce que cmd1 se termine
$
Si n n’est pas précisée, wait attend la mort de toutes les tâches de fond. wait
ne s’applique qu’aux processus lancés dans le shell lui−même.
Cours systèmes d'exploitation avancés
76
D. Arborescence de processus
Tous les processus sont créés à partir d’un processus père, existant déjà.
Le premier processus est un peu spécial. Il est créé lorsque le système est initialisé. Il
s’appelle "init", a le PID 1 et n’est associé à aucun terminal. Son travail consiste à créer de
nouveaux processus. Le processus "init" crée 2 sortes de processus :
des processus interactifs, associés aux lignes d’entrées/sorties sur lesquelles sont rattachés des
terminaux. Autrement dit des processus vous permettant de vous connecter.
Cours systèmes d'exploitation avancés
77
Pour visualiser les processus que vous avez lancé, tapez la commande «ps» :
$ ps
PID TTY TIME COMMAND
527 ttyp4 1:70 −ksh
536 ttyp4 0:30 cmd1
559 ttyp4 0:00 ps
$
PID identifie le processus,
TTY est le numéro du terminal associé,
TIME est le temps cumulé d’exécution du processus,
COMMAND est le nom du fichier correspondant au programme exécuté par le processus.
Cours systèmes d'exploitation avancés
78
Dans cet exemple un utilisateur s’est connecté au système sur le terminal ttyp4 (commande
tty). Un processus a donc été créé pour exécuter le programme shell (ksh). Il a le PID 527.
$ echo $$
527
$ cmd1 &
$
$ ps
PID TTY TIME COMMAND
527 ttyp4 1:70 −ksh
536 ttyp4 0:30 cmd1
559 ttyp4 0:00 ps
$
Puis l’utilisateur a lancé le programme cmd1 en tâche de fond.
Un deuxième processus (de PID 536) est créé qui exécute la commande ’cmd1’.
Cours systèmes d'exploitation avancés
79
•Le processus 527 continue à tourner en parallèle, l’utilisateur peut
donc continuer à travailler, et il lance la commande ps. Un
troisième processus (de PID 559) est créé pour exécuter cette
commande. La commande ps affiche le résultat sur la sortie
standard, celle−ci étant associée à l’écran, le résultat apparaît.
•Pendant ce temps, le shell est endormi. Lorsque la commande ps
est terminée, le processus 559 meurt, son père, le processus 527,
est averti par le système, et il recommence à travailler. Comme il
s’agit du shell, il affiche à nouveau la chaîne d’invite ’$’ et attend
une nouvelle commande.
•Sans option, la commande concerne les processus associés au
terminal depuis lequel elle est lancée.
Cours systèmes d'exploitation avancés
80
*E. Identificateurs réels et effectifs
A chaque processus sont en fait associés deux groupes d’identifications :
1. l’UID et le GID réels identifient l’utilisateur qui a lancé le processus.
2. l’UID et le GID effectifs (EUID et EGID), identifient les droits des processus.
Le plus souvent, les identités réelles et effectives sont identiques. Cependant, il peut être
nécessaire de modifier les droits d’un processus.
Le fichier /etc/passwd est protégé en écriture. Aucun utilisateur n’a le droit d’écrire dans
ce fichier. Cependant, en utilisant la commande passwd (/bin/passwd), vous écrivez quand
même dans ce fichier, puisque vous modifiez votre mot de passe.
$ ls −l /etc/passwd
−rw−r−−r−− 1 root sys 7100 Aug 22 15:21 /etc/passwd
$ type passwd
passwd is /bin/passwd
$ ls −l /bin/passwd
−r−sr−sr−x 1 root sys 19040 Dec 19 1985 /bin/passwd
$
Cours systèmes d'exploitation avancés
81
Remarquez que pour le fichier exécutable /bin/passwd, ls affiche un
caractère ’s’ à la place du caractère ’x’ habituel, montrant par là que ce
fichier a le mode « set user ID » et « set group ID ».
Dans ce cas, l’EUID et l’EGID du processus sont ceux du propriétaire du
fichier exécuté (et non pas ceux de l’utilisateur qui l’a lancé).
Ainsi quiconque lance l’exécutable passwd, travaille avec l’UID effectif de
root et GID de sys.
Cours systèmes d'exploitation avancés
82
*F. Statut
Lorsqu’un processus se termine, il retourne toujours une valeur significative ou
statut.
Par convention, lorsqu’un processus se termine correctement, il retourne la valeur 0,
sinon il retourne une valeur différente de 0 (généralement 1). Ce choix permet de
ramener des codes significatifs pour différencier les erreurs.
Le statut d’une commande shell est placé dans la pseudo−variable spéciale, nommée
"?". On peut consulter sa valeur en tapant la commande :
echo $?
Cours systèmes d'exploitation avancés
83
Sur cet exemple, la valeur 0 renvoyée par la commande "echo" nous indique que
la commande "cp " s’est bien passée.
Cours systèmes d'exploitation avancés
84
F. Communication entre processus
Les utilisateurs disposent d’un mécanisme leur permettant de lancer un certain nombre de
processus de façon concurrente (en quelque sorte parallèlement) et communiquant entre
eux par l’intermédiaire de tubes (pipes), le système assurant la synchronisation de
l’ensemble des processus ainsi lancés.
Principe de fonctionnement : la sortie standard d’un des processus est redirigée sur l’entrée
dans un tube et l’entrée standard de l’autre processus est redirigée sur la sortie de ce tube.
Ainsi les deux processus peuvent échanger des données sans passer par un fichier
intermédiaire de l’arborescence.
Cours systèmes d'exploitation avancés
85
Le lancement concurrent de processus communiquant deux par deux par
l’intermédiaire d’un tube sera réalisé par une commande de la forme :
Exemple :
$ who > tmp ; grep cours < tmp
cours ttya4 Jul 31 10:50
cours ttyc6 Jul 31 09:34
cours ttya2 Jul 31 09:02
$ rm tmp
L’utilisation de la commande rm évite de conserver le fichier intermédiaire.
Cours systèmes d'exploitation avancés
86
L’utilisation d’un pipe (|) permet de résumer ces trois lignes de commandes en une seule :
$ who | grep cours
cours ttya4 Jul 31 10:50
cours ttyc6 Jul 31 09:34
cours ttya2 Jul 31 09:02
La sortie produite par la commande who est associée à l’entrée de la commande grep. who
donne la liste des personnes connectées au système à un moment donné ; grep cherche si la
chaîne cours est présente dans le flot de données qu’elle reçoit. On peut donc considérer
que la commande grep joue le rôle de filtre.
Cours systèmes d'exploitation avancés
87
Examinons l’exemple suivant :
$ ps −a | wc −l
9
$
La commande "ps −a | wc −l" entraîne la création de deux processus concurrents
(allocation du processeur). Un tube (fichier particulier, appelé buffer) est créé dans lequel
les résultats du premier processus ("ps −a") sont écrits. Le second processus lit dans le
tube.
Un tube de communication (|) permet de mémoriser des informations.
Autres exemples:
• cherche dans le fichier des groupes, ceux qui commencent par a ou b .. ou j
less /etc/group | grep "^[a-j] "
• pour lister les sous-répertoires du rép. /etc
ls -l /etc | grep "^d"
Cours systèmes d'exploitation avancés
88
Téléchargement