0% ont trouvé ce document utile (0 vote)
130 vues49 pages

1 Cours Système

Ce chapitre traite de l'installation et de la gestion de base d'un système GNU/Linux, incluant l'installation de distributions, les mécanismes de résolution de problèmes comme l'aide en ligne et les commandes de base pour naviguer dans le système de fichiers et exécuter des processus.

Transféré par

blancos lorenzo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
130 vues49 pages

1 Cours Système

Ce chapitre traite de l'installation et de la gestion de base d'un système GNU/Linux, incluant l'installation de distributions, les mécanismes de résolution de problèmes comme l'aide en ligne et les commandes de base pour naviguer dans le système de fichiers et exécuter des processus.

Transféré par

blancos lorenzo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 2 : Le Shell Unix et la gestion des processus

PLAN DU COURS
2.1 Installation de GNU/linux
2.2 Les mécanismes de résolution des problèmes
2.3 Le Shell BASH
2.4 Les commandes de base
2.5 Les éditeurs de textes
2.6 Les redirections
2.7 Les filtres et utilitaires
2.8 La gestion des processus
2.9 Travaux Pratiques
2.10 Travaux Dirigés
2.1 Installation de GNU/linux

A- Installation de ubuntu server 17.04 ou 16.04 LTS, (mais cela dépend de


l’enseignant, néanmoins il doit utiliser une distribution de la famille
DEBIAN avec le gestionnaire de paquet APT).

B- Installation de fedora server 25 ou 26 (mais cela dépend de l’enseignant,


néanmoins il doit utiliser une distribution de la famille REDHAT «
scientific linux, opensuse, fedora desktop, CentOS avec le gestionnaire de
paquet YUM et/ou DNF)

2.2 Les mécanismes de résolution des problèmes


Il n’est pas possible de connaitre par cœur toutes les commandes GNU/Linux et tous les
arguments d’une commande pour cela GNU/linux un ensemble de mécanismes permettant
d’aider l’utilisateur à trouver des références sur la commande recherchée.

A- L’aide propre aux commandes


Certain programmes GNU/Linux ont intégrés leur propre aide, il s’agit de l’aide propre aux
commandes, elle s’obtient en tapant le commande :

Commande --help
Figure : résultat de la commande date –help

B- L’aide interne au shell

Le Shell dispose de commandes et des programmes internes pour obtenir la liste de ces commandes on
renseigne sur le Shell la commande help
Figure : résultat de la commande help

Pour obtenir l’aide d’une commande interne au Shell on tape la commande suivante :

$ help commande

Exemple: help type ; help unset; help pwd ; help echo

Figure : résultat de la commande help type


C- Le manuel en ligne

Le manuel est commun à tous les systèmes UNIX, c’est un standard POSIX (Portable
Operating System Interface) il est accessible par la commande man

Figure : man date

La capture précédente nous présente le résultat de la commande man date pour le quitter on
tape le lettre q. Le manuelle possède neuf (9) sections, la commande man man permet de
connaitre les différentes sections du manuel
Figure : les différentes sections du manuel GNU/Linux.

Par défaut le manuel recherche les pages correspondantes à une commande à la première section
de celui-ci.

Figure : passwd(1)

Pour obtenir l’aide de passwd on tape la commande man 1 passwd

Figure : ifconfig(8)
Pour obtenir le manuel de ifconfig il faut appeler la huitième section du manuel man 8 ifconfig
On quitte le manuel d’une commande avec la touche q, on y recherche des mots clés avec la touche
slash (/) et n recherche l’occurrence suivante du mot tandis que Shift n recherche l’occurrence
précédente.

D- La recherche par correspondance (apropos)


Il s’obtient lorsque vous avez un doute sur la commande à utiliser, ou que vous avez
perdu son nom, ou encore vous voulez connaitre toutes les commandes liées à un mot. On
l’obtient avec le paramètre –k de man :

$ man –k commande

Figure : résultat de la commande man –k passwd

Ici on nous liste toutes les commandes liées à passwd.

E- La commande info
Permet de lire les pages de manuel au format info, le manuel info est similaire au manuel
mais les pages sont structurés, organisés et hiérarchisés avec des index.

Le manuel info s’obtient avec la commande : info commande.


Figure : le manuel au format info de la commande passwd.

2.3 Le shell BASH

Un système d’exploitation permet d’offrir aux utilisateurs une abstraction leurs permettant
d’utiliser les ressources matérielles de l’ordinateur et d’exécuter des tâches.

Pour pouvoir travailler un utilisateur possède une interface utilisateur qui peut être une interface
en ligne de commande où une interface graphique. La théorie des interfaces graphiques n’est
pas traitée dans les livres des systèmes d’exploitation, elle n’en fait pas partie.

Unix est un système d’exploitation en ligne de commande possédant un terminal qui reçoit des
commandes saisies au clavier et renvoie les résultats à l’écran.

Il est inenvisageable pour un professionnel de GNU/Linux de ne pas connaitre la ligne de commande


et les interpréteurs de commandes ainsi que les commandes qui leurs sont associées.
L’interpréteur de commande ou interprète permet d’exécuter des instructions que vous
saisissez au clavier ou au sein d’un script et vous retourne des résultats. Cet interpréteur est un
programme dénommé Shell.

Il existe plusieurs Shells chacun disposants des spécificités qui lui sont propres.

 Sh : Thompson SHell ;

 Sh : Bourne SHell ;

 Bash : Bourne Again SHell ;

 Ksh : Korn SHell ;

 Csh : C SHell ;

 Dash : Debian Almquist SHell.

La liste des Shells de votre distribution se trouve dans le fichier /etc/shells.

Figure : Liste des Shells dans une Ubuntu server

Le Shell par défaut des distribution GNU/Linux est le Shell BASH ( Bourne Again SHell) de
son créateur Bourne il est une amélioration du Bourne Shell de Ken Thompson, il est un
mélange du C Shell et du Korn Shell, c’est le Shell du projet GNU, il a été créé le 08 juin 1989,
c’est aussi le Shell par défaut des MAC OS X, il existe aussi une version pour le système
d’exploitation Windows.

Le Shell fonctionne au sein d’un terminal, il attend des commandes saisit au clavier. Il existe deux
types de terminaux dans le monde de GNU/Linux :
 Les terminaux graphiques, comme xterm, eterm, konsole, gnome-terminal ;

 Les consoles virtuelles textes, qui est le mode par défaut des distributions Gnu/Linux.

Figure : console virtuelle texte

Le Shell attend des commandes sur une ligne appelé invite de commande ou prompt.

Cette ligne a pour signification ceci, l’utilisateur abanda sur la machine ubuntu-server sans privilège
particulier se trouve dans le répertoire tilde (/home/abanda/)

Il existe deux types de privilège : le mode super utilisateur (#), et le mode utilisateur simple marqué
par le symbole ($).

Plusieurs raccourcis clavier peuvent être utilisés :

 Ctrl A : aller au début de la ligne ;

 Ctrl E : aller en fin de ligne ;

 Ctrl L : effacer le contenu du terminal ;

 Ctrl U : efface la ligne jusqu’au début ;


 Ctrl K : effacer la ligne jusqu’à la fin.

A- La programmation Shell

Le hell est aussi un langage de programmation permettant d’écrire des scripts et de les faire
interpréter par le système. Un script est un ensemble de commande regroupées dans un fichier
pour être exécuter simultanément.

Un script peut se composer de commande internes ou externes, de commentaires ou être vide.

Par convention un script se termine avec l’extension du shell qui va exécuter le script :

 .sh : pour le Bourne shell et le Bourne Again Shell.

 .ksh : pour le Korn Shell.

 .csh : pour le C Shell.

Pour qu’un script s’exécute, il doit avoir le droit d’exécution. Pour l’attribuer à un fichier on exécute
la commande suivante :

# chmod u+x fichier

Pour exécuter un script on tape devant l’invite de commande la commande suivante :

# ./[Link]

Elaboration du script

Pour élaborer un script la première ligne renseignée doit être la ligne shabang, elle permet de
renseigner le Shell sur lequel va s’exécuter le script.
# ! /bin/bash

# ! /bin/dash

On peut commenter un script pour une meilleur édification lors de la lecture de celui-ci, on fait cela
avec un (#) devant le texte.

Voici un exemple de script.

2.4 Les commandes de base

A- Notion de chemin absolu et relatif

Un chemin est la liste des répertoires et sous répertoires empruntés pour atteindre un fichier ou
un endroit dans le système de fichier.

Point clé

Un chemin absolu est celui commençant par la racine du système de fichier jusqu’à la destination il
commence par un / (/home/abanda/desktop).

Un chemin relatif décrit une position relative à la position courante de l’utilisateur ; la notion de
chemin relatif implique deux notions :

 (.) qui représente de répertoire courant.

 (..) qui représente le répertoire parent.


./desktop/film, document/root

Les opérations suivantes sont faites sur un répertoire : création, suppression, navigation, modification.

B- Syntaxe générale d’une commande

Les commandes ou, instructions GNU/Linux ont la syntaxe suivante :


Commande [paramètres] [argument]

Les crochets veulent dire ici que les paramètres et les arguments ne sont pas obligatoires,
une commande peut avoir ni paramètres ni arguments.

Un paramètre est une option de la commande les deux mots sont synonymes, c’est
souvent une simple lettre précédée d’un tiret ( -l , -p , -s ,-i, -h), une commande peut accepter
plusieurs paramètres les un à la suite des autres (-l –p –h) ou en écrivant avec un seul tiret et en
mettant tous les paramètres à la suite de ce tiret (-lph), les deux syntaxes sont équivalentes.

Il est possible dans GNU/Linux de chainer les commandes les unes à la suite des autres en utilisant le
séparateur (;) :

$ date ; cal ; ls ;man

Point cl é
Il existe deux types de commandes les commandes externes et les commandes internes :

 Les commandes externes : ce sont des fichiers binaires présent en tant que programme
dans votre disque dur ;

 Les commandes internes : ce sont des programmes internes au Shell exécutés au sein de
celui-ci, on obtient la liste de ces commandes en exécutant la commande help.

On distingue une commande interne d’une commande externe en tapant la commande


$ type commande

Ici on exécute la commande type avec pour paramètre date programme qui affiche la date et pwd
programme qui affiche le répertoire de travail, nous voyons les résultats.

C- Sensibilité à la casse
Point cl é

Linux est un système d’exploitation sensible à la casse, cela veut dire qu’il existe une différence entre
les minuscules et les majuscules ; fichier est différent de Fichier.

Dans les GNU/Linux tout ou presque est fichier ; il existe trois types de fichiers GNU/Linux :

 Les fichiers spéciaux : il s’agit ici des périphériques, Ram, disque dur, Bus, souris,
clavier…

 Les fichiers simples : il s’agit des fichiers ASCII, musique, vidéo, logiciel…  Les fichiers

catalogues : il s’agit des répertoires ou dossiers.

D- Commande de manipulation des fichiers

1- file

Cette commande permet de déterminer le type d’un fichier ; les fichiers GNU/Linux ne possède
pas d’extension il n’existe pas de .mp3, .mp4. Pour connaître le type d’un fichier, on utilise un
modèle possédant les types de fichiers se trouvant dans le fichier /usr/share/file/magic.
La commande man 5 magic permet de consulter ces différents types d’extensions de fichier.

2- touch

Permet de créer un fichier vide et de changer la date de dernière modification d’un fichier.

3- rm

Permet de supprimer de façon définitive un fichier ou plusieurs évidemment une arborescence


complète.

Quelques paramètres sont intéressants :

 -i : supprime une arborescence complète.

 -f : force la suppression d’un fichier.

 -r : supprime une arborescence de fichier.

4- cp

Cette commande copie un ou plusieurs fichiers ou un répertoire.


Plusieurs paramètres sont disponibles :

 -i : demande de confirmation.

 -r : copie un répertoire.

 -f : force la copie.

 -p : les permissions et les dates sont conservées.

5- mv

Permet de déplacer un ou plusieurs fichiers d’une source vers une destination, permet aussi de
renommer un fichier.

Quelques paramètres sont à connaitre :


 -i : demande de confirmation.

 -f : force la copie.

 -u : permet de ne pas écraser les fichiers les plus récents.

E- Commande de manipulation des Répertoires


Dans GNU/Linux un répertoire est appelé catalogue, il sert de conteneur pour les autres fichiers et
répertoires au sein d’une arborescence.

Le système de fichier GNU/Linux se présente sous forme d’arbre avec pour début le répertoire racine
ou root directory (/). L’architecture du système de fichier Unix est présenté comme suit :

Figure : arborescence de GNU/Linux.


Les commandes de manipulations des fichiers sont les suivantes :

1- pwd
Print Working Directory est une commande GNU/Linux interne au Shell qui permet de connaitre
la position de l’utilisateur dans l’arborescence du système de fichier.

2- mkdir

Permet de créer un répertoire vide.

Le paramètre -p permet de créer des répertoires imbriqués les un à la suite des autres..

3- rmdir

Permet de supprimer un répertoire vide.

On peut supprimer également des répertoires imbriqués vides avec le paramètre -p.

4- ls

Liste le contenu d’un répertoire.

Plusieurs paramètres sont utilisés pour cette commande :

 -a : liste tous les fichiers mêmes ceux qui sont cachés.

 -l : liste de façon détaillé un fichier.


 -h : imprimes-en human readable, va de pair avec le paramètre -l

 -i : liste le numéro d’inode d’un fichier.

 -d : liste uniquement le répertoire courant.

5- cd

Cette commande permet de naviguer dans l’arborescence du système de fichier.

a- cd ou cd

Permet de rentrer dans le répertoire personnel de l’utilisateur.

b- cd ..

Permet de rentrer dans le répertoire parent du répertoire courant.

F- Commande de recherche des fichiers


1- find
La commande find permet d rechercher des fichiers dans l’arborescence du système de
fichier, à l’aide de critères et donne la possibilité d’agir sur les résultats retournés. Cette
commande est récursive car elle agit sur le répertoire et tous les sous répertoires de
l’arborescence.

Sa syntaxe est la suivante :

find chemin critères options

Cette commande possède plusieurs critères de recherche :

a. -name

Permet une sélection par nom, il est possible d’utiliser les wildcards le nom ici est entre guillemet.
Ici on recherche tous les fichiers qui ont pour extension .h à partir de la racine du système de fichier.

b. -type

Permet une sélection par type de fichier les types de fichier sont listés dans le tableau suivant. Point
cl é

Code Type de fichier


C Fichier spécial en mode caractère
D Répertoire
F Fichier ordinaire
L Lien symbolique
B Fichier spécial en mode bloc
P Tube nommé
S Socket
Tableau : Type de fichier linux.

On recherche tous les fichiers spéciaux bloc à partir de la racine.


c. -atime, -mtime -ctime
-atime : correspond à la date de dernier accès au fichier (access time). Un accès peut être en lecture du
fichier ou le simple fait de le lister.

-mtime : recherche sur la date de dernière modification du fichier (modification time), il s’agit du
changement effectué dans un fichier.

-ctime : recherche sur la date de dernier changement (change time, il s’agit de la date de dernière
modification du numéro d’inode).

Les jours sont utilisés comme paramètres, 0 représente le jour même, 1 représente hier, 2 avanthier
ainsi de suite.

On peut utiliser les signes + et – qui signifie plus de et moins de


On recherche les fichiers dont la dernière modification remonte à moins de 24 h.

d. -size

Permet de rechercher les fichiers par leur taille. Les valeurs situées après le critère sont les suivantes.

Point cl é

Caractère Signification
b Par défaut si non précisé, il s’agit d’un bloc de 512 octets.
c C’est un caractère, au sens ASCII, donc 1octet.
w C’est un mot de 2 octets.
k 1 ko
Tableau : différentes valeurs de recherche.

Les valeurs plus ou moins peuvent être utilisées + et –

On recherche les fichiers de plus de 10000 k0, la sortie est tronquée.


e. -user et -group

Permettent de rechercher sur le propriétaire et le groupe d’appartenance des fichiers. On peut préciser
le nom ou l’uid et/ou gid.

On recherche tous les fichiers appartenant à root qui sont des fichiers ordinaires.

DEVOIR : à l’aide du manuel linux répondez aux questions suivantes :

1- Rechercher tous les fichiers qui sont des fichier socket et afficher les détails ?

2- Recherchez tous les fichiers qui sont des fichier mp3 puis supprimez-les ?

3- Recherchez tous les fichiers qui sont des fichier mp3 puis supprimez-les en demandant
confirmation pour chacun d’eux ?

4- Recherchez tous les fichiers ordinaire ou catalogue ?

5- Rechercher tous les fichiers qui ne sont ni ordinaire, ni catalogue ?

6- Rechercher tous les fichiers ordinaires avec pour taille 1000 k ?

2- whereis
Cette commande permet d’effectuer des recherches dans les chemins des binaires, du manuel et
des sources.

DEVOIR : à l’aide du manuel de whereis trouver les entrées de la commande date pour : a.

Le chemin des binaires ?

b. Le chemin du manuel ?

c. Le chemin des sources ?

3- which

Permet de rechercher les fichiers dans le chemin des exécutables. Cette commande n’affiche que la
première occurrence trouvée, pour continuer la recherche, il faut ajouter (-a).

2.5 Les éditeurs de textes


A- vim
Plusieurs programmes permettent d’éditer les fichiers. Dans le monde UNIX deux éditeurs
sont en concurrence il s’agit de vi (Visual Editor) et emacs. La version GNU/Linux de vi
s’appelle vim. Il est simple, occupe peu d’espace disque et de mémoire. Sa syntaxe est la
suivante :

vi [option] fichier [fichier2…]

L’utilisation de vi nécessite de la part de l’administrateur une certaine maîtrise des raccourcis clavier.
1- Fonctionnement

Figure : principe de fonctionnement de vim Il


existe trois modes de fonctionnement :

 Le mode commande : les saisies ici représente des commandes. On y accède en appuyant sur
[Echap] ;

 Le mode saisi : c’est la saisie du texte classique ;

 Le mode ligne de commande : une ligne en bas de l’écran permet la saisie des commandes
spéciale, validée par la touche [Entrée] on y accède en appuyant en mode commande sur la
touche « : »

Vim par défaut est en mode commande pour saisir du texte il faut appuyer sur la touche :a ou i

pour quitter on utilise la combinaison de touche suivante [Echap] : q et [Entrée]. La touche

[Echap] revient toujours en mode commande


2- Les commandes

Les actions suivantes sont à effectuer en mode commande. Elles doivent être précédées d’un appui
d’un [Echap] : [Echap] a, [Echap] i, etc.

Commande Action
a Ajout après le caractère actuel.
A Ajout de texte en fin de ligne.
i Insertion devant le caractère actuel, comme dans un traitement de texte.
I Insertion de texte en début de ligne.
o Ajout d’une ligne sous la ligne actuelle.
O Insertion d’une ligne au-dessus de la ligne actuelle.
Tableau : commande vim

3- Quitter et sauver

Point cl é

Les combinaisons de touche permettant de quitter de vim sont les suivantes :

Commande Action
ZZ Sauve le fichier et quitte.
:q ! Quitte sans sauver.
:q Quitte si le fichier n’a pas été modifié.
:w Sauve le fichier, vous pouvez préciser un nom à la suite.
:wq ou :x Sauve et quitte.
1, 10 fic Sauve les lignes de 1 à 10 dans fic.
Tableau : combinaison de touche pour quitter vim
B- Nano
Pour éditer du texte on utilise nano nom du fichier.

 [Ctrl]+o : permet d’enregistrer un fichier.

 [Ctrl]+x : permet de quitter le fichier.

C- Gedit

Gedit (Gnome Editor) est l’éditeur de texte de l’interface graphique du projet GNU appelé
GNOME (Gnu Network Object Model Environnement) il permet d’écrire des textes en mode
graphique. Sa syntaxe est la suivante :

$ gedit nom_fichier

On peut écrire du texte qu’on enregistre avec la combinaison de touche [Ctrl]+ s


2.6 Les redirections
Un système GNU/Linux lors de l’exécution d’un processus est constitué de trois canaux qui sont :

Point clé

 Le canal d’entrée ou canal 0 appelé stdin : le clavier ;

 Le canal de sortie ou canal 1 appelé stdout : l’écran ; 

Le canal d’erreur ou canal 2 appelé stderr : l’écran.

Figure : entrées/sorties standard


A travers la redirection les données de l’écran peuvent être envoyées vers un fichier, une imprimante
ou tout autre périphérique.

Les flux de données en entrées peuvent provenir non d’un clavier, mais d’un fichier.

Point cl é

Figure : redirection de toute les E/S vers ou provenant d’un fichier.

A- Redirection en sortie

Pour rediriger les fichiers en sortie on utilise le caractère (>) suivi du fichier sur lequel va
aller la sortie. Si le fichier n’existe pas il sera créé automatiquement. Si le fichier existe, son
contenu sera écrasé.
Pour pouvoir rajouter les fichiers à la suite on utilise le caractère suivant (>>).

B- En Entrées

Les programmes qui attendent des données depuis le clavier peuvent aussi les recevoir depuis un
fichier.

2.7 Les filtres et utilitaires

Un filtre est un programma sachant écrire et lire des données par les canaux standards
d’entrée et de sortie il en modifie ou traite le contenu.

Les redirections permettent de rediriger les résultats d’une commande dans un fichier pour
le traiter par une autre commande à la place, nous pouvons utiliser les filtres, ils s’obtiennent
avec le caractère (|), [AltGr]+6.
+-
A- Quelques Commandes
1- grep
Permet de rechercher du texte dans un fichier, sa syntaxe est la suivante : grep
[Options] modèle [fichier1…]

Les options de grep sont résumées dans un tableau.

Options Interprétation
-c Ne retourne que le nombre de lignes trouvée sans les afficher.
-i Ne différencie pas les majuscules et minuscules.
-n Indique le numéro de ligne pour chaque ligne trouvée
-v Effectue la recherche inverse : toutes les lignes ne correspondant pas aux
critères sont affichées

Tableau : paramètres de grep


2- sed

C’est un éditeur de flux, il permet de filtrer et de transformer du texte. Sa syntaxe de base est : sed

-e ‘<cmd>’ fic

La syntaxe basique de substitution est la suivante :

s/<ancien>/nouveau/ [g]

Le g final permet de faire un remplacement sur toute la lignz en cas de présence de plusieurs
occurrences du même élément.

3- cut

Permet de sélectionner des colonnes et des champs dans un fichier. Sa syntaxe est la suivante :

cut -cColonnes [fic1…]

Le format de sélection est le suivant :

 une seule colonne : -c2 ;

 une plage : -c2-4 ;


 une liste de colonne : -c1,2,6 ;
 les trois au même moment : -c1-3, 4,6,7.

La commande permet également de sélectionner les champs avec son paramètre -fchamps le paramètre
-d permet de mettre le séparateur.

4- wc

Permet de compter les lignes, les mots et les caractères. Sa syntaxe est la suivante : wc
[-l][-c][-m][-w] fic1

Options Signification
-l Compte le nombre de ligne
-c Compte le nombre d’octets
-m Compte le nombre de caractères.
-w Compte le nombre de mots
Tableau : option de wc

5- sort

Permet de trier les lignes. Par défaut le tri s’effectue sur tout le tableau et par ordre croissant. Le

tri est possible sur un ou plusieurs champs. Sa syntaxe est la suivante : sort [options] [-k pos1

[,pos2]] [fic1…]

Quelques paramètres sont rassemblés dans le tableau suivant :

Option Signification
-d Tri dictionnaire
-n Tri numérique, pour les colonnes de
chiffre

-b Ignore les espaces en début de champ


-f Pas de différence entre majuscule et
minuscule

-r Reverse, tri par ordre décroissant


Tableau : option de sort

2.8 La gestion des processus


Linux et système multiprogrammé, il peut donc exécuter plusieurs processus au même
moment. Plusieurs milliers de processus peuvent s’exécuter, par exemple dans le cas d’un
serveur ; il existe des processus qui n’interagissent pas directement avec l’utilisateur, ils se
nomment des démons ils s’exécutent en tâche de fond.

GNU/linux possède une hiérarchie de processus, le premier processus Linux s’appelle init
son PID vaut 1 il est le père de tous les autres processus, il est le premier à être lancé par le
système d’exploitation. Tout comme son système de fichier, GNU/linux possède une hiérarchie
de processus en arborescence constituée de processus parent et de processus enfant qui peuvent
eux même créer des processus ainsi de suite, formant un arbre.
Un processus est un programme encours d’exécution et son environnement les éléments d’un
processus sont les suivants :
Point clé

 Un numéro de processus unique PID : chaque processus Unix est numéroté afin d’être
différencié des autres.

 Un numéro de processus père : numéro de processus ayant lancé un autre processus.

 Un numéro d’utilisateur et de groupe : qui corresponde à l’UID et le GID de l’utilisateur


ayant lancé le processus.

 Durée de traitement et priorité : la durée de traitement correspond au temps d’exécution


écoulé depuis le dernier réveil du processus.

 Répertoire de travail actif : représente le répertoire depuis lequel a été lancé le processus.

 Fichiers ouverts : il s’agit ici de la table des descripteurs de fichiers ouverts par défaut
il s’agit du canal 0,1 et 2.

 La taille de la mémoire allouée.

 La date de lancement du dernier processus,

 Le terminal d’attachement.

 L’état du processus.

A- Création des processus Unix

Tous dans un système d’exploitation est processus, le Shell lui-même est un processus, il
permet de lancer d’autre processus. Chaque processus crée au sein du Shell est fils du processus
Shell il hérite donc des données du père.

La création d’un processus linux se fait avec l’appel système fork() qui crée une copie
conforme du processus qui l’invoque avec les même information et la même image mémoire.
Lors de la création du fils un nouveau descripteur de processus et un contexte mémoire sont
créés. Le code de retour de l’appel système fork vaut 0 pour le fils et un entier non nul pour le
père. L’appel système getpid permet au processus de onnaitre son PID.
Quand un processus fils est créé il subit un vidage des données du père à l’aide de l’appel système
execve, exec, execv.

Figure : étape de création d’un processus.

B- Communication interprocessus

Les processus Linux peuvent communiquer. La communication inter-processus est une


opération assez complexe car les processus ne sont pas faits pour s’entraider, mais pour être en
concurrence.

Point cl é

La communication se fait par :

 Envoi de message : cela est effectuer par un canal créé entre les deux processus tube ou
pipes.

 Interruptions logicielles : un processus envoie un signal à un autre et celui réagit en


fonction de la procédure établit, un processus ne peut envoyer un signal qu’au membre
de son groupe.

Les signaux auxquels les processus réagissent sont visible avec la commande kill -l
C- Ordonnancement des système GNU/Linux.

1- Quelles sont les classes d’algorithme d’ordonnancement rencontrés dans GNU/linux ?

2- Combien de niveau de priorité pour les algorithmes pour les threads temps réél ?

3- Combien de niveau de priorité pour les threads non temps réel ?

4- Que stipule la norme POSIX 1003.4 ?

5- Qu’est e qu’un quantum ?

6- Qu’est-ce qu’un jiffy ?

Un processus Linux ressemble à un iceberg, chaque processus a une composante utilisateur


et une composante noyau. Quand un thread lance un appel système, il bascule en mode noyau,
avec une image mémoire différente et un accès complet à l’ensemble des ressources de la
machine.

Point clé

L’ordonnancement dans les système linux est basé sur les threads et non sur les processus, linux
possède des threads noyau. On distingue ici trois classes de threads pour l’ordonnancement :

 Les FIFO (First In First Out, ou premier entré premier sorti) temps réel.

 Les tourniquets (round robin) temps réel.

 Les threads en temps partagé.


NB : La dénomination temps réel ici est juste utilisé pour marquer la compatibilité avec la norme
POSIX 1003.4 standard des extensions temps réel d’UNIX).

Les threads temps réel ont des priorités allant de 0 à 99 ; 0 correspond au niveau de priorité le
plus élevé et 99 au niveau le plus faible.

Les threads non temps réel ont des niveaux de priorités de 100 à 139, Linux distingue donc 140
niveau de priorités pour les threads temps réel et non temps réel.

En ce qui concerne les threads tourniquet temps réel un quantum de temps est attribué en fonction
du niveau de priorité de chaque thread.

Un quantum correspond au nombre de tic d’horloge pendant lequel le thread continu son
exécution. Dans la version courante de linux l’horloge est cadencée à 1000 Hz et chaque tic fait
1ms, ce qu’on appelle jiffy

Point clé

D- Les appels systèmes de gestion des processus

Il existe plusieurs appels systèmes pour la gestion des processus, lorsqu’un appel système est
invoqué il renvoi un code de retour qui est -1 quand l’opération rate.

Voici un tableau résumant quelques appels système de gestion des procesus.

Appel système Description


pid= fork() Crée un processus identique au parent
s = execve() Remplace l’image mémoire du processus
pid = waitpid() Attend la terminaison d’un enfant
exit() Termine le processus
s = kill(pid, sig) Envoie un signal à un processus
s = pause() Suspend le processus appelant jusqu’au prochain signal
Tableau : appels systèmes de gestion de processus
Point clé

E- Les états d’un processus Linux

Durant le cycle de vie d’un processus linux, il peut passer par différent états ou process state :

 Exécution en mode utilisateur en mode utilisateur (user mode).

 Exécution en mode noyau (kernel mode).

 En attente E/S (waiting).

 Endormi (sleeping).

 Prêt à l’exécution (runnable).

 Endormi dans le swap (mémoire virtuelle).

 Nouveau processus.

 Fin de processus (zombie).

F- Les commandes de gestion des processus

1- Lancement en tâche de fond

Lorsqu’une tâche GNU/linux est exécutée, l’invite de commande est offerte à


l’utilisateur à nouveau si le processus a terminé son exécution ; l’exécution d’un processus peut
prendre beaucoup de temps ce qui empêche l’utilisation du shell. Pour exécuter une tâche en
fond on utilise le Et commercial, « & ».

Nous constatons l’apparition de deux nombres le premier est le numéro de jobs et le second est
le PID du processus.
2- jobs

Cette commande permet d’obtenir le numéro de job d’un processus qui s’exécute.

La paramètre -p de jobs permet de voir le PID du processus.

3- fg

Pour stopper un processus en exécution on utilise la combinaison ctrl + z, le signal SIGSTOP est
envoyé au noyau. Pour relancer son exécution on utilise la commande fg (foreground).

4- bg

Acronyme de background, cette commande permet de ramener à l’arrière-plan une commande ou


un processus stoppé. Le signal SIGCONT est envoyé au processus.

5- ps

La commande process status permet d’avoir les informations sur les processus en cours d’exécution.
Les paramètres suivants sont à retenir :

 -f : permet d’avoir plus d’information sur un processus.

 -e : donne les informations sur les processus en cours.


 -u : permet de donner une liste d’un ou de plusieurs utilisateurs séparés par une virgule.

 -t : permet donner la liste des processus pour un terminal bien précis.

 -p : pout les PID.

 -l : propose plus d’information technique.

6- pidof

Permet d’identifier un processus par son nom en recherchant son PID.

7- pgrep

Permet d’identifier un processus par son nom et de rechercher son PID


8- top
C’est un outil permettant d’afficher de façon temps réel les processus qui s’exécutent et
leur priorité et beaucoup d’autres informations. Les processus s’exécutent dynamiquement en
fonction de leur occupation du processeur.

9- kill

Cette commande permet la communication inter-processus en envoyant des signaux à [Link]


syntaxe est la suivante kill pid
La liste des signaux est obtenu avec le paramètre -l de kill.

De façon standard l’utilisation de kill consiste à préciser le numéro du signal comme paramètre.

Pour tuer un processus on utilise le signal de terminaison normal SIGTERM ou on utilise la méthode
brutale avec le signal SIGKILL.

10- pkill

Cette commande permet de tuer un processus en utilisant son nom et nom son PID.

11- nice

Cette commande permet de lancer un processus avec une priorité plus faible afin de permettre à
d’autre processus de fonctionner normalement.
Les priorités sont de 0 à 20 pour un utilisateur simple et peuvent pour le super utilisateur aller jusqu’à
-20 qui est la priorité la plus élevée.

Sa syntaxe est la suivante :

Nice [-valeur] commande [arguments]

12- renice

Cette commande fait la même chose que nice mais permet de modifier la priorité en fonction des
utilisateurs. La commande visée doit donc déjà tourner. Sa syntaxe est la suivante :

Renice [-n prio] [-p] [-g] [-u] ID

La priorité est comprise entre -20 et 20. Les option sont les suivantes :

 -p : précise le PID.

 -g : précise un GID.

 -u : précise un UID.
2.9 Travaux Pratiques
1- A partir de votre répertoire personnel créer à partir d’une même commande les dossier suivant
/dossier1/dossier3 dossier4/dossier2 ?

1- Déplacez-vous dans le répertoire dossier3 puis créer le fichier fichier1 ?

2- Copier fichier1 dans /dossier1 ?

3- Déplacer fichier1 vers dossier4 ?

4- Renomme fichier1 en fichier2 puis déplacer-le dans /etc ?

5- Supprimer fichier2 ?

6- Avec rmdir supprimer dossier2 puis supprimer dossier1 avec tout son contenu ?

7- Affichez tous les fichiers ayant une taille inférieure à 600 octets et ayant les droits de 644 ?

8- Affichez dans votre répertoire de travail tous ls fichiers du système vous appartenant

modifiés il y’a 40 jours ?

9- Lister de façon détaillée les fichiers qui ont pour propriétaire guest ou qui ont une taille entre
512 et 1024 octets, inclus ?

10- Rechercher tous les fichiers vides du système n’appartenant pas à root et supprimer les ?

11- Donnez la commande permettant de rediriger les erreurs vers le trou noir

12- Le fichier /etc/passwd possède la base de données des utilisateurs linux, donne la commande
permettant de récupérer la ligne root ?

13- De cette ligne récupérer l’identité (UID) de root ?


14- Compter le nombre d’utilisateur contenus dans ce fichier ?

15- Convertissez tous les logins en majuscule ?

16- Isoler la huitième ligne de /etc/passwd ?

17- Lancer le processus sleep 1000 en arrière-plan puis récupérer son PID ?

18- Replacer le processus en avant-plan puis stoppez-le (ne le tuez pas) et replacez-le en arrière-
plan ?
19- Modifiez la priorité de ce processus ; passez-le à un facteur -10 ?

20- Envoyez un signal 9 à ce processus ?

21- Ecrire un script permettant de rassemble les commandes exécuter ci-dessus ?


2.10 Travaux Dirigés

1- Que veut dire : BASH KSH, CSH, SH, DASH ?

2- Qu’est-ce qu’un shell ?

3- Quel est l’avantage d’une interface en ligne de commande sur une interface graphique ?

4- Quel est le shell par défaut des distributions Linux ? où se trouve la liste des shells ?

5- Vous avez tapé une commande qui ne s’arrête plus. Que faire pour terminer le programme ?

6- Un programme exécutable est-il un fichier spécial ?

7- Quelle est la longueur d’un nom de fichier, extension comprise ?

8- Donnez dans la liste suivante les chemins absolus :

 ~/Documents ;

 /usr/local/bin ;

 /opt/kde3/bin/../lib ;

 /home/seb/Documents.

9- Quel est l’effet d’un cd sans paramètre ?

10- Comment lister de manière récursive tous les fichiers sans exception présents dans /etc, quelle
est la commande à taper ?
11- Comment afficher la liste détaillée des fichiers, mais les derniers modifiés apparaissant en
dernier dans la liste ?

12- Vous voulez créer le plus simplement possible dans votre répertoire personnel le chemin
couts/D/reper, sachant qu’aucun de ces répertoires n’existe comment vous faites ?

13- Vous voulez supprimer le répertoire C ci-dessus ainsi : rmdir C cela va-t-il fonctionner ?

14- Comment copier un dossier du répertoire personnel /root/ vers /home/cours ?

15- Quel est l’effet en tant que root de la commande rm- rf /* ?


16- Comment créer un lien symbolique de /tmp/seb vers B/home/abanda ?

17- Comment lister tous les fichiers de mp3 de plus de 2 Mo ?

18- Comment peut-on trouver le fichier gedit dans le PATH ?

19- Dans vim comment rentrer en mode saisie pour insérer du texte à l’endroit actuel, quel que soit
le mode précédent ?

20- Quels sont les moyens permettant de quitter vim en sauvant son fichier ?

Vous aimerez peut-être aussi