Vous êtes sur la page 1sur 15

.

Année Universitaire: 2023-2024

TP N°3: Les flux de redirection et


Gestion des Processus

Matière : Systèmes d’exploitation avancés


Niveau : 3ème année Génie Informatique
Réalisé par : Mr Ridha AZIZI
Enseignante : Mme Jihen KHALFALLAH

Après ce TP, vous serez capable de :


• Connaitre les notions suivantes : redirections, chaînage de commandes, communication par tube,
commandes de filtrage.
• Gérer les processus

Partie 1 : Les flux de redirection

Introduction
Les symboles <,> sont les opérateurs de redirection ; le symbole supérieur à > est utilisé pour envoyer la
sortie d’un programme (processus) vers un fichier en entrée.
De l’autre, le symbole inférieur à < est utilisé pour envoyer la sortie d’un fichier à un programme(processus)
en entrée.
Ce qui nous donne :

• commande < fichier d'entrée : Lit un fichier entrée

• commande > fichier de sortie : Créer/Ecrit un fichier en sortie

• commande >> fichier de sortie : Modifier un fichier en sortie


1. Redirections des entrées-sorties
Il est possible, sous Unix, de rediriger l'entrée ou la sortie d'une commande :

− < : redirection de l'entrée.

✓ Exemple : grep abc < essai, la chaîne abc est recherchée dans le fichier

essai.

− > : redirection de la sortie

✓ Exemple : ls > liste, le résultat de la commande ls est copié dans le fichier

liste. Si le fichier n'existe pas, il est créé, sinon son contenu est écrasé.

− >> : redirection de la sortie avec concaténation.

1
.

Année Universitaire: 2023-2024


✓ Exemple : ls >> liste2, si le fichier liste2 n'existe pas, il est créé,

sinon le résultat de la commande ls est ajouté à la fin du fichier


liste2.

− | : redirection de la sortie d'une commande sur l'entrée de la commande suivante.

✓ Exemple : ls | grep *.c, la sortie de la commande ls sert d'entrée


à la commande grep. Ici, on cherche tous les fichiers sources C dans le
répertoire courant.

2. Les filtres et les expressions régulières


Les expressions régulière (ou rationnelle)

Elle sont des suites de caractères ordinaires ou spéciaux qui ont des significations particulières permettant
de faire des sélections.
• ^ début de ligne

• . un caractère quelconque

• $ fin de ligne

• [...] plage de caractères permis

• [^...] plage de caractères interdits

• * 0 à n fois le caractère ou regroupement de caractères précédent

• \c protection du caractère c

• \{n\} pour définir le nombre de répétition n du caractère placé devant

• \{n,\} pour définir le nombre de répétition n du caractère placé devant

• \{n,x\} entre n et x fois le caractère précédent

• ^(…\) mémorisation d'une ER

• + une ou plus occurrences du caractère ou regroupement de caractères précédent

• ? 0 ou 1 occurrence du caractère ou regroupement de caractères précédent

• {n} pour définir le nombre de répétition n du caractère ou regroupement de


caractères placé devant
• \{n,} au moins n fois le caractère ou regroupement de caractères précédent

• \{n,x} entre n et x fois le caractère ou regroupement de caractères précédent

2
.

Année Universitaire: 2023-2024


Le caractère d’échappement « / » permet de ne pas interpréter le caractère suivant par le shell. (pour direqu’il
fait partie de la syntaxe de la commande)
Exemples :

L'expression [a-z][a-z] * cherche les lignes contenant au minimum un caractère en minuscule. [a-z]

caractère permis, [a-z]* recherche d'occurrence des lettres permises (entre 0 et plus).

L'expression ^[0-9]\{4\}$ a pour signification, du début ^ à la fin du fichier $ ,recherche les nombres [0-9]

de 4 chiffres \{4}.

La commande « cat »

La commande cat affiche le contenu d'un fichier.

− Syntaxe : cat [-n] fichier

− Option principale : -n numérote les lignes

− Exemples :

✓ cat -n essai1 : affiche le fichier essai1 à l'écran en numérotant les lignes.

✓ cat essai1 essai2 : affiche à l'écran le fichier essai1 puis le fichier

essai2.

La commande « more »

La commande more affiche le contenu d'un fichier page par page.

− Syntaxe : more [-c] fichier

− Option principale : -c efface la fenêtre avant l'affichage.

− Exemple : more essai.c affiche la première page du fichier essai.c.

✓ La touche espace permet d’afficher la page suivante.

✓ La touche [Enter] permet d’afficher la ligne suivante.

✓ La touche h permet d’accéder à l'aide en ligne.

✓ La touche q permet de quitter.

3
.

Année Universitaire: 2023-2024


La commande « less »

La commande less affiche le contenu d'un fichier page par page. Elle peut être
considérée comme le successeur de more. Elle fait la même chose mais offre davantage
de possibilités, comme le retour en arrière.

− Syntaxe : less [-c] fichier

− Option principale : -c efface la fenêtre avant l'affichage.


La commande « grep »

La commande grep recherche une (ou plusieurs) expression(s) dans un fichier.

− Syntaxe : grep [-cilnrvE] expression fichier

− Options principales :

✓ -c : affiche le nombre de lignes contenant l'expression.

✓ -i : contrairement à la plupart des commandes, l'option -i ne signifie


pas interactif mais ignore-case, c'est à dire que grep ne fera pas de
différence entre minuscules et majuscules.
✓ -l : n'affiche que le nom des fichiers contenant l'expression.

✓ -n : affiche les numéros des lignes contenant l'expression.

✓ -r : recherche récursivement dans les sous-répertoires du répertoire courant.

✓ -v : inverse la recherche, c'est à dire affiche les lignes ne contenant


pas l'expression.
✓ -w : recherche exactement l'expression et non les mots contenant l'expression.

✓ -E ou --extended-regexp : expression régulière étendue qui


permet derechercher plusieurs expressions en même temps.
✓ -A n : affiche n lignes supplémentaires après les lignes qui concordent.

✓ -B n : affiche n lignes supplémentaires avant lignes qui concordent.

− Exemples :

✓ grep -i -c 'integer' * : affiche le nombre de fois où les


expressions integer, Integer ou INTEGER sont rencontrées dans
chaque fichier du répertoire courant.

4
.

Année Universitaire: 2023-2024


✓ grep -Eir "fortran|Python" /codes : cherche les chaînes fortran

ou Python, sans tenir compte de la casse, dans le répertoire /codes et


ses sous- répertoires.

La commande « sort »

La commande sort trie les champs d'un fichier.

− Syntaxe : sort [-fnru] [-t car] [+i] [-j] [-o sortie] fichier

− Options principales :

✓ -f : ne tient pas compte des minuscules et majuscules.

✓ -n : trie numérique et non alphabétique.

✓ -r : inverse l'ordre de tri.

✓ -u : n'affiche qu'une fois les lignes multiples.

✓ -t car : indique le caractère séparateur de champs (par défaut, c'est l'espace).

✓ -o sortie : écrit le résultat dans le fichier sortie.

✓ +i : on trie à partir du i-ième champ. i=0, 1, ….

✓ -j : on trie jusqu'au j-ième champ.


− Exemples :

✓ sort +1 liste trie le fichier liste (liste de prénoms et noms, e.g.


Robert BIDOCHON) par ordre alphabétique des noms.
✓ sort -n -t : +1 -2 adresses : trie le fichier adresses (liste de
prénoms, numéros de téléphone et villes, e.g.
robert:0380234567:Dijon) par numéros de téléphones.

La commande « cut »

La commande cut extrait des champs d'un fichier.

− Syntaxe : cut [-cf] [-d car] [+i] [-j] fichier

− Options principales :

✓ -c : extrait suivant le nombre de caractères.

✓ -f : extrait suivant le nombre de champs.

5
.

Année Universitaire: 2023-2024


✓ -d car : indique le caractère séparateur de champs (par défaut,

c'est la tabulation).
✓ +i : on trie à partir du i-ième champ. i=1, 2, ….

✓ -j : on trie jusqu'au j-ième champ.


− Exemples :

✓ cut -c10 adresses : extrait les 10 premiers caractères de chaque ligne.

La commande « wc »

La commande wc compte le nombre de lignes, de mots ou de caractères d'un fichier.

− Syntaxe : wc [-clw] fichier

− Options principales :

✓ -c : renvoie le nombre de caractères (octets).

✓ -l : renvoie le nombre de lignes.

✓ -w : renvoie le nombre de mots.

− Exemple : wc -l essai.c renvoie le nombre de lignes du fichier essai.c.


La commande « head »

La commande head affiche le début d'un fichier.

− Syntaxe : head [-n] fichier

− Option principale : -n affiche les n premières lignes du fichier. Par défaut, n = 10.

− Exemple : head -10 *.c affiche les 10 premières lignes de tous les fichiers
sources .c du répertoire courant.

La commande « tail »

La commande tail affiche la fin d'un fichier.

− Syntaxe : tail [-n] fichier

− Option principale : -n affiche les n dernières lignes du fichier. Par défaut, n = 10.

− Exemple : tail -50 essai affiche les 50 dernières lignes du fichier essai.
6
.

Année Universitaire: 2023-2024


La commande « find »

La commande find recherche un (ou plusieurs) fichier(s) dans un répertoire. Cette


commande est automatiquement récursive.

− Syntaxe : find chemin critères

− Options principales :

✓ -print : affiche le résultat de la recherche.

✓ -name :recherche sur le nom du fichier.

✓ -type :recherche sur le type (d : répertoire, c : caractère, f : fichier).

✓ -size n : recherche sur la taille du fichier.

✓ -user : recherche par propriétaire.

✓ -group : recherche par groupe.

✓ -perm : recherche par autorisations d’accès.

✓ -delete : supprime les fichiers trouvés.

✓ -amin n : le fichier a été accédé il y a n minutes.

✓ -atime n : le fichier a été accédé il y a n fois 24 heures.

✓ -cmin n : le statut du fichier a changé il y a n minutes.

✓ -ctime n : le statut du fichier a changé il y a n fois 24 heures.


Pour les options -size, -amin, -atime, -cmin, et -ctime, on peut préciser :

✓ n : exactement n.

✓ -n : inférieur à n.

✓ +n : supérieur à n.

Ces options peuvent être combinées aux moyens des opérateurs logiques :

✓ -o : OU logique

✓ -a : ET logique

✓ ! : NON logique
− Exemples :

✓ find . -name tp1 -print : cherche le fichier ou le répertoire


7
.

Année Universitaire: 2023-2024


tp1 dans lerépertoire courant.

✓ find tp -name '*.c' -print : cherche tous les fichiers sources C


dans lerépertoire tp.
✓ find tp -type d -print : cherche tous les sous-répertoires
contenus dans le répertoire tp.
✓ find . -size +1954 -print : cherche tous fichiers dont la
taille est supérieure à 1954 blocs (environ 1 Mo) dans le répertoire
courant.

✓ find tp \( -name '*.c' -o -name '*.f' \) : cherche tous


les fichiers sources C ou FORTRAN dans le répertoire tp.
✓ find . \( -name '*.py' -a -amin -1000 \) : cherche tous
les fichiers Python accédés depuis moins de 1000 minutes.

8
.

Année Universitaire: 2022-2023

Travail demandé

Activité 1: Redirection des entrées/sorties


1. Redirection de la sortie standard : le symbole >

a) Exécuter la commande ls. Taper ensuite ls > sorties, puis relister le contenu du
répertoire courant. Un nouveau fichier appelé sorties a été créé. Lire son contenu.
b) Exécuter maintenant la commande ls -l > sorties. Consulter à nouveau le contenu de sorties.

c) Concaténer le résultat de la commande ls >> sorties à la fin du fichier sorties.

2. Redirection de l’entrée standard : le symbole <

a) Comparer les résultats de wc < sorties et wc sorties. Expliquer la différence.

b) Ajouter le résultat de wc < sorties dans le fichier sortie.

3. Redirection d’erreur standard : les symboles 2>

a) Exécuter la commande wc tutu. Comme le fichier "tutu" n’existe pas, wc renvoie


uneerreur.
b) Exécuter maintenant wc tutu > sorties. Regarder le contenu de sortie.

c) Faire en sorte que le message d’erreur soit écrit dans un fichier nommé erreur.

Activité 2 : Les filtres


1. Copiez le fichier /etc/passwd dans votre home directory. Editez uniquement les champs
contenant lelogin et la home directory.
2. Triez passwd sur le nom

3. En une seule commande, extraire les noms d’utilisateurs et les UID, puis trier suivant les
UID etrediriger le tout vers un fichier file1.
4. Dans le fichier de résultat précédent remplacer les ":" par des " " (espace).

5. Editez les cinq premières lignes du fichier.

6. Editez les cinq dernières lignes du fichier.

Activité 3 : grep
1. Créer un répertoire "essai-grep" dans le répertoire d’accueil (home directory).

2. Dans ce répertoire, créer les fichiers suivants : tomate, poire, pomme, cerise, Fraise, fraise,
9
.

Année Universitaire: 2022-2023

courgette,POMME3, afraise.
3. Lister les fichiers (sortie de la commande ls redirigée vers grep) avec les critères suivants

a) Critère 1 : le nom doit être la chaîne Fraise ou la chaîne fraise.

b) Critère 2 : le nom se termine par la chaîne se.

c) Critère 3 : le nom contient la chaîne ai.

d) Critère 4 : le nom contient un chiffre numérique.

e) Critère 5 : le nom contient la chaîne mm ou la chaîne MM.

4. Copier le fichier /etc/passwd dans le home directory. Afficher la ligne commençant par le
nomd’utilisateur user1.
5. Dans le nouveau fichier passwd, afficher les lignes commençant par des noms d’utilisateurs
necontenant pas de chiffre.
6. Dans le même fichier passwd, afficher les lignes commençant par des noms d’utilisateurs de 3
ou 4caractères.
Activité 4 : find
1. Chercher dans toute l'arborescence les fichiers qui répondent aux critères suivants. Rediriger
leserreurs vers le fichier poubelle /dev/null.
a) les fichiers dont le nom se termine par la chaîne .c.

b) les fichiers commençant par la lettre X ou la lettre x.

c) les fichiers dont les noms ne contiennent pas de chiffre.

2. Chercher dans /usr les fichiers dont la taille dépasse 1Mo (2000 blocs de 500Ko) et dont les
droitssont fixés à 755 (rwx r-x r-x).
3. Combien de fichiers y-a-t-il dans toute l'arborescence appartenant à user1 et ayant les droits
fixés à666 (rw- rw- rw-).
4. Trouver tous les fichiers core dans l'arborescence et les supprimer.

10
.

Année Universitaire: 2022-2023

Partie 2 : Gestion des Processus


1. Définition
Un processus est une entité dynamique correspondant à l’exécution d’une suite d’instructions :
un programme qui s'exécute, ainsi que ses données, sa pile, son compteur ordinal, son pointeur de pile,
ses ressources et les autres contenus de registres nécessaires à son exécution.

2. Modes de lancement de processus

Processus en avant plan (foreground)


Lorsqu’on lance une commande, le Shell doit attendre, jusqu’à la fin de l’exécution de la commande
avant l’exécution d’une deuxième commande, pour retrouver le prompt de nouveau. On appelle ce
processus, un processus en avant plan.

Processus en arrière plan (background)

Si on ajoute & derrière la commande, ceci permet de lancer un processus en arrière plan.

Le Shell n’attend plus la fin de son exécution. On dit qu’il lance la commande en arrière plan. Lorsqu’un
utilisateur lance un processus en arrière plan, le Shell affiche entre crochets le numéro de tâche (job) et
le PID du processus. Le premier processus lancé aura un numéro de tâche = 1.

3. Commandes shell de manipulation de processus

3.1. La commande ps
La commande ps (process) liste les processus de l'utilisateur. L'option -e affiche tous les processus en
cours d'exécution sur un ordinateur et les options –l et –f affichent des informations détaillées. Ainsi,
la commande produit une sortie semblable à :

 UID nom de l'utilisateur qui a lancé le processus.

 PID correspond au numéro du processus.

 PPID correspond au numéro du processus parent.

 C au facteur de priorité : plus la valeur est grande, plus le processus est prioritaire

 STIME correspond à l'heure de lancement du processus

 TTY correspond au nom du terminal

 TIME correspond à la durée de traitement du processus

11
.

Année Universitaire: 2022-2023

 COMMAND correspond au nom du processus.


1) Lancer la commande ps. Interpréter les résultats
2) Lancer la commande ps –f. Interpréter les résultats
3) Lancer la commande ps –a. Interpréter les résultats

3.2. La commande kill

Un processus peut recevoir plusieurs signaux engendrés par la commande kill, ou bien par l’utilisateur
en frappant sur des touches du clavier ou causés par des erreurs matérielles ou logicielles. L’utilisateur
peut utiliser des touches pour tuer un processus en avant plan en cliquant sur CTRL^C ou le suspendre
en cliquant CTRL^Z.
La commande kill permet d’envoyer un signal à un processus, et ce signal est identifié par un numéro.
Contrairement à ce que son nom semble indiquer, le rôle de cette commande n’est pas forcément de
détruire ou de terminer un processus, mais d’envoyer des signaux aux processus.
kill [-l] -Num_signal PID1 [PID2...] Le
signal est l’un des moyens de communication entre les processus. Lorsqu’on envoie un signal à un
processus, celui-doit doit l’intercepter et réagir en fonction de celui-ci. Certains signaux peuvent être
ignorés, d’autres non.

Figure 2 : Résultat de la commande kill –l

Les signaux sont numérotés et nommés, la liste des signaux peut être visualisée en appliquantl’option
–l à la commande kill.
Lancer la commande kill -l. Interpréter les résultats

3.3. La Commande jobs

La commande jobs permet d’afficher la liste des tâches du Shell courant (suspendus ous’exécutant en

12
.

Année Universitaire: 2022-2023

tâche de fond) avec leurs numéros de tâches, les PIDs et les états des processus.

Lancer la commande jobs –l . Interpréter les résultats.

3.4. La commande fg

Relancer l’exécution d’un processus en arrière plan en un processus en avant plan.

fg %n
n désigne le numéro de tâche.

3.5. La commande bg

Relancer l’exécution d’un processus suspendu en processus en arrière plan.

bg %n
n désigne le numéro de tâche.

3.6. La commande sleep

▪ sleep : fait une pause pendant une durée correspondant à la somme des valeurs indiquées sur la ligne de
commande. Chaque argument est composé d'un nombre suivi éventuellement d'une unité (s, m, h, d).

Exemples
sleep 10; ps => cette commande va lancer une commande ps 10s après la validation (touche entrée).
Lancer les commandes suivantes. Interpréter les résultats.
sleep 1m, ps => pareil mais pour une minute
sleep 1h, ps => pareil mais pour une heure
sleep 1d, ps => pareil mais pour un jour.

3.7. La commande top

La commande top vous permet d'afficher des informations en continu sur l'activité du système. Elle
permet surtout de suivre les ressources que les processus utilisent (quantité de RAM,pourcentage de
CPU, la durée de ce processus depuis son démarrage). Pour quitter l’utilitaire top, il suffit
d’appuyer sur la touche "q".

Lancer la commande top. Interpréter les résultats.

3.8. La commande time

La commande time mesure les durées d’exécution d’une commande, idéale pour connaître l e s temps

13
.

Année Universitaire: 2022-2023

de traitement, et retourne trois valeurs :


 real : durée totale d’exécution de la commande

 user : durée du temps CPU nécessaire pour exécuter le programme

 system : durée du temps CPU nécessaire pour exécuter les commandes liées àl’OS
(appels système au sein d’un programme).
Si le résultat est inférieur à 10, la machine dispose de bonnes performances, au-delà de 20 lacharge
de la machine est trop lourde (performances basses).

Lancer la commande time. Interpréter les résultats.

4. Gestion des signaux et des états des processus

▪ & : permet de lancer une commande en arrière-plan.


▪ fg : permet de reprendre un processus au premier plan (foreground).
▪ bg : permet de passer un processus en arrière-plan (background).
▪ CTRL+Z : permet de rendre un processus normal un job en état de suspension (pause).
▪ kill : permet d’envoyer un signal à un processus en se basant sur les pid des processus.

Exercice 1 : Visualisation et arrêt du processus


1) Décrire ce qui se passe si on lance la séquence de commandes qui suivent et déduire la différence entre une
exécution an avant plan et une exécution en arrière plan
Note : la commande sleep n permet de rien faire pendant n secondes
sleep 10 ; ps
sleep 10 &
14
.

Année Universitaire: 2022-2023

1) Lancer, dans la deuxième session, une commande dont l’exécution dure longtemps (exemple : cat sans paramètre)
i. A partir de la première session, déterminer le numéro de processus (PID) correspondant à la commande lancée
puis lancer les commandes :
kill –9 PID
ps -af
ii. Interpréter les résultats
Exercice 2 : Exécution au premier plan et en arrière-plan
1) Lancer la commande cat (sans paramètre), puis ouvrir une autre session et lancer la commande ps –af
2) Essayer de suspendre l’exécution du processus cat en tapant CTRL Z. Noter le numéro de
travail
3) Lancer ensuite la commande cat > fic puis essayer de suspendre son exécution. Noter le
numéro de travail
4) Taper bg numjob dont numjob est le numéro de travail de la commande cat. Interpréter le
résultat
5) Taper fg numjob dont numjob est le numéro de travail da la commande cat > fic puis
terminer son exécution par un CTRL C. Interpréter le résultat
6) Revenir à la deuxième session ouverte et tuer le processus de la commande cat

15

Vous aimerez peut-être aussi