0% ont trouvé ce document utile (0 vote)
141 vues20 pages

Unixept ForStudents

Le document décrit le système d'exploitation Unix, y compris sa structure en couches, son noyau, son système de fichiers unifié et sa gestion des processus et des ressources matérielles.

Transféré par

Hamdi Barkous
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)
141 vues20 pages

Unixept ForStudents

Le document décrit le système d'exploitation Unix, y compris sa structure en couches, son noyau, son système de fichiers unifié et sa gestion des processus et des ressources matérielles.

Transféré par

Hamdi Barkous
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

Initiation à l’utilisation du système d’exploitation Unix 1

1. Introduction

Un système d’exploitation peut être simplement défini comme un programme


ou un ensemble de programmes qui permet à un utilisateur d’exploiter
efficacement les ressources d’un ordinateur (disques, mémoires, terminaux,
cartes, …) en le dispensant de la maîtrise de leurs modes et spécificités de
fonctionnement. Il assure les fonctions principales suivantes :
• la gestion des dialogues avec l’utilisateur,
• la gestion des opérations d'entrées/sorties liées à l’utilisation des
périphériques,
• la gestion des ressources de l'ordinateur: disques, écran, clavier, …..
• la gestion du système de fichiers,
• la gestion de l'exécution des programmes: gestion des espaces mémoire,
cadencement et synchronisation de l'exécution, gestion des interruptions
…..
Un SE peut ou non avoir la capacité de prendre en charge l’exécution
simultanée (en apparence) de plusieurs applications (SE mono ou multi-tâches)
et la connexion de plusieurs utilisateurs (SE mono ou multi-utilisateurs).
L’accès aux services d’un SE nécessite la mise à disposition d’une interface qui
offre à l’utilisateur un dialogue graphique (interface graphique) et/ou
alphanumérique (commandes).
Le système d’exploitation UNIX est né à la fin des années 60 (1969 : Ken
Thompson, Dennis Ritchie) en milieu universitaire et a fait l’objet de
différentes versions jusqu’à atteindre une version de référence en 1993. Il est
principalement caractérisé par :
• une grande portabilité : car écrit en majeure partie en un langage standard
(langage C),
• un système de fichiers unique : qui rend transparente la multiplicité et la
diversité des supports physiques,
• une banalisation des opérations d’entrée/sortie et une standardisation des
accès aux ressources considérées comme des fichiers,
• des interfaces de dialogue « shell » : qui constituent des environnements
simples et puissants pour des traitements à un haut niveau (manipulation du
contenu des fichiers, redirections, …),
• un parallélisme (multi-tâches) permettant plusieurs modes de
communication entre tâches (signaux, tubes, …)
• de multiples outils de communications inter systèmes (socket, uucp, …)
• un large éventail de primitives : permettant des développements à de bas
niveaux,

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 2

La structure du SE UNIX peut être représentée en couches fonctionnelles:

Utilisateur Utilisateur Utilisateur

Shell

Programmes
système

Noyau
(Kernel)
Matériel

Applications

Chaque couche est conçue de manière à être utilisée sans connaître les couches
inférieures. Ainsi, l’utilisateur peut accéder aux ressources par le biais dialogue
simple offert par la couche la plus évoluée (Shell et applications utilisateur). Au
besoin, il peut aussi développer des programmes utilisant les couches de plus
bas niveau.
Le noyau, qui assure l’interfaçage des applications avec les ressources
matérielles prend en charge la gestion des processus (tâches) et du système de
fichiers. Les différentes fonctions qu’il assure sont accessibles à travers des
appels système (primitives).

Applications utilisateur - Shell


Niveau utilisateur

Programmes système Bibliothèques

Appels système

Sous-système de gestion Sous-système de


de fichiers gestion des processus
Communication
interprocessus
Cache Scheduler
Gestion mémoire
Noyau
Caractère Bloc
Contrôleurs

Contrôle matériel

Matériel

Comme le montre cette structure du noyau, les bibliothèques sont considérées


comme des éléments externes (niveau applications système), ce qui assure une
grande portabilité des applications développées.

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 3
Le système de fichiers
Sous unix, toute source ou destination de données est assimilée à un fichier.
Cette standardisation de la notion de fichier permet d’uniformiser au niveau
utilisateur la manipulation des flux de données : imprimer sur un périphérique
de type imprimante revient globalement à écrire dans un fichier associé à ce
périphérique.
On distingue différents types de fichiers:
• Les fichiers de données
• Les fichiers commandes : fichiers binaires exécutables ou fichiers de
commandes interprétables par un shell
• Les fichiers périphériques : fichiers spéciaux permattant l’accès aux
périphériques (terminaux, disques, imprimantes, …)
• Les répertoires : fichiers particuliers contenant d’autres fichiers
• Le fichier poubelle : nommé /dev/null, il a la particularité d’avoir une taille
toujours nulle.
L’une des particularités du SE unix réside dans l’unicité de la structure
arborescente qui permet à l’utilisateur d’accéder aux fichiers. Cette structure,
désignée par « système de fichiers » (file system), traduit l’organisation logique
du stockage des données indépendamment de l’organisation physique des
différents supports de stockage.
La racine du système de fichier est nommée « / ».

 f1
  grp1 

f2

  f…
 home
 grp2 r1{f1f2
/
   f3f4
 …
 null
 dev 


usr

L’unicité de l’arborescence offre à tous les utilisateurs du SE une même image


de toutes les données accessibles au SE même si leur stockage nécessite la
mise en œuvre de différents supports : par exemple, tout le contenu du fichier
(répertoire) home peut être stocké sur un premier disque D1 alors que le reste
des fichiers est stocké sur un deuxième disque D2. Le D1 peut être directement
connecté à la machine ou non (accès distant ou par réseau local) sans que
l’image du système de fichier ne soit changée.
Chemin d’accès
Le fichier f3 est désigné de manière unique par:
/home/grp2/f3
Les deux fichiers f1 sont différents et ne contiennent certainement pas la même
chose. Ces deux fichiers sont respectivement désignés par :
/home/grp1/f1
/home/grp2/r1/f1
Les chemins qui désignent les fichiers à partir de la racine sont appelés
chemins absolus.

Les chemins qui désignent les fichiers à partir d'un point de l'arborescence sont
appelés chemins relatifs. Les chemins relatifs sont plus concis, mais nécessitent
la connaissance du répertoire courant (current directory).
Abréviations
. (point) Le répertoire courant (current directory)
.. (2 points) Le répertoire contenant le répertoire courant
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 4
? n'importe quel caractère
[abn] l'un des caractères a b ou n ([ ] : brackets)
[c-l] une lettre de c à l inclus (dash within brackets)
* n'importe quelle chaîne de caractères
{file,toto,ex} l'une des chaînes file toto ou ex ({ }: braces)
Ces abréviations permettent d'abréger les chemins et de désigner en une seule
fois plusieurs fichiers dont les noms ont des caractéristiques communes; ou de
désigner un seul fichier sans écrire totalement son nom lorsque aucune
ambiguïté n'est possible.

Propriétés des fichiers


Chaque fichier possède un certain nombre de propriétés:
1) il a un propriétaire (généralement l'utilisateur qui l'a créé)
2) il a des autorisations d'accès
Les différentes autorisations sont:
r autorisation de lecture
w autorisation d'écriture
x autorisation d'éxécution
Ces autorisations peuvent être données séparément à
u au propriétaire (user)
g au groupe de l'utilisateur (group)
o à tous (others)
Il existe des commandes pour vérifier les autorisations (voir plus loin ls -l) et
pour les changer (voir plus loin chmod). Le réglage de ces autorisations est
important: on choisit ainsi ce que les autres ont le droit de faire sur nos fichiers.

Dialogue Unix-utilisateur
L’accès d’un utilisateur au système d’exploitation s’effectue dans le cadre
d’une « session de travail » définie par les étapes suivantes :
• identification de l’utilisateur (par un nom de connexion et un mot de passe),
• exécution de tâches d’initialisation (profile, .profile,.cshrc, …),
• dialogue shell-utilisateur et/ou interface graphique-utilisateur,
• fin de la session.
Malgré la diversité de plus en plus croissante des interface graphiques qui
accompagnent le SE unix, le shell reste la seule interface de dialogue qui
permet à l’utilisateur d’accéder directement aux commandes standards unix et
de profiter ainsi de la protabilité et de la normalisation de ce système.
Shell est un programme interpréteur qui analyse une à une les lignes de
commandes entrées par l’utilisateur et assure l’exécution des tâches
correspondantes.
L’utilisation du shell nécessite l’accès à un terminal alphanumérique matérialisé
par :
• un terminal physique : ensemble clavier-écran connecté à un port de
communication de la machine,
• un pseudo-terminal : fenêtre d’une interface graphique ou de connexion à
distance.
Dans les deux cas un terminal assure d’une part une fonction « fichier » en
permettant de lire (clavier) et d’écrire (écran ou fenêtre) et d’autre part une
fonction « contrôle » en permettant la transmission de signaux aux processus
(^C pour l’interrompre l’exécution par exemple).

Syntaxe générale d’une


ligne de commande
Les commandes (ou lignes de commandes) sont soumises au shell qui constitue
l’interface entre l’utilisateur et le SE. Chaque commande est une chaîne de
caractères qui comprendre quatre parties:

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 5
-la désignation de la commande
-les options
-les arguments de la commande
-les redirections

cmd options arguments redirection

Les trois dernières parties ne sont pas toujours obligatoires.


Désignation

Une commande peut correspondre à une action interne du shell (commande


shell) ou à une demande d’exécution d’un fichier exécutable. Dans le premier
cas, la désignation de la commande correspond directement au nom de la
commande alors que dans le deuxième cas elle correspond à la désignation du
fichier par son nom ou par son chemin (absolu ou relatif).
Si un fichier exécutable est désigné simplement par son nom, le shell utilise une
liste prédéfinie de chemins pour le localiser.
Options
Les options sont des indications spécifiques à la commande utilisée qui
modifient son comportement. Elles commencent généralement par un signe -
suivi d'une (ou plusieurs) lettre.
Exemples:

HOST% ls -l
l est une option de la commande ls.

Arguments
Les commandes peuvent nécessiter un ou plusieurs arguments pour préciser sur
quoi la commande va agir.

Commande à un seul argument:


HOST% ls -l /home
va donner la liste des fichiers contenus dans le répertoire /home.

Les redirections
Au cours de son exécution, une commande peut manipuler des flux de données
entrants ou sortants : en général lecture de données à partir du clavier et
écriture de résultats ou de messages d’erreur sur l’écran du terminal.
Pour exécuter une commande, le shell demande au SE de créer un processus
qui exécutera le texte exécutable de cette commande. Parmi les actions que
comporte la création de ce processus, le SE définit trois descripteurs de fichiers
nommés fichiers standard :
- le fichier standard d’entrée (stdin): descripteur 0, ouvert en lecture seule
- le fichier standard de sortie (stdout): descripteur 1, ouvert en écriture différée
- le fichier standard de sortie d’erreur (stderr): descripteur 2, ouvert en écriture
non différée

Cette disposition permet d’étendre la notion de fichiers à la manipulation des


flux habituels de données que nécessite l’exécution d’une commande : la
commande lit à partir d’un fichier et écrit dans deux fichiers.
Il devient dont possible de ne plus restreindre l’origine des données saisies au
clavier et la destination des résultats ou des messages d’erreur à l’écran. Tout
fichier peut être ainsi considéré comme origine ou destination des données
saisies ou renvoyées par la commande, il suffit pour cela d’associer le
descripteur de l’E/S concernée à ce fichier. C’est le rôle des redirections.
La syntaxe générale d’une redirection est :
<
[des1] > fic ou des2
>>

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 6
Par défaut, des1=0 pour une redirection en entrée et des1=1 pour une
redirection en sortie.
Il faut noter que les redirections ne concernent nullement les données que la
commande lit ou écrit dans des fichiers autres que ceux associés au clavier et à
l’écran.

rediriger de stdout > fic ou >>fic

> fic ou 1 > fic Le fichier fic est créé s'il n'existait pas ou écrasé s'il existait déjà.

>>fic ou 1 >> fic Le fichier fic est créé s'il n'existe pas, mais s'il existe déjà, les sorties produites
par la commande seront ajoutées à la fin des données qu’il contient.

rediriger le stdin

< fic Les données nécessaires à la commande sont lues dans fic au lieu d'être lues au
clavier.

rediriger le stderr

2> fic ou 2>> fic Fonctionne comme la redirection du stdout. Les messages d'erreur sont écrits
ou ajoutés au fichier fic.

les pipelines

commande1 | commande2
Le stdout de commande1 est redirigé vers le stdin de commande2 .

Certaines commandes peuvent à la fois considérer comme source des données à


traiter un fichier donné en argument ou le stdin par défaut et comme destination
des résultats un fichier donné en argument ou le stdout par défaut. Ces
commandes sont appelées des filtres (filter).

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 7

les accents graves ` (backquotes)


Toute commande incluse entre deux "`" est d'abord exécutée et tout ce qu’elle
devait écrire sur son stdout lui est substitué.

Exemple:
Supposons qu'un fichier nommé listefic contienne une liste de fichiers:
HOST% cat listfic
/home/grp1/f1 /home/grp2/r1/f2
HOST%
Supposons qu'on veuille effacer les fichiers dont la liste est dans listfic :

HOST% rm `cat listfic`


HOST%

la commande cat listfic est d'abord évaluée et est remplacée par son
résultat avant l’exécution de rm.
La commande est donc équivalente à
rm /home/grp1/f1 /home/grp2/r1/f2

Exemple de commandes

man nom_de_commande Cette commande écrit sur la sortie standard une description complète de la
commande (son effet, sa syntaxe, la liste exhaustive de ses options).

man -k mot_clé Cette commande fournit une liste des commandes en rapport avec le mot clé
désigné. Elle est utile lorsqu'on veut de l'aide sur une commande dont on ne
connaît pas le nom.

pwd (print working directory)


Cette commande renvoie le chemin absolu de votre répertoire courant.

cd chemin_de_répertoire (change directory)

HOST% cd /dev (chemin absolu)


HOST% pwd
/dev
HOST% cd ..
HOST% pwd
/
HOST% cd (retour au répertoire HOME)

Les variables
d'environnement
Lorsque l'on exécute une commande (un programme) le shell et le système
d'exploitation tiennent compte de certaines caractéristiques qui définissent la
configuration du terminal, les propriétés de l'utilisateur, etc ...; l'ensemble de
ces caractéristiques définit l’"environnement".
La définition d'un environnement est généralement assurée par l'affectation de
certaines valeurs à des variables dites variables d'environnement. Ces variables
sont en fait définies comme des variables locales du shell, puis leur validité est
étendue à toutes les commandes exécutées à partir de ce shell en utilisant la
commande export.

env Les variables d’environnement et leur valeurs actuelles sont affichées par la
commande env.
Exemple:

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 8
Exemples de variables
d’environnement
Lorsqu'on commence une session un certain nombre de variables
d'environnement sont déjà définies. Ces variables sont prédéfinies dans les
fichiers d’initialisation du shell (.profile par exemple)

PATH La variable PATH contient une liste de répertoires dans lesquels Unix recherche
les commandes que vous avez désigné sans préciser leur chemin absolu.
Chaque chemin est séparé du suivant par un ":".

Exemple:
La variable PATH pourrait contenir:
/usr/bin:/usr/5bin:.
Si la commande que vous avez tapée n'est pas désignée par son chemin absolu,
Unix la recherche d'abord dans le répertoire /usr/bin, puis dans le répertoire
/usr/5bin, et enfin dans votre répertoire courant (le point final désigne
votre répertoire courant).

HOME Cette variable contient le chemin absolu de votre répertoire personnel (home
directory). En principe vous n'avez pas à la modifier.

Exemple:
cd $HOME est équivalent à cd .
Cette variable est surtout utilisée dans les scripts.

TERM La variable d'environnement TERM définit le type de terminal utilisé.

HOST% TERM=vt100
HOST% export TERM

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 9

2. Manipulation des fichiers

Lister un répertoire
ls Donne la liste des fichiers du répertoire courant
HOST% cd /home/grp2/r1
HOST% ls
f1 f2
HOST%

Les listes fournies par ls sont par ordre alphabétique par défaut

ls répertoire Donne la liste des fichiers du répertoire désigné


HOST% ls /home/grp2/r1
f1 f2
HOST%

ls fichier Donne la liste des fichiers dont le nom correspond à fichier


HOST% ls /home/grp2/r1/f*
f1 f2
HOST%

ls -l fichier ou rep Donne des renseignements plus détaillés sur chaque fichier
HOST% ls -l /home/grp2/r1
-rwxr--r-- 0 grp2 855 Déc 10 10:00 f1
-rwxr--r-- 0 grp2 351 Déc 12 12:00 f2
HOST%

La première lettre (d ou -) de chaque ligne indique si le fichier concerné est un


répertoire, les neuf lettres suivantes précisent les autorisations d'accès:
utilisateur groupe autres
d r w x r w x r w x
- - - - - - - - - -

Ces autorisations peuvent être changées avec la commande chmod.

ls -a fichier_ou_rep Cette commande montre les fichiers normalement cachés (ceux dont le nom
commence par ".")

Créer un répertoire
mkdir nom_du_répertoire Le nom du répertoire peut être un chemin absolu ou relatif (par rapport au
répertoire courant). Cette commande nécessite l’autorisation en écriture pour le
répertoire père.

Détruire un fichier
rm fic1 fic2 … Cette commande nécessite les autorisations d'écriture sur les fichiers à détruire.

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 10
Détruire un répertoire
rmdir nom_du_répertoire Cette commande nécessite l’autorisation d'écriture sur le répertoire à détruire.

Copier des fichiers


cp fic1 fic2 Le fichier fic1 est le fichier source. Il doit nécessairement exister.
Le fichier fic2 est le fichier destination. S'il n'existe pas, il est créé; s'il existait
déjà, il est écrasé par le contenu de fic1.

cp -r rep1 rep2 Tous les fichiers de rep1 (ainsi que tous les sous-répertoires et leurs contenus)
seront copiés avec le même nom et la même structure dans le répertoire rep2.

Renommer ou déplacer
un fichier
mv fic1 fic2 Le fichier fic1 sera renommé fic2.
HOST% cd /home/grp2/r1
HOST% mv f1 f3

NOTE La commande mv sert aussi à déplacer des fichiers: en effet fic1 et fic2
peuvent être des chemins complets relatifs ou absolus.

Changer les
autorisations d’accès
u r
g w
o + x
chmod chmod ug - rw fichier ou repertoire
uo rx
go wx
ugo rwx
Le premier groupe de lettres précise la population concernée:
u propriétaire (user)
g groupe du propriétaire (group)
o les autres (others)
+ signifie qu'on veut accorder les droits qui suivent
- signifie qu'on veut retirer les droits qui suivent
Le second groupe de lettres désigne les droits modifiés
r droit de lecture (read)
w droit d'écriture (write)
x droit d'éxécution (execute)
Seul le propriétaire d’un fichier peut en changer les autorisations.

Autorisations d’accès
par défaut
Lors de la création d’un fichier, des autorisations d’accès par défaut lui sont
affectées. Elles peuvent être affichées ou modifiées par le biais de la commande
umask.

umask masque Le masque est soustrait (OU exclusif) à 777 pour les répertoires et à 666 pour
les fichiers normaux.

HOST% umask 022


HOST%

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 11
Dans cet exemple, les autorisations par défaut sont fixées pour les répertoires à
rwxr-xr-x et à rw-r--r-- pour les fichiers normaux.

Rechercher un fichier
find répertoire options Cette commande recherche dans répertoire les fichiers correspondant aux
conditions précisées dans les options.
Les options usuelles sont:

find -name fic fic désigne un ou plusieurs fichiers

find -user uid uid est soit un nom d'utilisateur soit son numéro

find -print Le résultat de la recherche sera écrit sur la sortie standard.

Scinder un chemin
basename fichier Ne garde que la dernière partie de la chaîne fichier (c'est à dire le nom du
fichier).

dirname fichier Ne garde que la première partie de la chaîne fichier (c'est à dire la suite des
répertoires qui y aboutissent).

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 12

3. Manipulation du contenu
des fichiers

Ecrire sur la sortie


standard
echo chaîne Commande shell qui écrit chaîne sur la sortie standard.

banner chaîne Ecrit la chaîne en gros caractères sur la sortie standard.

clear Efface l'écran.

Afficher le contenu des


fichiers
more fic1 fic2 … Ecrit sur la sortie standard (en général l'écran) le contenu des fichiers désignés.
Dans le cas où le stdout est l’écran le contenu est affiché page par page.
Pour voir l'écran suivant: espace
Pour avancer d'une ligne: Return
Pour quitter more: q

file fic1 fic2 … Renvoie une description du contenu des fichiers.

head -n fic Renvoie les n premières lignes du fichier fic.

tail -n fic Renvoie les n dernières lignes du fichier fic.

od options fichier Renvoie le contenu du fichier sous forme octale, hexadécimale, décimale ou
ascii suivant les options demandées.

Recherche dans un
fichier
grep chaine fichier La commande grep est un filtre qui recherche dans le fichier toutes les
occurrences de chaîne . Elle fournit sur le fichier standard de sortie toutes les
lignes du fichier qui contiennent chaîne. Si la chaîne recherchée contient des
espaces ou des caractères spéciaux qui risquent d'être interprétés, il faut
l'enfermer dans des "".

Cette commande possède un grand nombre d'options très utiles permettant


d'affiner la recherche.

Contenus tabulés
Dans beaucoup de commandes les fichiers de caractères peuvent être traités
comme des tableaux. Un tableau est un ensemble de lignes organisées en
colonnes. Chaque ligne a évidemment le même nombre de colonnes.

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 13
Normalement, les séparateurs de colonne sont des tab et les séparateurs de
ligne sont lf ou Return ou les deux.
Exemple:
donnée tab donnée tab donnée Return
donnée tab donnée tab donnée Return

expand -n fichier Permet de remplacer les caractères tab de fichier par n espaces .

unexpand fichier Remplace les espaces ou les chaînes d'espaces par un caractère tab .

Concaténer des fichiers


cat fic1 fic2 … Cette commande filtre renvoie les contenus concaténés des fichiers dans l'ordre
des arguments sur le fichier standard de sortie.

paste fic1 fic2 Concaténation de tableaux: les colonnes de fic2 sont ajoutées à la droite des
colonnes de fic 1. Le résultat est écrit sur le stdout.

Extraction
cut -fn1,n2,n3 -dsépa fic Cette commande filtre permet d'extraire une partie des informations dans un
fichier organisé en tableau selon un séparateur spécifié.
Exemple:
Le fichier /etc/passwd est organisé en tableau de séparateur « : »:
nom:password:uid:gid:renseignements:homedir:shell
La ligne de l'utilisateur grp2 est supposée:
grp2:x:308:30:Mohamed 1A2004:/home/grp2:/bin/bash

La commande:
cut -f1,5 -d: /etc/passwd
va écrire sur le stdout les lignes ne comprenant que les champs nom (1er champ)
et renseignements (5ème champ).
La ligne relative à grp2 sera:
grp2:Mohamed 1A2004

La commande cut supporte beaucoup d'options précisées dans le manuel


officiel.

Tri
sort options fic Trie les lignes du fichier fic. La commande comporte de nombreuses options
pour définir le tri à faire.

Les éditeurs de texte


Un éditeur de texte est un programme permettant de créer ou de modifier un
fichier contenant du texte (textes de programmes fortran, pascal, fichiers de
données etc…). Sous Unix on trouve toujours au moins deux éditeurs de texte:
ed et vi. Les interfaces graphiques actuellement fournies offrent des éditeurs
plus conviviaux qui dispensent de l’usage des éditeurs standards.

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 14

4. Gestion des processus

Lancer une commande


en tâche de fond
En temps normal, une commande lancée à partir d’un shell va monopoliser le
terminal tant que son exécution n’est pas terminée : elle s’exécute au premier
plan (foreground).

commande & Une commande peut être lancée en tâche de fond (background) en ajoutant un
"&" à la fin de la ligne de commande. Le terminal peut alors servir à lancer
d’autres commandes.

Processus en cours
ps La commande ps écrit sur le stdout des informations sur tout ou partie des
processus en cours selon les options indiquées. Les informations fournies
peuvent être réduites ou détaillées. Elles incluent généralement :
PID: Numéro du processus
TT: identification du terminal qui a lancé le processus
STAT: Etat du processus
TIME : temps CPU consommé par le processus
COMMAND : la commande qui a donné lieu au processus

Signaux
L’un des modes de communication entre processus offert par le SE unix est
basé sur les signaux : un processus P1 peut envoyer (dans la limite de certaines
restrictions liées aux propriétaires des processus) à un autre processus P2 un
signal n qui habituellement a une signification particulière pour le processus
récepteur. Lorsque le signal n’est pas ignoré ou intercepté par le processus
récepteur, il provoque l’exécution d’une activité prédéfinie : arrêt du processus,
interruption, ….

kill -n PID La commande kill permet au shell à partir duquel elle est exécutée d’envoyer le
signal n au processus d’identifiant PID.

La liste des signaux prédéfinis est donnée par l’option –l : kill -l

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 15

5.
Les shell scripts

Qu'est-ce qu'un script ?


Il arrive souvent qu'on ait à faire une suite de commandes pour réaliser une
opération complète, et qu'on ait souvent besoin de refaire cette suite de
commandes.
On peut alors penser mettre ces commandes dans un fichier et les exécuter
ensuite. Un tel fichier de commandes est un script.

Exemple:
Supposons que l'utilisateur mohamed ait créé dans son répertoire un répertoire
nommé /user/mohamed/tmp, dans lequel il a l'habitude de mettre des
fichiers temporaires. Une bonne habitude serait de vider le contenu de ce
répertoire avant de quitter sa session pour libérer de l'espace disque.
Il va donc créer (avec vi par exemple) un fichier texte $HOME/nettoie
dans lequel il va mettre les commandes suivantes:

cd $HOME/tmp
rm `ls`
echo "Nettoyage terminé"

Le fichier nettoie est un fichier texte qui contient des commandes.


Ce fichier n'est pas un fichier exécutable. Pour le rendre « exécutable » (au sens
d’un shell) il faut lui donner l’autorisation d'éxécution:

HOST% chmod u+x $HOME/nettoie


HOST%

Avec son droit d'éxécution, le fichier nettoie est devenu une nouvelle
commande!
Avant de quitter sa session, il suffira à mohamed de lancer la commande
nettoie.

HOST% nettoie
nettoyage terminé
HOST%

Bien que très simple, cet exemple permet d'imaginer des scripts réalisant des
opérations plus complexes. On verra dans la suite que les scripts, comme toute
commande Unix peuvent avoir des options, des arguments et peuvent exécuter
certaines opérations sous condition.
Par exemple, on pourrait améliorer le script précédent en vérifiant d'abord que
le répertoire /user/mohamed/tmp existe et est bien un répertoire. Si tel
n'était pas le cas, il enverrait un message d'erreur (/user/mohamed/tmp
n'existe pas par exemple) et ne ferait rien d'autre.
La possibilité d'exécutions conditionnelles et de boucles permet de regarder les
scripts comme de véritables programmes dont les instructions sont les
commandes d'Unix.

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 16
Les variables
Dans un script on peut définir des variables. Ces variables ne peuvent
contenir que des chaînes alphanumériques.
Un nom de variable doit commencer par une lettre et peut être constitué de
lettres, de chiffres et "_" (underscore).
Exemples: var_1 v2 ma_variable

Affectation d'une variable Sous sh,bash ou ksh, pour affecter une chaine alphanumérique valeur à une
variable var il suffit d'écrire:
var=valeur
Si la chaine valeur contient des caractères spéciaux(1) il faut l'enfermer entre
deux """ (guillemets doubles).
Exemples:
question="etre ou ne pas etre"
var2=12 (ce n'est pas une valeur numérique!!
il s'agit du caractère "1" suivi du caractère "2")
var3= (affectation d'une chaine vide )
var4="cat fic1 fic2 > fic3"
Substitution d'une variable Le contenu de la variable var est obtenu par $var.
Exemple:
Si vous exécutez les lignes suivantes:
question="etre ou ne pas etre"
echo $question
vous verrez s'afficher à l'écran:
etre ou ne pas etre
Par contre
echo question
donnera
question
Portée des variables Une variable définie dans un script n'est reconnue qu'à l'intérieur du script. Pour
la rendre accessible à tous les niveaux inférieurs il faut utiliser la commande
export.

export var Cette commande rend la variable var connue à tous les niveaux inférieurs.

Les variables
prédéfinies
Il existe des variables prédéfinies dont les nom sont basés sur des caractères
particuliers (? # $ ! …)qui ont une signification
particulière.

? $? donne l'état de retour de la dernière commande exécutée.


L'état de retour est un entier retourné par toute commande Unix (y compris les
scripts).
Sa valeur diffère suivant les commandes et donne une indication sur le
déroulement de son exécution.
En général un état de retour égal à 0 indique que la commande s'est bien
passée(2).

Exemple:
HOST% grep "mohamed ali" administrateurs
… (résultat)
HOST% echo $?
On verra s'afficher
0 si la chaine "mohamed ali" a été trouvée
1 si la chaine "mohamed ali" n'a pas été trouvée
2 s'il y a eu une erreur(3)

1 Caractères spéciaux: " ' & $. , ; : ? * | ^ ( ) { } [ ] \ > < # + espace tab


2 Consulter les références pour savoir les états renvoyés par les différentes commandes.
3 Par exemple si le fichier administrateurs n'existe pas ou est inaccessible.

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 17
# $# donne le nombre (1) d'arguments envoyés au script .

0 1 2 3 … $0 donne le nom de base du script


$1 donne le premier argument envoyé au script
$2 donne le deuxième argument envoyé au script
etc…

$ $$ donne le numéro du processus (PID) du script.

! $! donne le PID du dernier processus exécuté en tâche de fond.

NOTE Les variables d'environnement utilisateur sont aussi reconnues par le script
(voir plus haut: les variables d'environnement).

Commandes
Toutes les commandes Unix sont utilisables dans un script.

liste_de_commandes On note liste_de_commandes une suite de commandes séparées par un";" ou un


Return .

NOTE L'état de retour d'une liste_de_commandes est celui de la dernière commande


de la liste.

Déroulement de
l'exécution du script
Normalement les commandes d'un script sont exécutées en séquence dans
l'ordre où elles sont écrites. Cependant il est possible d'avoir des exécutions
conditionnelles et des boucles.

Boucle for for nom in nom1 nom2 nom3 … nomn


do
liste_de_commandes
done
La liste de commandes liste_de_commandes est exécutée n fois en affectant à
chaque fois à la variable nom une nouvelle valeur prise dans la liste nom1 nom2
nom3 … nomn.
En général, une ou plusieurs commandes de liste_de_commandes utilise la
valeur de nom .

Exemple:
cd /user/mohamed/textes
for fic in t1 t2
do
chmod ugo+x $fic
done

Sélection case case $variable in


val1) liste_de_commandes_1;;
val2) liste_de_commandes_2;;

valn) liste_de_commandes_n;;
*) liste_de_commandes_x;;
esac

Si variable a l'une des valeurs val1 …valn , la liste de commandes


correspondante est exécutée.
Sinon liste_de_commandes_xest exécutée.

1 Sous forme de chaine de caractères

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 18

Exemple:
case $# in
0) echo "Il n'y a pas d'argument";;
1) echo "Il y a un argument";;
2) echo "Il y a deux arguments";;
*) echo "Il y a plus de deux arguments";;
esac

exécution conditionnelle if if liste_de_commandes_1


then
liste_de_commandes_2
else
liste_de_commandes_3
fi
liste_de_commandes_1 est d'abord exécutée.
Si son état de retour est 0, liste_de_commandes_2 est exécutée, sinon
liste_de_commandes_3 est exécutée.

Exemple:
if mkdir monrep
then
echo "le répertoire monrep est créé"
else
echo "la création de monrep a échoué"
fi

test options commande Suivant les options choisies, la commande test sert à
tester l'état des fichiers
comparer des chaînes
comparer des entiers
Elle renvoie la valeur 0 pour "vrai" et 1 pour "faux" (sauf pour l'option -l)
Quelques options utiles:

test -f fic Renvoie 0 si le fichier fic existe et n'est pas un répertoire.

test chaine1 = chaine2 Renvoie 0 si les chaînes sont identiques.

test chaine1 != chaine2 Renvoie 0 si les chaînes sont différentes.

eq =
ne ≠
gt >
test n1 - ge n2 Renvoie 0 si l'entier n1 est ≥ à l'entier n2
lt <
le ≤

[ options commande ] Est équivalent à test options commande

NOTE La commande test est très utilisée dans les exécutions conditionnelles if.

Exemple:
cd /user/mohamed/textes
if test -f t1 #équivalent à if [ -f t1 ]
then
echo "le fichier t1 existe"
fi

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 19
multi-test if if liste_de_commandes_1
then
liste_de_commandes_01

elif liste_de_commandes_2
then
liste_de_commandes_02

elif liste_de_commandes_n
then
liste_de_commandes_0n
else
liste_de_commandes_x
fi

Exemple:
if [ $# = "0" ]
then
echo "Il n'y a pas d'argument"
elif [ $# = "1" ]
then
echo "Il y a un argument"
elif [ $# = "2" ]
then
echo "Il y a deux arguments"
else
echo "Il y a plus de deux arguments"
fi

Boucle while while liste_de_commandes_1


do
liste_de_commandes_2
done

Tant que l'exécution de liste_de_commandes_1 a un état de retour d'exécution


0, liste_de_commandes_2 est exécutée.

Attention Pour éviter le risque de boucle infinie il faut impérativement que le


comportement de l'exécution de liste_de_commandes_1 évolue!!

Boucle until until liste_de_commandes_1


do
liste_de_commandes_2
done
liste_de_commandes_2 est exécutée jusqu'à ce que l'exécution de
liste_de_commandes_1 ait un état de retour 0.

Attention Pour éviter le risque de boucle infinie il faut impérativement que le


comportement de l'exécution de liste_de_commandes_1 évolue!!

Quelques commandes
utiles dans les scripts
expr expression Evalue expression. Cette commande comprend de nombreuses options et a une
syntaxe possible de expression très riche. Consulter la documentation officielle.

getopts Permet de connaître les options qui ont été données lors du lancement de
l'éxécution du script. Le script peut ainsi tenir compte de ces options.

read var Permet d'arrêter le déroulement du script dans l'attente d'une donnée au clavier.
Le déroulement du script reprend dès que l'utilisateur a tapé un Return .
Exemple:

avril 2007
Initiation à l’utilisation du système d’exploitation Unix 20
echo -n "Quel est votre nom:"
read lenom
echo "Votre nom est: "$lenom
La variable lenom contient la chaîne de caractères tapée par l'utilisateur.

exit code_retour Lorsqu'un script exécute sa dernière ligne, il exécute automatiquement un


exit 0.
Le code retour du script est donc un 0.
Cependant, il arrive qu'un script ait besoin de se terminer ailleurs qu'à sa
dernière ligne. Dans ce cas, il faut employer la commande exit.
Si on omet code_retour exit est équivalent à exit 0.
Si la fin d'éxécution que l'on a programmé est due à la détection d'une erreur,
l'usage est de mettre un exit 1.
Exemple:
echo -n "Quel est votre nom:"
read lenom
if [ $lenom ]
then
echo "Vous n\'avez pas repondu"
exit 1
fi
echo "Votre nom est: "$lenom

avril 2007

Vous aimerez peut-être aussi