Vous êtes sur la page 1sur 65

Introduction au système d’exploitation

Avant propos
Ce cours est utilisé au département informatique de Institut Supérieur des Sciences
Appliquées et de Technologie de Mateur avec les étudiants de première année. Il est aussi
conçu pour être utilisé par toute personne désireuse de s’initier à l’utilisation du système
UNIX.

Pré requis : afin de suivre ce cours sans difficultés, il est conseillé d’être familier avec
l’utilisation de base d’un système d’exploitation (DOS, Windows, ..) Et de posséder quelques
notions d’algorithmique.

Les lecteurs de ce cours sont invités à participer à sa mise à jour : n’hésitez pas à envoyer vos
suggestions et remarques à l’auteur :

m_ounissi@yahoo.fr

Licence
Copyright ©2003-2023 par Ounissi Mounir .

Ounissi Mounir 1
Chapitre 1 : Introduction aux systèmes d’exploitation

I) Introduction
Pour comprendre certains fonctions d’un système d’exploitation il est indispensable un minimum de
connaissance sur les architectures et le fonctionnement des ordinateurs.

I - 1 Architecture des ordinateurs :


Un ordinateur est composé d’une mémoire centrale qui contient les programmes et des donnés, unité
centrale (UC) qui constitue le cœur de l’ordinateur. Elle se compose d’un certain nombre de registres
spécialisé, d’une unité arithmétique et logique (UAL) et d’une unité de commande, nécessaire au
découpage et à l’exécution des instructions chargées en mémoire centrale (figure. I.1)

La mémoire et les unités périphériques (terminaux, mémoires secondaires, …) qui réalisent l’échange
de données avec la mémoire centrale par le biais d’un bus de communication. L’UC est contrôlée par
les instructions qu’elle extrait de la mémoire. Les périphériques d’E/S quant à eux sont commandés
par l’UC, par l’intermédiaire des contrôleurs d’E/S


Processeur central Mémoire Unités
d’échange

Unité de commande

Read Only
Unité arithmétique Memory Périphérique
d’Entrée Sortie
(ROM)
Registres

Random Access
Memory

(RAM)

Figure I-1: architecture d’un ordinateur

Ounissi Mounir 2
On peut comparer le fonctionnement de l’UC à une succession de boucle, avec une
instruction a exécuté à la fin de chaque boucle. Le processus de base selon lequel sont
exécutées les instructions est immuable :

(1) les programmes et ses données sont d’abord chargés en mémoire


(2) Une instruction est extraite à l’emplacement de mémoire spécifié par le registre
spécial appelé compteur de programme. Toutes les instructions devant être exécutées
sont extraites de la mémoire principale.
(3) L’instruction est placée dans un registre spécial appelé le registre d’instruction.
(4) Le compteur de programmes est incrémenté de façon ce qu’il pointe vers la prochaine
instruction à exécuter.
(5) L’instruction est analysée et décodée par l’unité de commande. Cette action spécifiée
par les bits du code opération de l’instruction. L’architecture du processeur définit les
bits contenant le code opération. En fonction de l’opération à réaliser, la valeur d’un
ou plusieurs opérandes est extraite de la mémoire.

L’opération spécifiée dans le code opération est réalisée. Les catégories d’opérations
élémentaires sont :

 Le mouvement déplace une valeur d’un emplacement vers un autre.


 Le calcul : envoie une ou plusieurs valeurs d’opérandes à l’UAL et réalisent
un calcul.
 Le branchement conditionnel : si la condition de branchement est vérifiée,
réinitialise le compteur de programme pour qu’il pointe vers l’adresse de
branchement. Pour les branchements inconditionnels, la condition de
branchement est toujours vérifiée.
 L’appel de procédure : enregistre la valeur en cours du compteur de
programme. Réinitialise ensuite ce dernier pour qu’il pointe vers le début de la
procédure.
 Les entrées/sorties : transfère les informations relatives aux opérations d’entrée
et de sortie entre l’UC et un périphérique d’E/S.

C’est au système d’exploitation qui est donné l’ordre d’exécution d’un programme celui-ci
doit alors faire de sorte que l’ensemble des ressources de l’ordinateur coordonnent pour mener
à bien la tâche a réaliser par le programme.

Le système d’exploitation peut alors être défini comme étant un ensemble de programmes qui
doivent faire fonctionner l’ordinateur. De ce fait, il est tout ou en partie résident en mémoire
centrale et lui correspond du code binaire compréhensif par les circuits électroniques de
l’ordinateur.

I - 2 Définition d'un système d'exploitation


Un système d'exploitation est un ensemble de programmes chargé de faire l'interface entre l'utilisateur
et le matériel. C'est à dire que quand un utilisateur tape une commande au niveau d'un logiciel (ou
application), le logiciel interprète la commande, la transmet au système d'exploitation qui la transmet
au matériel dans un format compréhensible.

Un exemple vaut mieux qu'un grand discours, quand vous ouvrez un fichier dans votre traitement de
texte favori, vous avez appuyé sur l'icône qui va bien, votre traitement de texte interprète l'action

Ounissi Mounir 3
d'ouverture de fichier et transmet l'ordre au système d'exploitation, ce dernier va alors commander au
contrôleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent au
fichier en question. Normalement un logiciel ne devrait jamais " discuter " avec le matériel, le système
d'exploitation se place entre les deux pour transmettre et éventuellement rejeter des commandes
illicites.

Un environnement est dit fenêtré quand il y a possibilité de pouvoir faire apparaître plusieurs fenêtres,
il va de pair avec l'utilisation d'une souris, Windows est par exemple un exemple d'environnement
fenêtré. On parle aussi d'environnement graphique. A l'opposé on trouve aussi des environnements
textuels non graphiques, DOS en est un bel exemple .

Figure I -2 : Couches d’interaction entre l’usager et l’ordinateur

II ) Les fonctions principales

La conception d’un système d’exploitation implique la réalisation de plusieurs types de


fonctions, en particulier celles des services communs. La structuration de ces fonctions peut

Ounissi Mounir 4
mener à une description du système sous une forme monolithique, en couche ou mieux
encore en clients /serveur avec comme base un micro-noyau.

Les principales fonctions du système d’exploitation peuvent être classées hiérarchiquement :

II - 1 Fonctions utilitaires
Tout système d’exploitation comprend des programmes chargés de réaliser les travaux d’exploitation
standard de programmation (éditeur de texte, traducteur, éditeurs de liens, configurateur, …) de
gestion de fichiers (formatage de volumes, copies de volumes, et de fichiers, tris de fichiers,
conversion de supports, archivage de supports, …) de gestions de tâches d’administration du système
(gestion des mots de passe, gestion et contrôle des accès, installation de nouvelles applications ou
versions d’un logiciel, …) de gestion de tâches d’un bureau (outils de communication, outils de
bureautique tels qu’un traitement de texte, …), etc.

II - 2 Gestion du dialogue Homme/Machine


Une commande lancée par un utilisateur peut être formulée de diverses manières : un texte à saisir, un
choix dans un menu, un double clic sur une icône présentée dans une fenêtre d’applications, etc. ….
Pour être traitée par l’ordinateur, cette commande transite par un processeur (logiciel) spécialisée dans
l’interprétation des commandes. Son analyse par l’interprète peut correspondre soit à l’affichage d’un
message d’erreur, soit au lacement du programme correspondant. Lorsque le traitement définitif de la
commande est terminé, l’ordinateur est de nouveau prêt à recevoir un nouvel ordre (une autre
commande), c’est ce qui est souvent indiqué par un message précis du système, appelé souvent prompt
(ou invite) système.

II - 3 Gestion des données et des fichiers


Un fichier peut se définir comme un ensemble (une collection) de données de même nature codée et
mémorisée, pour les besoins de l’utilisateur, sur disque ou sur un autre support de sauvegarde. D’un
point de vue pratique, le fichier constitue le seul et unique moyen pour sauvegarder des informations
contenues dans la mémoire centrale de l’ordinateur et qui, autrement, seraient perdues lors de l’arrêt
de cet ordinateur. Selon la nature des informations contenues dans les fichiers, on distingue :

 Les fichiers programmes : Les informations qu’ils contiennent sont des ordres
utilisables par l’ordinateur : ces ordres sont exprimés dans un langage évolué ou dans
un langage symbolique (on parle dans ces cas de fichiers sources), ou encore dans le
langage de la machine (on parle dans ce cas de fichiers binaires).
 Les fichiers de données : ils contiennent des informations que l’ordinateur ne peut
utiliser directement, ces données sont exploitées, en général, par un fichier programme
associé. Les documents crées avec un traitement de textes illustrent ce cas : Ce sont
des données utilisées à travers le programme de traitement de textes.

Pour organiser les données le S E fournit les outils nécessaires pour stocker les données et pour
pouvoir les récupérer rapidement et facilement. Il fournit les outils pour pouvoir visualiser l'ensemble
des fichiers de manière simple. Ces fichiers se trouvent sur le disque dur, on nomme cela un système
de fichiers ou File System en anglais.

La gestion des fichiers est l’ensemble des actions relatives à leur existant (création duplication,
édition, impression, recherche, destruction, compression, etc. …

Ounissi Mounir 5
II - 4 Gestion des périphériques et des entrées/sorties physiques

La gestion des périphériques regroupe l’ensemble des actions relatives à leur emploi. ces fonctions
concernent, d’une part, le paramétrage(ou la configuration logicielle) de ces périphériques et, d’autre
part, leur utilisation proprement dite( envoi de signaux à destination des périphériques de sortie et
réception de ceux émis par les périphériques d’entrée, réalisation d’opération de transferts de données,
etc. …)

II - 5 Gestion de la mémoire

Il existe deux types de mémoire, la mémoire volatile et la mémoire statique, quand on éteint et rallume
l'ordinateur, toutes les données présentes dans la première ont disparu, et les données dans la seconde
sont toujours présentes. Concrètement la mémoire volatile se trouve dans la RAM, la mémoire statique
dans le disque dur. Dans le vocabulaire Unix, quand on parle de mémoire on sous-entend mémoire
volatile ou RAM, c'est la convention qui sera adoptée pour la suite du cours.

Tout programme qui s'exécute, ou processus, a besoin de mémoire pour y stocker notamment les
données qui manipulent. Malheureusement l'ordinateur dispose généralement d'une quantité de
mémoire limitée et non extensible. UNIX doit donc faire en sorte que la mémoire soit bien partagée
entre tous les processus, un processus ne doit pas s'accaparer toute la mémoire, sans quoi les autres
processus pourraient plus fonctionner. La mémoire est vue comme une ressource matérielle, UNIX
doit donc vérifier qu'aucun processus accède à la mémoire directement ou ne se réserve une zone de la
mémoire.

Ounissi Mounir 6
Chapitre 2 : Présentation du système UNIX.

I) Caractéristiques d’UNIX

UNIX est un système d’exploitation ayant les caractéristiques suivantes :


Multi-utilisateurs et Multitâches : cela signifie que plusieurs utilisateurs peuvent accéder
simultanément au système et exécuter un ou plusieurs programmes.
Temps partagé : c’est-à-dire que les ressources du processeur et du système sont réparties
entre les utilisateurs.
Système de fichiers hiérarchique : plusieurs systèmes de fichiers peuvent être rattachés au
système de fichiers principal ; chaque système de fichiers possède ses propres répertoires.
Entrées-Sorties intégrées au système de fichiers : les périphériques sont représentés par
des fichiers, ce qui rend le système indépendant du matériel et en assure la portabilité ; l’accès
aux périphériques est donc identique à l’accès aux fichiers ordinaires.
Gestion de la mémoire virtuelle : un mécanisme d’échange entre la RAM et le disque dur
permet de pallier un manque de RAM et optimise le système.
Processus réentrants : les processus exécutant le même programme utilisent une seule
copie de celui-ci en RAM.
Interface utilisateur interactive (Shell) : elle est constituée d’un programme séparé du
noyau permettant à l’utilisateur de choisir son environnement de travail. Elle intègre un
langage de commandes très sophistiqué (scripts.

I - 1 Historique et versions d’UNIX


A l’origine Unix a été développé en 1969 dans les laboratoires de la société Bell par les chercheurs
Ken Thompson et Denis Ritchie son utilisation reste limité à la recherche et à l’enseignement. Il s'agit
de UNICS ("UNIplexed information Computing System") qui est devenu Unix.

Les premières versions d’UNIX ne permettaient que le travail sur des terminaux
alphanumériques (il n’en existait pas d’autres à l’époque. Un grand pas en avant a été fait
avec le développement au MIT du système X Windows (X11). Ce système permet le
multifenêtrage sur écran graphique et le développement d’interfaces utilisateurs sophistiquées
et “conviviales” (inspirées du Macintosh). De nombreux environnements graphiques sont
maintenant disponibles : Motif, OpenLook (Sun), KDE, Gnome, etc.

Linux est une version libre d’UNIX (le code source du système est disponible gratuitement et
redistribuable) qui connaît actuellement un grand succès, tant chez les utilisateurs particuliers
(en tant qu’alternative à Windows) que sur pour les serveurs Internet/Intranet. Linux est
diffusé par différentes sociétés ou organisations, sous formes de distributions qui utilisent le
même noyau (ou presque) et organisent de diverses façons le système (packages, mises à jour,
etc.). Les distributions les plus répandues sont Red Hat, Suse, Caldera, Debian, Slackware et
Mandrake (à l’origine issue de Red Hat) et s’adressent chacune à différents types
d’utilisateurs.

1973 réécrire Unix sur le langage C. Des 1983 AT&T adopte une démarche pour la
commercialisation.

Ounissi Mounir 7
1989 AT&T propose Unix system V cette version est adoptée par plusieurs constructeurs (SUN, SGI,
simens… )
1995 bob Young et Mark Ewing créent Red hat software.
1996 red hat Linux 4.00 est nommé S.E bureau de l’année par infoword
1997 red hat Linux 5.00 est nommé S.E réseaux de l’année par infoword

I - 2 Architecture d’UNIX :

L'architecture globale d'UNIX est une architecture par couches (coquilles) successives comme
le montre la figure II- 1 Les utilisateurs communiquent avec la couche la plus évoluée celle
des applications. Le programmeur lui va pouvoir en fonction de ces besoins utiliser des
couches de plus en plus profondes. Chaque couche est construite pour pouvoir être utilisée
sans connaître les couches inférieures (ni leur fonctionnement, ni leur interface). Cette
hiérarchie d'encapsulation permet d'écrire des applications plus portables si elles sont écrites
dans les couches hautes. Pour des applications où le temps de calcul prime devant la
portabilité, les couches basses seront utilisées.

Figure II-1 : Architecture d’UNIX

II ) Notions de processus

Un processus est n’importe quel traitement, appelant un ou plusieurs programmes et


produisant un résultat. Une seule copie d’un programme en mémoire peut être utilisée par
plusieurs processus ( réentrance) ; lorsque des utilisateurs créent des processus qui font appel
aux même programmes, la distinction entre processus est faite par leur image, qui par
définition est l’ensemble des éléments nécessaires à l’exécution d’un processus à un instant
donné (état de la mémoire, des registres, des fichiers, d’un processus).

Un processus peut se dupliquer par le biais de l’appel système fork ; le processus créé est
alors appelé ‘fils’, et son image diffère du ‘père’ uniquement par son numéro d’identification
(PID).

Ounissi Mounir 8
Les processus dits ‘système’ sont enclenchés par le noyau. Chaque processus utilisateur
dialogue avec l’extérieur par le biais de trois fichiers particuliers qui sont ouverts en
permanence :

L’entrée standard (standard input, handle 0) ;


La sortie standard (standard output, handle 1) ;
La sortie d’erreur standard (standard error output, handle 2) ; par défaut, ces fichiers sont
liés au terminal, et représentent le clavier (input) et L’écran (output). Il est possible de
rediriger ces fichiers standards vers des fichiers différents en utilisant les sigles de direction
‘<’et ‘<<’ représentant l’entrée du processus, et ‘>’ et ‘>>’ représentant la sortie du processus
(voir Le Shell/Redi rection des entrées-sorties pour plus de détails) .Un processus peut
prendre six états différents :
en cours(d'exécution par le processeur) --> O(n the processeur)
Actif (prêt à l’exécution) ->R(unnable);
endormi (en attente) ->S(leeping);
Invalide (en attente de mémoire) ->X (SXBRK);
Créé (état transitoire, processus en cours de création) ->I( dle);
zombie (l’exécution du processus est terminée, mais ses éléments Restent visibles)
->Z(ombie);
Arrêt (processus mis en attente par l’utilisateur)->T( raced).
La liste de tous les processus avec leur états peut être affichée avec la commande ps –el.
Lorsqu’un processus est actif, il a le contrôle du processeur de l’unité centrale ; lorsqu’il
change d’état, le système utilise un mécanisme de ‘ swapping’ et écrit l’image du processus
sur le disque dur (dans une zone réservée !).

II - 1 Communication et synchronisation entre processus

Nous venons de voir que les entrées et sorties d’un processus pouvaient êtres détournés vers
des fichiers ; mais puisque plusieurs processus peuvent s’exécuter en même temps, il pourrait
être utile de rediriger ces sorties vers l’entrée d’autres processus, ou plus généralement
d’échanger des données entre processus. Les mécanismes suivants sont mis en place à cet
effet :
Les Pipes (tubes)
Avec l’établissement d’une pipe entre deux processus, la sortie du premier devient l’entrée du
second. Le symbole ‘|’ sert à établir cette pipe.
Exemple : ls | pg
Les piles FIFO (First In First Out) ou pipes nommés
Ils agissent comme les pipes ordinaires, la différence étant qu’ils ont une entrée dans un
répertoire et peuvent être utilisés par des processus indépendants.
Les événements
Le système annonce au processus actif l’arrivée d’un événement ; cela peut être utilisé soit
pour déclencher (arrêter) un processus, soit pour synchroniser l’exécution de plusieurs
processus. L’utilisateur peut introduire des événements à l’aide de la commande kill ;
certaines touches de contrôle sont normalement associées à des événements.
(Ex : Ctrl-C interruption)

Ounissi Mounir 9
III) Les fichiers UNIX

Le système de fichier est géré par le noyau. Les fichiers UNIX correspondent soit à des
fichiers de données sur disque dur, soit à des répertoires, soit encore à des fichiers spéciaux
permettant la gestion de certaines ressources du système (par exemple, lorsqu’un périphérique
d’entrées/sorties permet des opérations comme ouverture, écriture, lecture (terminal,
imprimante), on y accède généralement par un fichier spécial (device).

III - 1 Répertoires

Les fichiers sont organisés en répertoires et sous-répertoires, formant une arborescence


Dans chaque répertoire, on trouve au moins deux fichiers, nommés. (point) et.. (point point).
Le premier (.) permet de référencer le répertoire lui-même, et le second (..) d’accéder au
répertoire parent (du dessus).
A chaque instant, toute tâche possède un répertoire courant, ou répertoire de travail. La
commande pwd affiche ce répertoire. La commande cd permet de changer le répertoire
courant.

III - 1 - 1 Chemins absolus et relatifs

Figure II-1 : Chemins absolus et relatifs

Pour désigner un fichier quelconque, on peut utiliser soit un chemin absolu, soit un chemin
relatif.

Un chemin absolu spécifie la suite des répertoires à traverser en partant de la racine, séparés
par des caractères / (et non \ comme sous DOS). Par exemple, le chemin
/usr/bin/compress désigne le fichier compress, qui se trouve dans le répertoire
bin, lui-même dans le répertoire usr de la racine. Le premier caractère / indique qu’il
s’agit d’un chemin absolu.

Ounissi Mounir 10
Il est souvent pratique d’utiliser un chemin relatif, à partir du répertoire courant. Par exemple,
si l’on travaille dans le répertoire mounir, on peut accéder au fichier mounir en spécifiant le
chemin../mounir
Du même endroit, on peut accéder au fichier compress via le chemin
../../usr/bin/compress (dans ce cas précis, il est plus simple d’utiliser le chemin
absolu).

Tout chemin qui ne commence pas par un caractère / (prononcé slash) est interprété comme
un chemin relatif au répertoire courant. On peut ainsi accéder aux fichiers du répertoire
courant en donnant simplement leur nom.

III - 1 - 2 Répertoire de connexion

A chaque utilisateur connu du système est associé un répertoire de connexion (home


directory). L’utilisateur y place ses fichiers personnels, et peut y créer autant de sous-
répertoires qu’il le désire. Dans l’exemple figure II.1, le répertoire de connexion de mounir est
/users/mounir.

Après le login, l’interpréteur de commande a pour répertoire courant le répertoire de


connexion de l’utilisateur.

Le répertoire de connexion contient aussi certains fichiers de configuration permettant à


l’utilisateur de personnaliser son environnement de travail. Ces fichiers sont normalement
invisibles (car leur nom commence par un point, voir la commande ls).

A tout moment, on peut revenir au répertoire de connexion grâce à la commande cd.


On peut aussi spécifier un chemin à partir du répertoire de connexion d’un utilisateur en
utilisant le caractère ~. Par exemple,
~mounir/courrier
désigne le fichier
/users/mounir/courrier

III - 2 Types de fichiers

Nous appelons fichier tout point dans l’arborescence des fichiers. Tous ne correspondent donc
pas à des fichiers de données ordinaires. On distingue 4 types de fichiers :

– les fichiers ordinaires, qui contiennent des données. UNIX ne fait aucune différence entre
les fichiers de texte et les fichiers binaires. Dans un fichier texte, les lignes consécutives sont
eparées par un seul caractère ’\n’.

– les répertoires, qui contiennent une liste de références à d’autres fichiers UNIX ;
– les fichiers spéciaux, associés par exemple à des pilotes de périphériques ;
– les tubes et sockets, utilisés pour la communication entre processus ;
– les liens symboliques (fichiers “pointant” sur un autre fichier).

Ounissi Mounir 11
III - 3 protection des fichiers

L’aspect multi utilisateurs d’unix fait de la protection des fichiers un probléme capital. Les
utisateurs sont rangés en trois cathegories :

u user Le propriétaire du fichier


g group Les utilisateurs appartenant au même group
o other Les autres utilisateurs

Les modes de protection possibles sont :

r read Autorise la lecture d’un fichier ou l’affichage du contenu d’repertoire


w write Autorise la modification d’un fichier et pour repertoire la suppression …..
x execution L’execution d’un fichier et la positionnement dans un repertoire

REMARQUE :il est possible de coder les differents modes sur trois chiffres en octet. Pour
cela on attribue aux didderentes permissions les poids suivants :

r 4
w 2
x 1
- 0
Ces droits (ou permissions) d’accès ne peuvent être changés que par le propriétaire du fichier,
grâce à la commande chmod

A chaque fichier est associé un utilisateur propriétaire et un ensemble de droits d’accès. Les
droits d’accès définissent les possibilités de lecture, écriture et exécution du fichier pour les
utilisateurs.

La commande ls ­l permet d’afficher les droits d’accès à un fichier ; par exemple


$ ls ­l polyunix.tex
­rwxr­­­­­ 1 mounir users 67504 Mar 25 23:29 polyunix.tex
Indique que fichier polyunix.tex contient 67504 caractères et appartient à l’utilisateur
mounir. La date et l’heure indiquées sont celles de la dernière modification du contenu du
fichier.

Les caractères en début de ligne (­rwxr­­­­­) indiquent le type et les droits d’accès sur ce
fichier. Le premier caractère donne le type, ici ­ dénote un fichier ordinaire. Les neufs
caractères restants sont divisés en trois groupes de trois, indiquant respectivement les droits
du propriétaire du fichier, les droits des utilisateurs du même groupe que le propriétaire, et

Ounissi Mounir 12
enfin les droits des autres utilisateurs. Le caractère r correspond au droit la lecture (read), w
au droit d’écriture (write) et x au droit d’exécution. Le fichier polyunix.tex montré ci-
dessus est donc accessible en lecture, écriture et exécution par son propriétaire, en lecture par
les utilisateurs du même groupe et pas du tout aux autres.

III – 3 - 2 Le super-utilisateur

Afin de permettre l’administration du système, un utilisateur spécial, nommé super utilisateur


(ou root), est toujours considéré par le système comme propriétaire de tous les fichiers (et des
processus). La personne qui gère le système est normalement la seule à connaître son mot de
passe. Lui seul peut ajouter de nouveaux utilisateurs au système.

III - 4 Arborescence Type d'un Système UNIX

La hiérarchie du système de fichiers Unix est une arborescence dont plusieurs répertoires sont
conventionnels et se retrouvent sur la majorité des ordinateurs. La figure II - 2 présente les
principaux répertoires que l'on retrouve dans la plupart des versions de Unix:

mounir

Figure II-2 : Répertoires standards du système de fichiers

Dans la figure II-2 on peut voir les répertoires suivants :


/ : appelé racine ("root") est présent dans tous les systèmes de fichiers Unix. Il est l'ancêtre de
tous les fichiers.

/home : Les usagers possèdent tous un répertoire privé où ils sauvegardent leurs textes ou
travaux. Ce répertoire leur appartient (ils ont toutes les permissions) et est habituellement un
sous-répertoire de /home (voir la section "comptes et accès"). Par exemple, le répertoire d'un
usager qui se nomme "mounir" est /home/mounir dans la figure II - 2. Cet usager peut créer
tous les fichiers qu'il désire (y compris des répertoire) à partir de /home/mounir. Cependant, il
n'est pas interdit ni impossible de voir son répertoire privé ("home directory") se retrouver
ailleurs que dans /home.

/usr : Traditionnellement, ce répertoire contient des sous-répertoires utilisés par le système.


Ces fichiers ne changent pas souvent et sont inclus dès l'installation du système d'exploitation.

Ounissi Mounir 13
/usr/bin et /bin : Ces répertoires contiennent les programmes utilitaires qui viennent avec les
distributions Unix.
/usr/local : À partir de ce répertoire, on retrouve habituellement l'installation de logiciels
locaux à l'ordinateur qui ne proviennent pas de la distribution. Les programmes de GNU sont
habituellement dans /usr/local/bin. Voir la section sur "le phénomène GNU".
/sbin et /usr/sbin : Contiennent les utilitaires nécessaires à l'administration du système.
Typiquement, on retrouve dans /sbin les utilitaires pour l'initialisation de l'ordinateur lors de la
mise sous tension et dans /usr/sbin il y a les programmes utilisés lorsque le système est en
marche.
/var : Répertoire dont le contenu varie dans le temps à mesure que les gens utilisent le
système pour recevoir du courier, imprimer des documents, etc.
/dev : Tous les fichiers qui représentent des périphériques comme l'imprimante et les
terminaux, se retrouvent dans ce répertoire.
/etc : Fichiers de configuration ou d'administration du système. Un des plus utile est le
fichier "passwd".
/root : C'est le répertoire privé de l'administrateur du système.

Ounissi Mounir 14
Chapitre 3 : Commandes de base (shell)

I) Définition

Un shell est un interpréteur de commande en mode texte. Il peut s’utiliser en mode interactif
ou pour exécuter des programmes écrits dans le langage de programmation du shell (appelés
shell scripts).

En mode interactif, le shell affiche une invite en début de ligne (prompt), par exemple un
caractère $, pour indiquer à l’utilisateur qu’il attend l’entrée d’une commande. La commande
est interprétée et exécutée après la frappe de la touche “Entrée”. Voici un exemple
d’utilisation d’un shell ; les lignes débutantes par $, sont entrées par l’utilisateur, les autres
sont affichées en réponse

$ pwd
/users/emmanuel/COURS/SYSTEME/POLYUNIX
$ ls
Makefile polyunix.dvi polyunix.tex
fig polyunix.idx polyunix.toc
hello.c polyunix.ind ps

I - 1 Syntaxe d'une commande

Le système d'exploitation fait la distinction entre les minuscules et les majuscules (sensible à
la casse). Les commandes s'écrivent toutes en minuscules, de même que la plupart des
options.

La syntaxe générale d’une commande UNIX est :

nom_commande [ -option(s) ] [ argument(s) ]

La présence des crochets correspond seulement à une convention d'écriture.


La validation est faite par la touche <Entrée>.
L’espace est utilisé comme séparateur des expressions régulières : entre le nom et les options,
entre les options et le ou les arguments.
Les options (quand il y en a…) peuvent être concaténées (exemple : ls -l -i fichier s’écrit ls -li
fichier).

Les arguments peuvent être facultatifs ou obligatoires selon les commandes. Certaines
commandes n’en ont pas (exemple :pwd). Le nombre d'arguments concernés par la commande
n'est pas limité.

II) Les différents shells

Il existe plusieurs shells UNIX : C-Shell (csh ou tcsh), Bourne Shell (sh ou bash),
Korn shell (ksh), ....

L’interprétation des commandes simples est semblable pour tous ; par contre l’utilisation pour
écrire des scripts diffère beaucoup (définition des variables, structures de contrôle, etc.).

Ounissi Mounir 15
Les variantes tcsh et bash apportent un plus grand confort d’utilisation en mode interactif
(historique, terminaison automatique des commandes, etc.) ; tcsh est compatible avec csh,
et bash avec sh.

Le point commun à tous les shells est l’emploi d’une syntaxe concise mais obscure et
difficilement mémorisable, rendant leur apprentissage difficile (mais leur usage assez
divertissant à la longue !). Il est difficile d’administrer finement un système UNIX sans
posséder quelques bases sur sh et csh, car de nombreux scripts de configuration sont écrits
dans ces langages. La tendance actuelle est de généraliser l’emploi d’interfaces graphiques,
qui restent toutefois moins souples et puissantes que les scripts. D’autre part, les scripts
complexes sont de plus en plus souvent écrits dans des langages interprétés plus puisant
comme Python ou Perl. Faute de place, nous étudierons peu l’écriture de shell scripts dans ce
cours.

Dans les sections suivantes, nous décrivons brièvement les commandes du shell les plus
utilisées. Les commandes sont groupées par thème. Pour retrouver rapidement une
commande, utilisez l’index à la fin de ce document. Pour plus de détails sur ces commandes
ou sur leurs options, se reporter au manuel en ligne (commande man).

II - 1 Métacaractères du shell :

Certains caractères, appelés méta caractères, sont interprétés spécialement par le shell avant
de lancer la commande entrée par l’utilisateur.

Par exemple, si l’on entre ls *.c, le shell remplace l’argument *.c par la liste des fichiers
du répertoire courant dont le nom termine par .c.

Les méta caractères permette donc de spécifier facilement des ensembles de fichiers, sans
avoir à rentrer tous leurs noms. Voici les plus utilisés :

– * remplacé par n’importe quelle suite de caractères ;


– ? remplacé par un seul caractère quelconque ;
– [ ] remplacé par l’un des caractères mentionnés entre les crochets. On
peut spécifier un intervalle avec - : [a­z] spécifie donc l’ensemble des
lettres minuscules.
Exemples :
$ ls
ABCDEF a grrr prog prog.o
Q.R.S aa hel.l.o prog.c x.y.z
$ ls A*
ABCDEF
$ ls *.c
prog.c
$ ls *g*
grrr prog prog.c prog.o
$ ls *.?
Q.R.S hel.l.o prog.c prog.o x.y.z
$ ls [hg]*
grrr hel.l.o
$ ls *.[a-z].*
hel.l.o x.y.z

Ounissi Mounir 16
On peut empêcher l’interprétation des méta caractères par le shell en plaçant l’argument entre
apostrophes ’.

III) Variables d’environnement

Le système Unix défini pour chaque processus une liste de variables d’environnement, qui
permettent de définir certains paramètres : répertoires d’installation des utilitaires, type de
terminal, etc. Chaque programme peut accéder à ces variables pour obtenir des informations
sur la configuration du système.

Depuis le shell csh, les variables d’environnement sont manipulées par les commandes env
(affiche la liste), setenv VARIABLE VALEUR (donne une valeur à une variable), et
echo $VARIABLE (affiche la valeur de la variable).

IV) Les entrées-sorties et leur redirection.

Une commande lit normalement ses données d'entrée dans l’entrée standard et écrite sa sortie
dans la sortie standard qui, par défaut, correspondent respectivement au clavier et à l'écran du
terminal.

Les processus accèdent à ces périphériques comme s'ils accédaient à des fichiers normaux, par
le biais de handle (descripteurs de fichiers). Voici donc un récapitulatif des périphériques, de
leur association par défaut, ainsi que des descripteurs de fichiers :

Périphérique Association par défaut Descripteur de fichier(handle)


Standard input buffer Clavier 0
Standard output Ecran 1
Standard output error Écran 2

IV - 1 Redirections des entrées/sorties

Chaque programme sous UNIX dispose au moins de deux flux de données :

L’entrée standard, utilisée en lecture, qui est normalement associée au clavier du terminal, et
la sortie standard, utilisée en écriture, normalement associée à l’écran du terminal (ou à la
fenêtre de lancement le cas échéant).

Tous les flux de données sont manipulés comme de simples fichiers : on utilisera par exemple
la même commande pour lire un caractère au clavier, dans un fichier sur disque ou via une
liaison réseau. Ceci simplifie grandement l’écriture des programmes et améliore leur
réutilisation.

IV - 2 Redirections vers/depuis des fichiers

Il est très simple de rediriger l’entrée ou la sortie standard d’un programme lors de son
lancement depuis un shell UNIX. Pour la sortie, on utilisera la construction suivante :

ls > resultat

Ounissi Mounir 17
Dans ce cas, au lieu d’afficher sur l’écran, la commande ls va créer un fichier nommé ici
resultat et y écrire. Rien n’apparaît à l’écran (sauf s’il se produit une erreur).
Si l’on désire ne pas effacer l’ancien contenu du fichier, mais écrire à sa fin, on peut utiliser
>> :
ls >> resultats
Enfin, pour rediger l’entrée standard, on utilise < :
cat < UnFichier
Il est possible de rediriger l’entrée et la sortie en même temps :
cat < UnFichier > Resultat
Notons enfin qu’il existe un troisième flux standard, utilisé pour l’écriture des
messages d’erreur (nommé stderr en C, ou cerr en C++). Il se redirige avec >&.

IV - 3 Redirections vers des tubes

De façon similaire, il est possible de rediriger la sortie standard d’une commande vers l’entrée
standard d’une autre commande grâce au tube (pipe) noté |. Les différentes commandes
s’exécutent alors en parallèle.

# affiche le contenu du répertoire trie à l’envers


ls | sort –r

Les commandes

man

Syntaxe :
man [section] commande
man -k mot_clé
Description :

man permet de rechercher une aide sur une commande ou un mot-clé. Il utilise la variable
MANPATH pour effectuer la recherche des pages et la variable PAGER pour connaître le
programme chargé de l'affichage.

Options courantes:

section Numéro de la section qui contient la page.


-k précise que la recherche s'effectue sur un mot-clé et non une commande.
Exemple :
$ man passwd
$ man 4 passwd
$ man -k passwd
passwd (1) - define or change login password and password
attributes
default_passwd (4D) - /etc./default/passwd file
passwd (4) - password file
pwconv (1M) - installs and updates / etc/shadow with information

Ounissi Mounir 18
from / etc/passwd
in.yppasswdd (1M) - change passwords for network user accounts
yppasswd (1) - change global user password
yppasswdd (1M) - change passwords for network user accounts
Remarques :
Les pages man sont toujours articulées autour des paragraphes suivants :
NOM
SYNTAXE
DESCRIPTION
OPTIONS
FICHIERS UTILISES
VOIR AUSSI

Gestion et déplacement des arborescences

ls liste le contenu d'un répertoire.


cd changement de répertoire courant.
pwd affichage du répertoire courant.
mkdir création de répertoire.
rmdir destruction d'un répertoire.

ls
Syntaxe :
ls [options] [noms]
Description :
ls liste les répertoires et les fichiers précisés dans noms. Par défaut, la sortie est envoyée à
l'écran par ordre alphabétique. Les options déterminent les informations à afficher et la
présentation de l'affichage. Sans options, ls n'envoie que le nom des fichiers. Si noms n'est pas
précisé, c'est le répertoire courant qui est listé.
Options courantes:
-R Traitement récursif
-a Tous les fichiers (y compris ceux qui commencent par un point)
-d Affiche le nom des répertoires sans leur contenu
-l Format long (avec beaucoup de détails)
nom est le nom d'un fichier ou d'un répertoire (avec ou sans métacaractères)
Exemple :
$ ls -ld r* u*
lrwxrwxrwx 1 root other 6 Nov 21 1997 rep1 -> /usr/rep1
lrwxrwxrwx 1 root other 6 Nov 21 1997 rep2 -> /usr/rep2
-rwxr--r-- 3 root other 5423661 Apr 1 1997 unix
drwxr-xr-x 5 root root 1024 Nov 25 05:38 usr
Remarques :
Au niveau du propriétaire, du groupe, et des autres, il est possible de déterminer un certain
nombre de droits :
La lecture (R) : pour un fichier, ce droit permet la lecture du fichier; alors que pour un
répertoire, il autorise l'utilisateur à lister son contenu.
L'écriture (W) : pour un fichier, il permet sa modification; alors que pour un répertoire, il
permet la création et la suppression des fichiers du répertoire (ATTENTION : cette
permission est valable quels que soient les droits des fichiers).

Ounissi Mounir 19
L'exécution (X) : pour un fichier, il autorise son exécution; et pour un répertoire, il permet
de se positionner dessous

cd
Syntaxe :
cd [répertoire]
Description :
La commande cd permet de changer le répertoire de travail. Si répertoire n'est pas
précisé, alors le nouveau répertoire de travail sera le répertoire de connexion ($HOME).
Option :
répertoire représente le futur répertoire de travail.
Exemple :
$ cd /usr/lib/news/bin
$ cd $HOME/rep1
Remarque :
la commande cd, comme toutes les commandes utilisant des répertoires, permet de spécifier
deux types de chemins :
les chemins relatifs : ils sont relatifs au répertoire de travail, et utilisent notamment le
répertoire '..' (répertoire père).
Exemple : cd ../rep1
les chemins absolus : ils faut spécifier toute l'arborescence depuis la racine.
Exemple : cd /home/rep1
pwd
Syntaxe :
pwd
Description :
La commande pwd permet d'afficher le répertoire de travail.
Option :
La commande pwd n'accepte pas d'option
Exemple :
$ pwd
/usr/lib/news/bin
$ cd ..;pwd
/usr/lib/news
$ cd bin
$ pwd
/usr/lib/news/bin
$ cd /bin
$ pwd
/bin
mkdir
Syntaxe :
mkdir [-p] nouveau_répertoire
Description :
La commande mkdir créé le répertoire spécifié sur la ligne de commande
(nouveau_répertoire ). Si l'un des répertoires intermédiaires n'existe pas, la
commande retourne un code d'erreur (exit status) sans créer le répertoire (sauf si l'option -p
est spécifiée).

Ounissi Mounir 20
Options courantes
-p permet de créer tous les répertoires intermédiaires qui n'existeraient pas.
répertoire représente le nom du répertoire à créer. C'est un argument obligatoire
Exemple :
$ mkdir /tmp/rep1
$ cd /tmp/rep1
$ mkdir rep11/rep111
mkdir: Cannot create directory " rep11/rep111": No such file or directory
$ mkdir -p rep11/rep111
Remarque :
Pour pouvoir créer un répertoire, le répertoire d'origine doit avoir les droits en écriture
positionnés.
rmdir
Syntaxe :
rmdir [-p] [-s] répertoire
Description :
La commande rmdir supprime le répertoire spécifié sur la ligne de commande
répertoire ). S’il existe des fichiers ou des sous répertoires, la commande retournera un
code d'erreur ( exit status).
Options courantes
-p permet de détruire tous les sous-répertoires vides.
-s mode silencieux (aucun affichage).
répertoire représente le nom du répertoire à détruire. C'est un
argument obligatoire.
Exemple :
$ rmdir /tmp/rep1/rep11/rep111
$ cd /tmp
$ rmdir -p rep1/rep11
rmdir: rep1/rep11: Whole path removed.
$ cd rep1
rep1: does not exist
Remarque :
Pour pouvoir supprimer un répertoire, le répertoire père doit avoir les droits en écriture
positionnés.
Voir aussi la commande rm -r pour supprimer des répertoires contenants des fichiers.

Gestion et manipulation de fichiers


cp copie de fichiers.
mv déplacement de fichiers.
rm destruction de fichiers.
cat visualisation et/ou concaténation de fichiers.
Pg | less visualisation d'un fichier texte page par page.
chmod change les droits d'un fichier/répertoire.
chown change le propriétaire d'un fichier/répertoire.
chgrp change le groupe propriétaire du fichier/répertoire.
find recherche de fichiers ou répertoires.
grep recherche d'une chaîne de caractères dans un fichier.
head/tail affiche le début/la fin d'un fichier.
ln crée un lien avec un fichier existant.
sort trie les lignes d'un fichier.

Ounissi Mounir 21
umask choix des permissions par défaut.
wc compte le nombre de mots/lignes/caractères d'un fichier.

cp
Syntaxe :
cp [-i] [-p] fichier1 fichier2
cp [-i] [-p] [-r] source1 [source2...] répertoire
Description :
La commande cp copie le contenu de fichier1 dans fichier2 ;ou bien elle copie source1 et
source2 (etc .. ) Dans répertoire.
Options courantes
-i mode interactif, demande la confirmation avant écrasement.
-p conserve les dates du fichier source.
-r copie récursive de répertoires.
source X représente le nom des fichiers ou répertoires à copier.
Exemple :
$ cp /tmp/rep1/fic1 .
$ cp /tmp $HOME
$ cp -r rep1 rep2
$
Remarque :
Pour pouvoir copier un fichier/répertoire, vous devez avoir les droits suivants :
Droits de lecture du fichier à copier ;
Droits d'exécution sur le répertoire contenant le fichier à copier ;
Droits d'écriture sur le répertoire de destination.
mv
Syntaxe :
mv [-f] [-i] source1 [source2...] destination
Description :
La commande mv déplace les fichiers fichier1, fichier2 etc...dans destination. Si destination
est un fichier, alors mv a pour action de renommer
fichier1 en destination ; si destination est un répertoire, alors mv déplace fichier1 dans ce
répertoire.
Options courantes
-i mode interactif, demande la confirmation avant écrasement.
-f force la commande.
sourceX représente le nom des fichiers ou répertoires a déplacer. Destination représente le
nom des fichiers ou répertoires de destination.
Exemple :
$ mv fic1 fic2
Remarque :
Pour pouvoir copier un fichier/répertoire, le répertoire cible doit avoir les droits en écriture
positionnés, les droits en lecture sur le fichier source, et les droits d'accès dans le répertoire
source.
rm
Syntaxe :
rm [-f] [-i] [-r] fichier1 [fichier2...]
Description :

Ounissi Mounir 22
La commande rm supprime les fichiers spécifiés sur la ligne de commande. Si vous n'avez
pas les droits d'écriture sur fichier1, alors rm vous demandera de confirmer votre action ; la
réponse oui (y) détruira quand même le fichier (sous réserve d'avoir les droits d'écriture sur le
répertoire.
Options courantes
-i mode interactif, demande la confirmation avant chaque suppression.
-f force la commande (aucune confirmation).
-r récursif (détruit tous les sous répertoires. ATTENTION)
Exemple :
$ rm fic1
$ rm -i fic*
rm: File fic1. Remove ( yes/no)? y
rm: File fic2. Remove ( yes/no)? N
Remarque :
Pour pouvoir supprimer un fichier, le répertoire où se trouve le fichier doit avoir ses droits en
écriture positionnés ; sauf dans le cas où le répertoire aurait les droit suivants :
drwxrwxrwt 1 user user 6 Nov 21 1997 rep1
cat
Syntaxe :
cat [fichier...]
Description :
La commande cat visualise et/ou concatène les fichiers spécifiés sur la ligne de commande.
Par défaut, cat lit sur l'entrée standard et affiche le résultat sur la sortie standard.
Option :
La commande cat n'admet pas d'option.
Exemple :
$ cat villes
tataouine
mateur
tunis
gabes
bizerte
$ cat villes pays
mateur
tunis
gabes
bizerte

Tunise
Maroc
Algerie
France
Belgique
Italie
pg
Syntaxe :
pg [+numlig] [+/chaîne/] [fichier...]
Description :
La commande pg affiche à l'écran les fichiers spécifiés sur la ligne de commande.
Par défaut, pg lit sur l'entrée standard ce qui permet de l'associer à un pipe.
Options courantes
+numlig spécifie le numéro de ligne où doit commencer l'affichage

Ounissi Mounir 23
+/chaîne/ commence l'affichage à la première ligne du fichier contenant chaine
Exemple :
$ pg villes
tataouine
mateur
tunis
gabes
bizerte
(EOF):
$ pg +2 villes
mateur
tunis
gabes
bizerte
(EOF):
$ cat villes pays| pg +/mateur/ pays
mateur
tunis
gabes
bizerte
Tunise
Maroc
Algerie
France
Belgique
Italie
(EOF):
Remarque :
Sous Linux, pg n'existe pas mais l'on pourra utiliser avantageusement less (voir la page
man).
chmod
Syntaxe :
chmod [-R] mode nom [...]
chmod [-R] [ ugoa]{+|-|=}[ rwx] nom [...]
Description :
La commande chmod change les droit d'accès aux fichiers spécifiés sur la ligne de
commande.
Deux manières d'attribuer les droits sont possibles. La première stipule les droits de manière
numérique par un calcul des différentes valeurs associées aux droits; la seconde permet de
spécifier ces mêmes droits de manière plus symbolique.
Options courantes
-R récursif sur tous les fichiers et sous-répertoires contenus si nom est un répertoire
mode c'est la combinaison des droits numériques (voir Remarques)
ugoa caractère spécifiant le champ d'application des modifications :
u représente l'utilisateur,
g le groupe,
o les autres,
a regroupe tous ces derniers.
+|-|= indique l'action à accomplir respectivement l'ajout du droit, son retrait, ou bien son
affectation.
rwx indique le droit proprement dit (r lecture, w écriture, x exécution).
Exemple :
$ chmod 777 villes
$ chmod g-rw villes

Ounissi Mounir 24
$ chmod -x villes
Remarque :
propriétaire groupe autres
rwx rwx rwx
4 4 4
2 2 2
1 1 1
chown

chgrp
Syntaxe :
chown [-R] [-h] utilisateur nom [...]
chgrp [-R] [-h] groupe nom [...]
Description :
La commande chown change le propriétaire des fichiers spécifiés sur la ligne de commande.
La commande chgrp change le groupe des fichiers spécifiés sur la ligne de commande.
Options courantes
-R récursif sur tous les fichiers et sous-répertoires contenus si nom est un répertoire
-h traitement sur les liens symboliques
nom exprime le nom d'un fichier ou d'un répertoire utilisateur représente soit le nom
de l'utilisateur, soit son UID (User IDentification) groupe représente soit le nom du groupe,
soit son GID (Group IDentification)
Exemple :
$ chown root villes
$ chown 102 villes
$ chgrp news villes
Remarque :
Seul le propriétaire des fichiers traités ou root ont le droit d'utiliser chown et chgrp .
find
Syntaxe :
find répertoire option1 [option2...]
Description :
La commande find permet de rechercher un fichier dans l'arborescence à partir du point
spécifié.
Options courantes:
-name fich recherche sur le nom fich
-size n recherche sur la taille en blocs
-ctime n recherche sur la date de création
-exec cmd {} \; exécute la commande cmd sur les fichiers trouvés
-print affiche le résultat de la recherche
! négation du critère de recherche
Exemple :
$ find $HOME - name "vil*" -print
$ find . -print| cpio -ocvB / dev/streamer
$ find / -name "profile*" - exec pg {} \;
Remarque :
Il est nécessaire de faire suivre l'option -exec par {} \;
Métacaractère Utilisation
? indétermination d'un caractère
* indétermination de 0 à n caractères
[xyz123...] indétermination d'un caractère pris dans la liste

Ounissi Mounir 25
[b-t] indétermination d'un caractère pris dans l'intervalle
[!xyz123...] indétermination d'un caractère pris à l'extérieur de la liste
[!b-t] indétermination d'un caractère pris à l'extérieur de l'intervalle

grep
Syntaxe :
grep [-ilsfv] expression [fichier...]
Description :
La commande grep permet de rechercher expression dans fichier.
Elle affiche les noms de fichiers ainsi que les lignes contenant expression .
Options courantes
-i ne tient pas compte des minuscules et des MAJUSCULES
-l n'affiche que le nom des fichiers (pas les lignes)
-s pas de message d'erreur sur les fichiers inaccessibles
-f fich spécifie un fichier contenant les expressions à rechercher
-v affiche toutes les lignes, sauf celles qui contiennent l'expression
expression chaîne de caractères (ou expression régulière)
fichier nom des fichiers à traiter
Exemple :
$ grep Sarrebourg *
villes : Sarrebourg
$ grep -l Sarrebourg *
villes

head
tail
Syntaxe :
head [-n] [fichier...]
tail [-n|+n] [-f] [fichier]
Description :
La commande head affiche les n premières lignes d'un fichier, alors que tail affiche les
dernières lignes d'un fichier. Si n n'est pas précisé, il prend la valeur 10.
Options courantes
-n nombre de lignes à afficher depuis le début/la fin de fichier
+n affichage à partir de la ligne numéro n
-f attente de nouvelles lignes (sortie par Ctrl-c)
fichier nom des fichiers à traiter
Exemple :
$ head -2 villes
……
$ tail -2 villes
……
$ tail +2 villes
……
……
ln
Syntaxe :
ln [-s] fichier1 fichier2
ln [-s] fichier1 [fichier2...] répertoire
Description :

Ounissi Mounir 26
La commande ln permet de créer des entrées multiples dans l'arborescence d'un système de
fichiers pour un même fichier physique. Ce qui revient à dire que si l'on modifie un fichier,
ses liens le sont aussi.
ln permet aussi de faire des liens dans des systèmes de fichiers différents par la méthode des
liens symboliques .
Si le dernier argument de la ligne de commande est un répertoire, ln crée des liens dans ce
répertoire pour tous les fichiers pré-cités (fichier1,fichier2, ...).
Option :
-s permet de faire un lien symbolique
Exemple :
$ ln villes villes5
$ ls villes*
-rwxr--r-- 2 root other 5423661 Apr 1 1997 villes
-rwxr--r-- 2 root other 5423661 Apr 1 1997 villes5
$ ln -s villes villes10
$ ls villes*
-rwxr--r-- 2 root other 5423661 Apr 1 1997 villes
-rwxr--r-- 2 root other 5423661 Apr 1 1997 villes5
lrwxr--r-- 1 root other 5423661 Apr 1 1997 villes10 -> villes
Remarque :
Les liens peuvent aussi concerner des répertoires (dans ce cas, ce seront toujours des liens
symboliques).

sort
Syntaxe :
sort [-ufnr] [-o fic] [fichier...]
Description :
La commande sort trie les lignes des fichiers en arguments et affiche le résultat à l'écran.
Le clavier est lu si fichier est omis.
Par défaut sort effectue un tri par ordre alphabétique; mais les options suivantes en
modifient les critères.
Options courantes
-u permet de n'afficher qu'une seule fois les lignes multiples
-f ne différencie pas les minuscules et MAJUSCULES
-n effectue un tri numérique
-r ordre décroissant
-o fic enregistre la sortie dans fic
Exemple :
$ sort villes

$ sort -r villes

umask
Syntaxe :
umask [???]
Description :
La commande umask permet de définir les droits affectés par défaut aux fichiers lors de leur
création.
Si le masque ??? est omis, alors umask affiche le masque en cours.
Options courantes

Ounissi Mounir 27
??? Chaque ? représente une valeur entre 0 et 7 qui est le complément à 7 des droits à
affecter aux fichiers. Si l'on veut avoir des fichiers avec 751
(rwxr-x--x ) comme droits, il faudra définir comme masque 026 (on remarque que
7+0 = 5+ 2 = 1+ 6 = 7).
Exemple :
$ umask 022
$ umask
022
Remarque :
Il faut noter que les droits affectés à la création d'un fichier dépendent aussi de l'utilitaire qui
les a créés; si vous avez un masque 000 et que vous créez un fichier avec vi, les droits
effectifs de votre fichier sont 666 (rw-rw-rw- ) car vi est un éditeur de texte et non de
programmes shells. À l'inverse, quel que soit le masque utilisé, le compilateur c cc
(programme permettant de créer des fichiers programmes) positionnera toujours les droits
d'exécution sur les fichiers qu'il crée.

wc
Syntaxe :
wc [-lwc] [fichier...]
Description :
La commande wc compte le nombre de lignes, mots, ou caractères d'un fichier texte
Si aucun fichier n'est passé en paramètre, c'est l’entrée standard qui sera lue. Si aucune option
(-lwc) n'est précisée, alors wc compte le nombre de lignes, mots, et caractères du fichier.
Options courantes
-l précise que c'est le nombre de lignes qui doit être compté
-w précise que c'est le nombre de mots qui doit être compté
-c précise que c'est le nombre de caractères qui doit être compté
Exemple :
$ wc -l villes
4 villes
$ wc villes
4 4 36 villes

Commandes de filtres : grep, cut, tr, sed

Généralités
 Un filtre est une commande qui lit les données sur l'entrée standard, effectue des traite-
ments sur les lignes reçues et écrit le résultat sur la sortie standard.
 Bien sûr les entrées/sorties peuvent être redirigées, et enchainées avec des tubes.
A noter que le caractère d'indirection < en entrée n'est pas obligatoire pour les filtres
Ainsi, dans # cat /etc/*.conf > tous.conf cat va bien lire les fichiers qui
correspondent au modèle /etc/*.conf et les contaténer dans le fichier tous.-
conf
o les principaux filtres utilisés dans le monde UNIX grep,cut,wc ,tr ;sed
Les commandes cat, more et less
cat f1 f2 .. > f concaténe f1, f2 .. dans le nouveau fichier f
less f1 f2 .. > f concaténe les fichiers f1 f2 .. en un seul
fichier f (comme cat)

Ounissi Mounir 28
less f3 >> f ajoute le contenu du fichier f3 à la suite
du contenu du fichier f
grep
La commande grep : sélection de lignes
Cet utilitaire (General Regular Expression Parser, analyseur général d'expression régulière)
sélectionne toutes les lignes qui satisfont une expression régulière (ou rationnelle).
Syntaxe
grep [options] expreg [fichiers]
Cette commande recherche dans les fichiers ou sur son entrée standard des lignes de texte qui
satisfont l'expression régulière expreg indiquée.
Sa sortie peut être redirigée dans un fichier.
options
-c donne seulement le nombre de lignes trouvées obéissant au critère
-l donne seulement le nom des fichiers où le critère a été trouvé
-v donne les lignes où le critère n'a pas été trouvé
-i ne pas tenir compte de la casse (ne pas différencier majuscules minuscules)
-n pour n'afficher que les numéros des lignes trouvées
-w pour imposer que le motif corresponde à un mot entier d'une ligne
constructions
grep est souvent inclus dans un tube qui lui fournit en entrée le fichier à étudier.
Exemple : quelle est la question posée ?
cat /etc/passwd | cut -d: -f1 | grep -w "jean" > sortie
Expressions reconnues
Grep ne reconnait pas toutes les expressions rationnelles étendues.
Voici la liste des symboles utilisables par grep : . * [ ] [^ ] ^ $
 . signifie un caractère quelconque
 * répétition du caractère situé devant
 ^ début de ligne
 $ fin d'une ligne (donc "e$" mots se terminant par e)
 [...] contient une liste ou un intervalle de caractères cherchés
 [^..] caractères interdits.

Attention
Pour éviter une confusion entre les interprétations de ces symboles spéciaux par grep ou par le
shell, il est indispensable de "verrouiller" expreg en plaçant l'expression entre guillemets " "
(et non entre quotes !).

cut
cut : sélection de colonnes
La commande cut présente 2 formes suivant que l'on sélectionne des colonnes de caractères
ou qu'on distingue des champs séparés par un caractère précis.

sélection_colonne
cut -c(sélection_colonnes) [fichiers]
Exemples

 affiche le 5ième caractère


cut -c5 fichier

Ounissi Mounir 29
 affiche du 5ième au 10ème caractères
cut -c5-10 fichier
 affiche le 5ième et le 10ème caractères
cut -c5-10 fichier
Chapitre 1affiche à partir du 5ième (jusqu'à la fin)
cut -c5- fichier
tr

La commande tr
tr=Translate, est un filtre ne reconnaissant pas les expr. régulières.
Cette commande est le plus souvent associée à des redirections
Les caractères entrés sont traités et le résultat est envoyé sur la sortie standard
On peut utiliser les intervalles du type a-z et les codes ASCII des caractères en notation
octale \0xx
Syntaxe
1. tr [options] ch1 ch2 <fich1 >fich2
Remplace toutes les occurrences de TOUS les caractères de ch1 par le caractère de
ch2, de même rang, dans le flot d'entrée.
2. Exemple
3. # pour convertir et afficher la ligne saisie au clavier en minuscules
4. read ligne; echo $ligne | tr 'A-Z' 'a-z'
5. tr -c chaine car remplace tout caractère NON INCLUS dans la chaine chaine
par le caractère car
6. # remplace supprime tous les caractères différents de a,b, ..z par un
espace
7. echo $ligne | tr -c a-z ' '
8. tr -d chaine supprime tout caractère entré, appartenant à la chaine chaine
9. # supprime toutes les minuscules non accentuées
10. echo $ligne | tr -d a-z
11. tr -s chaine supprime toute répétition des caractères contenus dans chaine
12. # supprime les espaces multiples entre les mots
13. echo $ligne | tr -s ' '

Gestion des utilisateurs et des groupes

Qui est utilisateur ?


Le système, dès son installation, avant même la première connexion au système a créé des
users système.
Un utilisateur n'est donc pas uniquement une personne physique, le système a besoin
d'utilisateurs pour sa gestion interne, notamment comme propriétaire des divers processus.
La commande ps aux | less montre qu'avant toute connexion d'utilisateur humain
(repérée par les lignes login --user), root a lancé init, et la plupart des services,
crond, inetd, lpd, smbd, ... , avant de lancer les connexions utilisateurs dans
les consoles, y compris éventuellement la sienne !

Ounissi Mounir 30
Les principales commandes

Useradd, usermod, userdel gestion des comptes utilisateur


groupadd, groupmod, groupdel gestion des groupes
pwck, grpck vérification des fichiers
Passwd changer le mot de passe d'un utilisateur
chfn, id, groups, finger utilitaires divers
Gestion des comptes
Chapitre 2Créer un compte pour un nouvel utilisateur
Cela signifie lui permettre d'être connu du poste local, s'y loguer, avoir un accès complet
sur son rép. personnel.
Mais aussi dans une configuration réseau, de pouvoir se connecter à son compte par telnet
et ftp, et de pouvoir bénéficier de services réseau de partage distant (sous Linux par NFS
et sous Windows 9x par SMB).
 Pour créer l'utilisateur stagex, root passe la commande :

useradd stagex

 Ceci crée :
o le répertoire personnel /home/stagex, portant par défaut le nom du
compte
o une nouvelle entrée dans les 2 fichiers fondamentaux /etc/passwd et
/etc/group.
o Pour connaitre les options de useradd (man useradd)
 Pour lui attribuer le mot de passe :
 passwd stagex
 saisir 2 fois stgx
 Supprimer le compte d'un utilisateur (non connecté), au hasard .. totox.
userdel [-r] totox
 L'option -r supprime aussi le rép. personnel et les fichiers de l'utilisateur
La commande supprime toute trace de l'utilisateur dans le fichier de configuration :
/etc/passwd y compris dans les groupes d'utiliseurs.
 Modifier le compte de l'utilisateur toto
 usermod [options] totox
 Les options sont les mêmes que useradd
 usermod -G stagiaire,prof stagex ajoute stagex dans les 2 groupes
stagiaire et profs (qui doivent exister)

Manipulations
Sous l'identité de root
1. Créer quelques utilisateurs stagey et totox
2. Effectuer des vérifications : possibilité immédiate de se loguer sous ces comptes, créa-
tion de leur rép. personnel dans /home.
3. Essayer de créer un compte déjà existant.
4. Supprimer sans regret le compte de totox. Son rép. personnel a t-il été supprimé ?

Ounissi Mounir 31
Remarques
 Attention : si root passe la commande passwd il s'apprête à redéfinir son propre
mot de passe !
 Un utilisateur quelconque ne peut pas créer de compte, même s'il a le privilège de faire
partie du groupe root. A tester !
 Par contre, il peut modifier lui-même son mot de passe.
 Voir les diverses options avec useradd -h
Les groupes
 Un groupe est, aussi pour Linux, un ensemble d'utilisateurs qui partagent les mêmes
fichers et répertoires. Nous verrons que les fichiers accordent des droits d'accès ré-
glables à ces groupes.
 Chaque utilisateur doit faire partie au moins d'un groupe, son groupe primaire. Celui-
ci est défini au moment de la création du compte, et par défaut, l'utilisateur appartient
à un nouveau groupe créé, portant son nom.
 Ainsi, dans /etc/passwd chaque utilisateur possède un groupe par défaut, précisé
par son identifiant gid dans ce fichier.
 L'appartenance au groupe primaire n'étant pas exclusive, tout utilisateur peut faire
partie de plusieurs autres groupes, appelés ses groupes secondaires.
Mais le rôle joué par le groupe primaire demeure prépondérant, comme nous le ver-
rons dans le système des permissions des fichiers.
 Pour lister tous les groupes (primaire et secondaires) d'un utilisateur :
groups stagex
 Pour créer un nouveau groupe
 groupadd stagiaire
 Supprimer un groupe, au hasard .. encore totox.
 groupdel totox
 Le groupe est supprimé du fichier /etc/group.
 Pour ajouter un utilisateur à un groupe
 Le plus simple est d'éditer le fichier /etc/group et d'ajouter une liste d'utilisateurs
(séparés par des virgules) sur la ligne du groupe (ou utiliser Linuxconf).

Manipulations
Il s'agit de créer un groupe nommé stagiaire dont les membres sont les comptes stagex.
On donnera ensuite à ce groupe des droits complets sur un répertoire partagé.
Comme root :
1. créer le groupe stagiaire:
2. groupadd stagiaire
3. ajouter quelques comptes stagex dans ce groupe
4. vérifier le résultat avec la commande groups
Visite des coulisses
 Tout ce qui concerne la gestion et l'authentification des utilisateurs est inscrit dans un
seul fichier /etc/passwd
 La gestion des groupes est assurée par /etc/group
 Les mots de passe cryptés sont maintenant placés dans /etc/shadow, par sécurité
lisible seulement par root.
Structure de /etc/passwd
Ce fichier comprend 7 champs, séparés par le symbole :
1. nom de connexion
2. ancienne place du mot de passe crypté

Ounissi Mounir 32
3. numéro d'utilisateur uid, sa valeur est le véritable identifiant pour le système Linux;
l'uid de root est 0, le système attribut conventionnellement un uid à partir de 500 aux
comptes créés.
4. numéro de groupe gid, dans lequel se trouve l'utilisateur par défaut; le gid de root
est 0, des groupes d'utilisateurs au delà de 500
5. nom complet, il peut être suivi d'une liste de renseignements personnels (cf chfn)
6. rép. personnel (c'est également le rép. de connexion)
7. shell, interprétateur de commandes (par défaut /bin/bash)
Structure de /etc/group
Ce fichier comprend 4 champs, séparés par le symbole :
1. nom du groupe
2. x pour remplacer un mot de passe non attribué maintenant
3. numéro de groupe, c-à-d l'identifiant gid
4. la liste des membres du groupe

Manipulations
Editer ces fichiers (utiliser l'utilitaire vi)
Examiner les lignes correspondant aux comptes créés : où se trouvent les rép. personnels ?
quel est leur groupe par défaut ?

Compléments
 La structure d'une ligne de /etc/passwd et de /etc/group
 login:x:uid:gid:commentaires:home:shell
 groupe:x:gid:liste-groupes-secondaires
 Options de la commande useradd (pour détails cf man useradd)
Nous avons jusqu'ici utilisé cette commande avec ses options par défaut.
La maitrise de cette commande est indispensable pour écrire des scripts de génération
automatique de comptes.
 Syntaxe : useradd [options] nom_login
 Exemple : useradd toto -u 1200 -p moi -g 520 -G groupes -s /bin/bash
Options :
-u uid pour fixer l'identifiant uid
-g groupe-primaire
fixe l'appartenance de l'utilisateur à une liste
-G liste
de groupes secondaires (séparateur , sans espace)
-s shell par défaut, attribution du shell par défaut bash
-c commentaire
-d rep. personnel par défaut dans le répertoire /home
-e date-expiration fixe la date d'expiration du compte (format MM/JJ/AA)
-m pour créer le répertoire personnel
 La recopie du répertoire /etc/skel est très important pour l'administrateur, car il
lui permet de configurer de façon uniforme les sessions de travail des utilisateurs.
C'est ainsi que tous les utilisateurs qui passe en mode graphique KDE hérite du même
bureau.
 La commande passwd Elle est chargée du cryptage du mot de
passe dans /etc/shadow Syntaxe :
 passwd [option] nom-login

Ounissi Mounir 33
Options

o --stdin, la commande abandonne son caractère inter-


actif habituel et examine son entrée standard pour
s'en servir comme mot de passe.
Très utile dans un script : echo mot | passwd --st-
din (attention tout caractère est significatif, y
compris les " ")
o -d , pour supprimer le mot de passe, l'utilisateur
pourra se connecter sans !
o -l , pour verrouiller le compte et empêcher sa
connexion.
o -u , pour déverrouiller.
 Connaitre l'uid et le gid de l'utilisateur courant
 Commande id
 uid=501(stage1) gid=501(stage1) groups=501(stage1),
504(stagiaire)
 Pour décrire un utilisateur : chfn
 Cette commande permet d'indiquer dans le champ numéro 5 du fichier/etc/passwd
différentes informations sur un utilisateur, son nom complet, son bureau, ses numeros
de téléphone (séparées par des virgules).

Manipulation
[toto1@p01 /] chfn
Changing finger information for toto1
Password : zig1
Name [toto1] : Monsieur TOTO
Office [] : professeur au lycee Papillon
Office Phone [] : 0199999999
Home Phone [] :

Cryptage des mots de passe

Pour des questions de sécurité, les mots de passe cryptés ne sont stockés dans
/etc/passwd qui doit etre accessible en lecture par tous
La commande /usr/sbin/pwconv est chargée de transférer les mots de passes
cryptés, dans /etc/shadow. Pour plus de détails , consulter man pwconv

IV) Manipulation des processus

kill -sig PID


Envoie le signal sig au processus de numéro PID. pour une liste des signaux. sig peut être soit
le numéro du signal, soit son
Nom (par exemple kill ­STOP 1023 est l’équivalent à de kill ­19 1023).
ps [-e][-l]
Affiche la liste des processus. L’option -l permet d’obtenir plus d’informations. L’option -e
permet d’afficher les processus de tous les utilisateurs.
ps affiche beaucoup d’informations. Les plus importante au début sont :

Ounissi Mounir 34
– UID : identité du propriétaire du processus ;
– PID : numéro du processus ;
– PPID : PID du père du processus ;
– NI : priorité (nice) ;
– S : état du processus (R si actif, S si bloqué, Z si terminé).
nice [-priorite] commande
Lance l’exécution de la commande en modifiant sa priorité. Permet par exemple de lancer un
processus de calcul en tâche de fond sans perturber les processus interactifs (éditeurs, shells
etc.), en lui affectant une priorité plus basse. Le noyau accorde moins souvent le processeur
aux processus de basse priorité.

Chapitre 4 : Utilitaires UNIX


Cette partie décrit quelques commandes utilitaires UNIX très pratiques. Ces programmes sont
livrés en standard avec toutes les versions d’UNIX.
Nous commençons par décrire l’utilisation de l’éditeur standard vi. Si vous avez accès à un
autre éditeur de texte, vous pouvez passer cette section.
I) L’éditeur vi
vi est un éditeur de texte “plein écran” (par opposition aux éditeurs “ligne” qui ne
permettaient que l’édition d’une ligne à la fois).
Comparé aux éditeurs modernes, vi est d’abord malcommode, mais il est assez puissant et
toujours présent sur les systèmes UNIX 1. Il est donc très utile d’en connaître le maniement de
base. Nous ne décrivons ici que les commandes et modes les plus utilisés, il en existe
beaucoup d’autres.
A un instant donné, vi est soit en mode commande, soit en mode insertion :
– mode commande : les caractères tapés sont interprétés comme des commandes d’édition.
vi démarre dans ce mode, il faut donc lui indiquer (commande ’i’) que l’on veut insérer du
texte ;
– mode insertion : les caractères sont insérés dans le texte édité. On peut quitter ce mode en
pressant la touche “ESC” (ou “Echap” sur certains claviers).
vi fichier édite fichier.
vi +n fichier commence à la ligne n.
vi -r fichier récupération du fichier après un crash.
Mouvements du curseur (en mode commande seulement) :
Touche Action
flèches Déplace curseur (pas toujours bien configuré).
ESPACE Avance à droite.
h Recule à gauche.
CTRL-n Descend d’une ligne.
CTRL-p Monte d’une ligne.
CTRL-b Monte d’une page.
CTRL-f Descend d’une page.
nG Va à la ligne n (n est un nombre).
Commandes passant en mode insertion :
Touche Commence l’insertion

Ounissi Mounir 35
i Avant le curseur.
I Au début de la ligne.
A A la fin de la ligne.
Autres commandes :
r Remplace le caractère sous le curseur.
x Supprime un caractère.
d$ Efface jusqu’à la fin de la ligne.
dd Efface la ligne courante.
/chaîne Cherche la prochaine occurrence de la chaîne.
?chaîne Cherche la précédente occurrence de la chaîne.
Quitter, sauvegarder : (terminer la commande par la touche “Entrée”)
:w Écrit le fichier.
:x Écrit le fichier puis quitte vi.
:q ! Quitte vi sans sauvegarder les changements.
! !commande Exécute commande shell sans quitter l’éditeur.

II) Commandes diverses

compress [fichier]
Compresse le fichier (pour gagner de l’espace disque ou accélérer une transmission réseau).
Le fichier est remplacé par sa version compressée, avec l’extension ’.Z’. Décompression avec
uncompress ou zcat.
date
Affiche la date et l’heure. Comporte de nombreuses options pour indiquer le format
d’affichage.
diff fichier1 fichier2
Compare ligne à ligne des deux fichiers texte fichier1 et fichier2, et décrit les transformations
à appliquer pour passer du premier au second. Diverses options modifient le traitement des
blancs, majuscules etc.
diff peut aussi générer un script pour l’éditeur ed permettant de passer de fichier1 à
fichier2 (utile pour fabriquer des programmes de mise à jour (“patchs”)).
file fichier
Essaie de déterminer le type du fichier (exécutable, texte, image, son,...) et l’affiche.
find [options]
Cette commande permet de retrouver dans un répertoire ou une hiérarchie de répertoires les
fichiers possédant certaines caractéristiques (nom, droits, date etc..) ou satisfaisant une
expression booléenne donnée. find parcourt récursivement une hiérarchie de fichiers. Pour
chaque fichier
rencontré, find teste successivement les prédicats spécifiés par la liste d’options, jusqu’au
premier qui échoue ou jusqu’à la fin de la liste.
Principales options :
-name nom le fichier à ce nom ;
-print écrit le nom du fichier (réussit toujours) ;
-exec exécute une commande. {} est le fichier courant. Terminer par ; .
-type (d : catalogue, f : fichier ordinaire, p : pipe, l : lien symbolique).
-newer fichier compare les dates de modification ;
-o ou ;
-prune si le fichier courant est un catalogue, élague l’arbre à ce point.
Exemples :
# Recherche tous les fichier nommes "essai"

Ounissi Mounir 36
# a partir de la racine
find / ­name essai ­print
# Recherche tout le fichier commencant par "ess"
# a partir du répertoire courant
find . ­name ’ess*’ ­print
# Affiche à l’écran le contenu de tous les fichiers.c
find . ­name ’*.c’ ­print ­exec cat ’{}’ \;
(L’écriture de ce dernier exemple est compliquée par le fait que le shell traite spécialement les
caractères *, {, et ; , que l’on doit donc entourer de quotes ’.)
head [-n] [fichier]
Affiche les n premières lignes du fichier. Si aucun fichier n’est spécifié, lit
sur l’entrée standard.
lpr [-Pnom-imprimante] [fichier]
Demande l’impression du fichier (le place dans une file d’attente). Si aucun fichier n’est
spécifié, lit sur l’entrée standard. L’impression d’un fichier sous Unix passe par un spooler
d’impression. Ce spooler est réalisé par un démon (c’est à dire un processus système qui
s’exécute en tâche de fond).
lpq [-Pnom-imprimante]
Permet de connaître l’état de la file d’attente associée à l’imprimante.
lprm [-Pnom-imprimante] numjob
Retire un fichier en attente d’impression. On doit spécifier le numéro du job, obtenu grâce à la
commande lpq.
man [n] commande
Affiche la page de manuel (aide en ligne) pour la commande. L’argument n permet de
spécifier le numéro de la section de manuel (utile lorsque la commande existe dans plusieurs
sections). Les numéros des sections sont :
1 (commandes utilisateur), 2 (appels systèmes), 3 (fonctions librairies C), 4
more [fichier]
Affiche un fichier page par page (aide en ligne, taper ’h’). Si aucun fichier n’est spécifié, lit
sur l’entrée standard.
tail [+n j -n] [fichier]
La forme tail +n permet d’afficher un fichier à partir de la ligne n. La forme tail ­n
affiche les n dernières lignes du fichier. Si aucun fichier n’est spécifié, lit sur l’entrée
standard.
tar options [fichier ou répertoire]
La commande tar permet d’archiver des fichiers ou une arborescence de fichiers, c’est à
dire de les regrouper dans un seul fichier, ce qui est très pratique pour faire des copies de
sauvegardes d’un disque, envoyer plusieurs fichiers en une seul fois par courrier électronique,
etc.
Pour créer une nouvelle archive, utiliser la forme
$ tar cvf nom­archive repertoire
Qui place dans le nouveau fichier “nom-archive” tous les fichiers situés sous le répertoire
indiqué. On donne généralement l’extension.tar aux fichiers d’archives.
Pour afficher le contenu d’une archive, utiliser
$ tar tvf nom­archive
Pour extraire les fichiers archivés, utiliser
$ tar xvf nom­archive

Ounissi Mounir 37
Les fichiers sont crées à partir des répertoires courant. Nombreuses autres options. Notons
que les noms de fichiers peuvent être remplacés par ­ pour utiliser l’entrée ou la sortie
standard (filtres), comme dans les exemples ci-dessous :
– Archivage d’un répertoire et de ses sous-répertoires dans un fichier archive.tar :
$ tar cvf archive.tar repertoire
– Archivage et compression au vol :
$ tar cvf ­ repertoire | compress > archive.tar.Z
– Pour afficher l’index de l’archive ci-dessus :
$ zcat archive.tar.Z | tar tvf ­
– Copie complète récursive d’un répertoire repert dans le répertoire destination :
$ tar cvf ­ repert | (cd destination; tar xvfp ­)
Les parenthèses sont importantes : la deuxième commande tar s’exécute ainsi dans le
répertoire de destination. Cette façon de procéder est supérieure à cp ­r car on préserve les
propriétaires,
Droits, et dates de modifications des fichiers (très utile pour effectuer des sauvegardes).
uncompress [fichier]
Décompresse un fichier (dont le nom doit terminer par .Z) compressé par compress.
wc [-cwl] [fichier ...]
Affiche le nombre de caractères, mots et lignes dans le(s) fichier(s). Avec l’option -c, on
obtient le nombre de caractères, avec -w, le nombre de mots (words) et avec -l le nombre de
lignes.
which commande
Indique le chemin d’accès du fichier lancé par “commande”.
who [am i]
Liste les utilisateurs connectés au système. La forme whoami donne l’identité de
l’utilisateur.
zcat [fichiers]
Similaire à cat, mais décompresse au passage les fichiers (ou l’entrée standard) compressés
par compress.
uuencode [fichier] nom
Utilisé pour coder un fichier en n’utilisant que des caractères ascii 7 bits (codes entre 0 et
127), par exemple pour le transmettre sur un réseau ne transmettant que les 7 bits de poids
faible.
uudencode lit le fichier (ou l’entrée standard si l’on ne précise pas de nom) et écrit la
version codée sur la sortie standard. Le paramètre nom précise le nom du fichier pour le
décodage par uudecode.
uudecode [fichier]
Décode un fichier codé par uuencode. Si l’argument fichier n’est pas spécifié, lit
l’entrée standard. Le nom du fichier résultat est précisé dans le codage (paramètre nom de
uuencode).
III) Filtres de texte

Les filtres sont des utilitaires qui prennent leurs entrées sur l’entrée standard, effectuent un
certain traitement, et fournissent le résultat sur leur sortie standard.
Notons que plusieurs utilitaires déjà présentés peuvent être vus comme des filtres (head, tail).
grep [option] motif fichier1 ::: fichiern
Affiche chaque ligne des fichiers fichieri contenant le motif motif. Le motif est une expression
régulière.
Options : -v affiche les lignes qui ne contiennent pas le motif.

Ounissi Mounir 38
-c seulement le nombre de lignes.
-n indique les numéros des lignes trouvées.
-i ne distingue pas majuscules et minuscules.
sort [-rn] [fichier]
Trie les lignes du fichier, ou l’entrée standard, et écrit le résultat sur la sortie. L’option -r
renverse l’ordre du tri, l’option -n fait un tri numérique.
tr [options] chaine1 chaine2
Recopie l’entrée standard sur la sortie standard en remplaçant tout caractère de chaine1 par le
caractère de position correspondante dans chaine2.
uniq [-cud] fichier
Examine les données d’entrée ligne par ligne et détermine les lignes dupliquées qui sont
consécutives : -d permet de retenir que les lignes dupliquées.
-u permet de retenir que les lignes non dupliquées. -c permet de compter l’indice de répétition
des lignes.

IV) Manipulation des processus

kill -sig PID


Envoie le signal sig au processus de numéro PID. pour une liste des signaux. sig peut être soit
le numéro du signal, soit son
Nom (par exemple kill ­STOP 1023 est l’équivalent à de kill ­19 1023).
ps [-e][-l]
Affiche la liste des processus. L’option -l permet d’obtenir plus d’informations. L’option -e
permet d’afficher les processus de tous les utilisateurs.
ps affiche beaucoup d’informations. Les plus importante au début sont :
– UID : identité du propriétaire du processus ;
– PID : numéro du processus ;
– PPID : PID du père du processus ;
– NI : priorité (nice) ;
– S : état du processus (R si actif, S si bloqué, Z si terminé).
nice [-priorite] commande
Lance l’exécution de la commande en modifiant sa priorité. Permet par exemple de lancer un
processus de calcul en tâche de fond sans perturber les processus interactifs (éditeurs, shells
etc.), en lui affectant une priorité plus basse. Le noyau accorde moins souvent le processeur
aux processus de basse priorité.

Ounissi Mounir 39
Chapitre 5 : Introduction aux scripts BASH

I) La programmation shell
 Un script bash est fichier de type texte contenant une suite de commandes shell,
exécutable par l'interpréteur (ici le programme /bin/bash), comme une commande
unique. Un script peut être lancé en ligne de commande, comme dans un autre script.
 Mais il s'agit bien plus qu'un simple enchaînement de commande : on peut définir des
variables et utiliser des structures de contrôle, ce qui lui confère le statut de langage de
programmation interprété et complet.
 Le langage bash gère notamment :
o la gestion des entrées-sorties et de leur redirection
o des variables définies par le programmeur et des variables systèmes
o le passage de paramètres
o des structures conditionnelles et itératives
o des fonctions internes
I –1 Saisie du script
 Utiliser vi de préférence à mc qui ne traite pas les accents (mais mc est bien pratique !)
 Les lignes commençant par le caractère dièse # sont des commentaires. En insérer
abondamment !
 Le script doit débuter par l'indication de son interpréteur écrite sur la première ligne :
#!/bin/bash.
En fait si le shell par défaut est bash, cette ligne est superflue
 Exemple
 #!/bin/bash
 # script bonjour
 # affiche un salut à l'utilisateur qui l'a lancé
 # la variable d'environnement $USER contient le nom de login
 echo ---- Bonjour $USER -----
 # l'option -n empêche le passage à la ligne
 # le ; sert de séparateur des commandes sur la ligne
 echo -n "Nous sommes le " ; date
 # recherche de $USER en début de ligne dans le fichier passwd

Ounissi Mounir 40
 # puis extraction de l'uid au 3ème champ, et affichage
 echo "Ton numéro d'utilisateur est " $(grep "^$USER" /etc/passwd |
cut -d: -f3)
I – 2 Exécution du script

 Il est indispensable que le fichier script ait la permission x (soit exécutable). Lui
accorder cette permission pour tous ses utilisateurs avec chmod :
chmod a+x bonjour
 Pour lancer l'exécution du script, taper./bonjour, ./ indiquant le chemin, ici le
répertoire courant. Ou bien indiquer le chemin absolu à partir de la racine. Ceci dans le
cas où le répertoire contenant le script n'est pas listé dans le PATH
 Si les scripts personnels sont systématiquement stockés dans un rép précis, par
exemple /home//bin, on peut ajouter ce chemin dans le PATH.
Pour cela, il suffit d'ajouter la ligne suivante dans /etc/skel/.bash_profile, qui est
recopié dans chaque répertoire dont le rôle est d'affiner le profil personnel du shell de
chaque utilisateur.
# bash_profile
.....................
#user specific environment and statup programs
PATH=$PATH:$HOME/bin
 Mais on peut plus simplement s'initier au langage Bash, directement en dialoguant
avec l'interpréteur.
Si on entre une instruction incomplète en ligne de commande, l'interpréteur passe à la
ligne suivante en affichant le prompt > et attend la suite de l'instruction (pour quitter
Ctrl-C).

 Mise au point, débogage


Exécution en mode "trace" (-x) et en mode "verbeux" (-v) sh -x ./bonjour Pour aider à la
mise au point d'un script, on peut insérer des lignes temporaires : echo $var pour afficher la
valeur de la variable
exit 1 pour forcer l'arrêt du script à cet endroit

 On peut passer des arguments à la suite du nom du script, séparés par des espaces. Les
valeurs de ces paramètres sont récupérables dans le script grâce aux paramètres de position
$1, $2 .. mais, contrairement aux langages de programmation classiques, ils ne peuvent pas
être modifiés.
Exemple
#!/bin/bash
# appel du script : ./bonjour nom prenom
if [ $# = 2 ]
then
echo "Bonjour $2 $1 et bonne journée !"
else
echo "Syntaxe : $0 nom prenom"
fi

II) Entrées-sorties

Ce sont les voies de communication entre le programme bash et la console :

Ounissi Mounir 41
 echo, affiche son argument texte entre guillemets sur la sortie standard, c à d l'écran.
La validation d'une commande echo provoque un saut de ligne.
echo "Bonjour à tous !"
 On peut insérer les caractères spéciaux habituels, qui seront interprétés seulement si
l'option -e suit echo
\n (saut ligne), \b retour arrière), \t (tabulation), \a (alarme), \c (fin sans saut de ligne)
 echo "Bonjour \nà tous !"
 echo -e "Bonjour \nà tous !"
 echo -e "Bonjour \nà toutes \net à tous ! \c"
 read, permet l'affectation directe par lecture de la valeur, saisie sur l'entrée standard au
clavier
read var1 var2 ... attend la saisie au clavier d'une liste de valeurs pour les
affecter, après la validation globale, respectivement aux variables var1, var2 ..
 echo "Donnez votre prénom et votre nom"
 read prenom nom
 echo "Bonjour $prenom $nom"

III) Les variables BASH

III – 1 Variables programmeur

De façon générale, elles sont de type texte. On distingue les variables définies par le
programmeur et les variables systèmes

 syntaxe : variable=valeur
Attention ! le signe = NE DOIT PAS être entouré d'espace(s)
On peut initialiser une variable à une chaine vide :
chaine_vide=
 Si valeur est une chaine avec des espaces ou des caractères spéciaux, l'entourer de "
" ou de ' '
 Le caractère \ permet de masquer le sens d'un caractère spécial comme " ou '
 chaine=Bonjour à tous
 echo $chaine
 Référence à la valeur d'une variable : faire précéder son nom du symbole $
 Pour afficher toutes les variables : set
 Pour empêcher la modification d'une variable, invoquer la commande readonly
 Substitution de variable
Si une chaine contient la référence à une variable, le shell doit d'abord remplacer
cette référence par sa valeur avant d'interpréter la phrase globalement. Cela est
effectué par l'utilisation de " ", dans ce cas obligatoire à la place de ' '. Exemples

n=123 ;
echo "la variable \$n vaut $n"
salut="bonjour à tous !"
echo "Alors moi je dis : $salut"
echo 'Alors moi je dis : $salut'
echo "Alors moi je dis : \"$salut\" "
readonly salut
salut="bonjour à tous, sauf à mounir"
echo "Alors moi je dis : $salut"

Ounissi Mounir 42
 Variables exportées
Toute variable est définie dans un shell. Pour qu'elle devienne globale elle doit être
exportée par la commande :
export variable
export --> Pour obtenir la liste des variables exportées
 Opérateur {} dans les variables
Dans certains cas en programmation, on peut être amené à utiliser des noms de
variables dans d'autres variables. Comme il n'y a pas de substitution automatique, la
présence de {} force l'interprétation des variables incluses.
Voici un exemple :

user="/home/stage"
echo $user
u1=$user1
echo $u1 --> ce n'est pas le résultat escompté !
u1=${user}1
echo $u1

III – 2 Variables d'environnement

Ce sont les variables systèmes dont la liste est consultable par la commande env | less
Les plus utiles sont $HOME, $PATH, $USER, $PS1, $SHELL, $ENV, $PWD ..

Exemple (bien sûr on est pas forcément connecté sous le pseudo mounir)
[mounir@pxx mounir]$ moi=Mounir
[mounir@pxx mounir]$ p="Je m'appelle $moi"
[mounir@pxx mounir]$ echo Aujourd\'hui, quel jour sommes nous ? ; read jour
[mounir@pxx mounir]echo aujourd'hui $jour, $p sous le nom $USER,
est connecté à la station $HOSTNAME
III – 3 Variables prédéfinies spéciales
Elles sont gérées par le système et s'avèrent très utiles dans les scripts. Bien entendu, elles ne
sont accessibles qu'en lecture.
Ces variables sont automatiquement affectées lors d'un appel de script suivi d'une liste de
paramètres. Leurs valeurs sont récupérables dans $1, $2 ...$9
C'est la valeur de sortie de la dernière commande.
$?
Elle vaut 0 si la commande s'est déroulée sans pb.
$0 Cette variable contient le nom du script
$1 à $9 Les (éventuels) premiers arguments passés à l'appel du script
$# Le nombre d'arguments passés au script
$* La liste des arguments à partir de $1
$$ le n° PID du processus courant
$! le n° PID du processus fils
ls -l
echo $? ----> 0
ifconfig ttyS1
echo $? ---> 1
IV) Passage de paramètres

Ounissi Mounir 43
On peut récupérer facilement les compléments de commande passés sous forme d'arguments
sur la ligne de commande, à la suite du nom du script, et les utiliser pour effectuer des
traitements.
Ce sont les variables système spéciales $1 , $2 .... $9 appelées paramètres de position.
Celles-ci prennent au moment de l'appel du script, les valeurs des chaînes passées à la suite du
nom du script (le séparateur de mot est l'espace, donc utiliser si nécessaire des "").
A noter que :
 le nombre d'argument est connu avec $#
 la liste complète des valeurs des paramètres (au delà des 9 premières) s'obtient avec $*
 le nom du script reste recopié dans $0
IV – 1 La commande shift
Il n'y a que 9 paramètres de position de $1 à $9, et s'il y a davantage de paramètres
transmis, comment les récupérer ?
shift effectue un décalage de pas +1 dans les variables $ : $1 prend la valeur de $2, etc...
Exemple
a=1 ; b=2 ; c=3 ; set a b c
echo somme10 1 2 3 4 5 6 7 8 9 10
echo $1, $2, $3
IV – 2 La commande set
Exemple
a=1 ; b=2 ; c=3
set a b c
echo $1, $2, $3
# les valeurs de a, b, c sont récupérées dans $1, $2, $3

IV – 3 La commande test
IV – 3 – 1 Généralités
Comme son nom l'indique, elle sert à vérifier des conditions. Ces conditions portent sur des
fichiers (le plus souvent), ou des chaînes ou une expression numérique.
Cette commande courante sert donc à prendre des (bonnes) décisions, d'où son utilisation
comme condition dans les structures conditionnelles if.. then ..else, en quelque sorte à
la place de variables booléennes ... qui n'existent pas.
IV – 3 – 2 Syntaxe
 test expression
 [ expression ] attention aux espaces autour de expression
IV – 3 - 3 Valeur de retour
 Rappels
On sait que toute commande retourne une valeur finale au shell : 0 pour lui indiquer si
elle s'est déroulée normalement ou un autre nombre si une erreur s'est produite.
Cette valeur numérique est stockée dans la variable spéciale $?
 La commande test, de même, retourne 0 si la condition est considérée comme vraie,
une valeur différente de 0 sinon pour signifier qu'elle est fausse.
IV – 3 - 4 Tester un fichier
 Elle admet 2 syntaxes ( la seconde est la plus utilisée) :
test option fichier
[ option fichier ]
 Tableau des principales options
option signification quant au fichier
-e il existe
-f c'est un fichier normal

Ounissi Mounir 44
-d c'est un répertoire
-r | -w | -x il est lisible | modifiable | exécutable
-s il n'est pas vide
 Exemples
 [ -s $1 ]
 vrai (renvoie 0) si le fichier passé en argument n'est pas vide
 [ $# = 0 ] le nombre d'arguments
 est 0
 [ -w fichier ] le fichier est-il modifiable ?
 [mounir@p00]$ [ -r "/etc/passwd" ] mounir peut-il lire le fichier
/etc/passwd ?
 [mounir@p00]$ echo $? --> 0 (vrai)
 [mounir@p00]$ [ -r "/etc/shadow" ] mounir peut-il lire le fichier
/etc/shadow ?
 [mounir@p00]$ echo $? --> 1 (faux)
 [mounir@p00]$ [ -r "/etc/shadow" ] || echo "lecture du fichier
interdite"

IV – 3 - 5 Tester une chaine
 [ option chaine ]

Option signification
-z | -n la chaine est vide / n'est pas vide
= | != les chaînes comparées sont identiques | différentes
 Exemples
 [ -n "mounir" ] ; echo $? affiche la valeur renvoyée 0
 ch="Bonjour" ; [ "$ch" = "bonjour" ] ; echo $? affiche 1
 [ $USER != "root" ] && echo "l'utilisateur n'est pas le \"root\" !"
IV – 3 - 6 Tester un nombre
 [ nb1 option nb2 ]
Il y a d'abord un transtypage automatique de la chaine de caractères en nombre
option signification
-eq | -ne égal | différent
-lt | -gt strict. inf | strict. sup
-le | -ge inf ou égal | sup ou égal
 Exemples
 a=15 ; [ "$a" -lt 15 ] ; echo $?
IV – 3 - 7 Opérations dans une commande test

option valeur
[ expr1 -a expr2 ] (and) 0 si les 2 expr sont vraies
[ expr1 -o expr2 ] (or) 0 si l'une des 2 expr est vraie
[ ! expr1 ] négation
 Exemples
 Quel résultat ? envisager 2 cas ...
 f="/root" ; [ -d "$f" -a -x "$f" ] ; echo $?
 note=9; [ $note -lt 8 -o $note -ge 10 ] && echo "tu n'es pas
convoqué(e) à l'oral"

Ounissi Mounir 45
V) Structures conditionnelles

V – 1 Structure conditionnelle simple


if suite-de-commandes
then
# séquence exécutée si suite-de-commandes rend une valeur 0
bloc-instruction1
else
# séquence exécutée sinon
bloc-instruction2
fi
Attention ! si then est placé sur la 1ère ligne, séparer avec un ;
if commande; then
.....

Exemples
mounir possède t-il un compte ? On teste la présence d'une ligne commençant par mounir
dans /etc/passwd ( >/dev/null pour détourner l'affichage de la ligne trouvée)
if grep "^mounir" /etc/passwd > /dev/null
then
echo "Mounir a déjà un compte"
fi
Si mounir a eu une bonne note, on le félicite
note=17
if [ $note -gt 16 ] ---> test vrai, valeur retournée : 0
then echo "Très bien !"
fi
Avant d'exécuter un script, tester son existence.
Extrait de $HOME/.bash_profile
if [ -f ~/.bashrc ]
then
.~/.bashrc
fi
V – 2 Structure Conditionnelles imbriquées

Pour imbriquer plusieurs conditions, on utilise la construction :


if commande1
then
bloc-instruction1
elif commande2
then
bloc-instruction2
else
# si toutes les conditions précédentes sont fausses
bloc-instruction3
fi
Exemples
mounir a t-il fait son devoir lisiblement ?
fichier=/home/mounir/devoir1.html
if [ -f $fichier -a -r $fichier ]
then
echo "je vais vérifier ton devoir."
elif [ ! -e $fichier ]
then
echo "ton devoir n'existe pas !"

Ounissi Mounir 46
else
echo "je ne peux pas le lire !"
fi
Supposons que le script exige la présence d'au moins un paramètre, il faut tester la valeur
de $#, est-elle nulle ?
if [ $# = 0 ]
then
echo "Erreur, la commande exige au moins un argument .."
exit 1
elif [ $# = 1 ]
then
echo "Donner le second argument : "
read arg2
fi

V – 3 Choix multiples
case valeur in
expr1) commandes ;;
expr2) commandes ;;
...
esac

Exemples
Supposons que le script doive réagir différemment selon l'user courant; on va faire
plusieurs cas selon la valeur de $USER
case $USER in
root) echo "Mes respects M le $USER" ;;
jean | stage?) echo "Salut à $USER ;;
mounir) echo "Fais pas le zigo$USER \!" ;;
esac
Le script attend une réponse oui/non de l'utilisateur
read reponse
case $reponse in
[yYoO]*) ...... ;;
[nN]*) .......;;
esac
read langue
case $langue in
francais) echo Bonjour ;;
anglais) echo Hello ;;
1. espagnol) echo Buenos Dias ;;
esac
case $param in
0|1|2|3|4|5|6|7|8|9 ) echo $param est un chiffre ;;
[0-9]*) echo $param est un nombre ;;
[a-zA-Z]*) echo $param est un nom ;;
*) echo $param de type non prevu ;;
esac
Un vrai exemple, extrait du script smb (/etc/rc.d/init.d/smb)
# smb attend un paramètre, récupéré dans la variable $1
case "$1" in
start)
echo -n "Starting SMB services: "
deamon smbd -D
echo
echo -n "Starting NMB services: "
deamon nmbd -D
...;;
stop)

Ounissi Mounir 47
echo -n "Shutting SMB services: "
killproc smbd
....
esac

VI) Structures itératives


VI – 1 Boucle for
Syntaxe
for variable [in liste]
do
commandes (utilisant $variable)
done
Fonctionnement
Ce n'est pas une boucle for contrôlée habituelle fonctionnant comme dans les langages de
programmation classiques (utiliser pour cela une boucle while avec une variable
numérique).
La variable parcourt un ensemble de fichiers donnés par une liste ou bien implicitement et
le bloc commandes est exécuté pour chacune de ses valeurs.
Les mots-clés do et done apparaissent en début de ligne ( ou après un ;)
La liste peut être explicite :
for nom in jean mounir stage1
do
echo "$nom, à bientôt"
done
La liste peut être calculée à partir d'une expression modèle
# recopier les fichiers perso. de mounir dans /tmp/mounir
for fich in /home/mounir/*
do
cp $fich tmp/mounir
done
Si aucune liste n'est précisée, les valeurs sont prises dans la variable système $@, c'est-à-
dire en parcourant la liste des paramètres positionnels courants.
# pour construire une liste de fichiers dans $@
cd /home/stagex ; set * ; echo $@
for nom in $@
do echo $nom
done
Expliquer les exemples suivants
for nom in /home/stage[1-9]
do
echo "$nom, tout va bien ?"
done
for i in /home/*/* ; do echo $i; done
for i in /dev/tty[1-7] ;
do setleds -D +numecho $i
done
for x in /home/st*
do
echo $x >> liste-rep-stage.txt
done
less liste-rep-stage.txt

for x in $(grep "^st" /etc/passwd | cut -d: -f6)


do
echo $x; echo $x >> $HOME/tmp/liste-rep-stage.txt
done
less liste-rep-stage.txt

Ounissi Mounir 48
VI – 2 Boucle while

La répétition se Voici 2 exemples à comparer


while liste-commandes poursuit TANT QUE echo -e "Entrez un nom de
do la dernière commande fichier"
commandes read fich
de la liste est vraie (c while [ -z "$fich" ]
Done
à dire renvoie un code do
de retour nul) echo -e "Saisie à recommencer"
read fich
done
La répétition se while
until liste-commandes echo -e" Entrez un nom de
poursuit JUSQU'A fichier"
do
commandes CE QUE la dernière read fich
done commande de la liste [ -z "$fich" ]
devienne vraie do
echo -e "Saisie à recommencer"
done
Exemples à tester
# Pour dire bonjour toutes les secondes (arrêt par CTRL-C)
while true ;
do
echo "Bonjour M. $USER"
sleep 1
done
Lecture des lignes d'un fichier pour traitement : noter que la redirection de l'entrée de la
commande while .. do .. done est placée à la fin
fich=/etc/passwd
while read ligne
do
echo $ligne
.......
done < $fich

VI – 3 Sortie et reprise de boucle

break placé dans le corps d'une boucle, provoque une sortie définitive cette boucle.
continue permet de sauter les instructions du corps de la boucle (qui suivent continue) et de
"continuer" à l'itération suivante.
Pour les boucles for, while et until, continue provoque donc la réévaluation immédiate
du test de la boucle.
Exemples importants
Boucle de lecture au clavier arrêtée par la saisie de stop
#!/bin/bash
# syntaxe : lecture.sh
texte=""
while true
do
read ligne
if [ $ligne = stop ]
then break
else texte="$texte \n$ligne"
fi
done
echo -e $texte
Lecture des lignes d'un fichier

Ounissi Mounir 49
fich="/etc/passwd"
grep "^stage" $fich | while true
do
read ligne
if [ "$ligne" = "" ] ; then break ; fi
echo $ligne
done

VII) Fonctions

2 syntaxes
 function nom-fct {
bloc d'instructions
}
 nom-fct() {
bloc d'instructions
}
 Exemple
En connexion root, on doit relancer les "démons", si on a modifié un fichier de
configuration.
Par exemple /etc/rc.d/init.d/smb contient la commande deamon smbd -D ,
pourtant à l'essai deamon est une commande inconnue !
Reportons-nous au début du fichier, le script /etc/rc.d/init.d/functions y est
appelé. Celui-ci contient la fonction : daemon() { .....
 passage d'arguments
Le mécanisme est le même que vis à vis d'un script
 variables locales
Dans le corps de la fonction, on peut définir et utiliser des variables déclarées locales,
en les introduisant avec le le mot-clé local

VIII) Commandes diverses

Ne pas confondre la syntaxe $((expresion arithmétique)) avec la substitution de


commande $(commande)
Les priorités sont gérées par une parenthèse habituelle
echo $((30+2*10/4))
echo $(( (30+2) * (10-7) /4 )).

tr
 Cette commande de filtre permet d'effectuer des remplacements de caractères dans une
chaîne.
 Par exemple pour transformer une chaîne en minuscules
 chaine="Bonjour, comment allez-vous aujourd'hui ?"
echo $chaine | tr 'A-Z' 'a-z'
 Pour permettre l'utilisation de la commande set (voir ci-dessous), il est nécessaire
que le séparateur de champ sur une ligne soit l'espace, et non pas par exemple :
Exemple : créer un fichier passwd.txt qui introduit un espace à la place de ":" Dans
une copie de /etc/passwd
cat passwd | tr ":" " " > passwd.txt .
Set

Ounissi Mounir 50
Cette commande interne est très pratique pour séparer une ligne en une liste de mots, chacun
de ces mots étant affecté à une variable positionnelle. Le caractère de séparation est l'espace.
# soit une chaine ch qui contient une liste de mots
c="prof eleve classe note"
# set va lire chaque mot de la liste et l'affecter aux paramètres de
position
set $c ; echo $1 $2 $3 $4
shift ; echo $1 $2 $3 $4
Le langage bash est inadapté aux calculs numériques. Mais si vraiment on veut calculer (sur
des entiers) ..
Exemple : calcul des premières factorielles (attention, il y a rapidement un dépassement de
capacité)
declare -i k ; k=1 ; p=1
while [ $k -le 10 ]
do echo "$k! = " $((p=$p * $k)) ; k= $k+1
done
Idée (saugrenue !) : écrire le script somme-entiers.sh pour calculer la somme 1+2+..+n, où la
valeur de n est passée en argument

eval
 Cette commande ordonne l'interprétation par le shell de la chaine passée en argument.
On peut ainsi construire une chaine que l'appel à eval permettra d'exécuter comme
une commande !
 Exemple
 message="Quelle est la date d'aujourd'hui ?
 set $message
 echo $# ---> le nombre de mots est 6
 echo $4 ---> affiche la chaine "date"
 eval $4 ---> interpréte la chaine "date" comme une commande, donc...
 Il est souvent pratique de construire une chaine dont la valeur sera égale au libellé d'un
enchaînement de commandes (par ;). Pour faire exécuter ces commandes contenues
dans la chaine, on la passe comme argument de la commande eval
 exemple 1
 liste="date;who;pwd" ( ' ' ou " " obligatoires sinon le ; est un
séparateur de commandes)
 eval $liste
 ---> exécute bien les 3 commandes
 exemple 2
Soit la chaine $user qui contient une information sur un compte à créer. S'il utilise un
autre séparateur que ";" on fait appel à tr d'abord
 user="login=mounir ; mdp=moi ; nom='Monsieur Mounir' ; groupe=profs"
 eval $user
 echo $login $mdp $nom $groupe
 useradd -G $groupe $login
 echo $mdp | (passwd --stdin $login)

Ounissi Mounir 51
ANNEXE

L'éditeur de texte

Vi (en fait vim) est par défaut installé sur l'ensemble des machines sous Linux, voilà pourquoi
il est nécessaire de connaître un petit peu son fonctionnement.
VI dispose de deux modes. Le mode commande pour passer des commandes (sauver, quitter,
déplacer, etc...) et le mode insertion pour saisir votre texte. Par défaut le démarrage se fait en
mode commande, pour passer en mode insertion utiliser la touche i. Vous devez alors avoir en
bas de l'écran un INSERT. Pour revenir en mode commande taper sur la touche Echap.
Au lancement de vi si vous ne donnez pas de nom de fichier celui-ci sera créé. Sinon lancer vi
suivi du nom du fichier.
Voici les principales commandes :
Commandes Effet
:q! Pour quitter vi sans enregistrer
Enregistre le fichier, si celui-ci n'a
:w! jamais été enregistré vi indique un no
file name
Quitter Pour enregistrer le fichier dans le
Sauvegarder :w répertoire /home/chezmoi avec comme
non monfichier. vi ne rajoute pas de
/home/chezmoi/monfic
terminaison comme le ferai Notepad
hier
par exemple. Attention aux
majuscules/minuscules.
:wq! ou ZZ ou :x! Enregistre et quitte
Permet d'annuler le dernier
changement. Avec vim il est possible
U
d'utiliser plusieurs fois de suite cette
commande.
Annulation
Annule les modifications et reprend la
dernière version enregistrée. En fait
:e!
recharge la dernière version
sauvegardée de votre fichier.
Déplacement H Déplacement du curseur de 1 caractère
à gauche

Ounissi Mounir 52
Déplacement de 4 caractères vers la
gauche.
4h (idem pour j, k, l,
Cela marche aussi pour les autres
w, b,e)
touches de déplacement.
Vous n'avez pas besoin des :
Déplacement du curseur de 1 caractère
J
vers le bas
Déplacement du curseur de 1 caractère
K
vers le haut
Déplacement du curseur de 1 caractère
L
à droite
Déplace le curseur au début du mot
W
suivant
Déplace le curseur au début du mot
B
courant ou précédent
Déplace le curseur à la fin du mot
E
suivant
X (Touche Effacement
Efface le caractère à gauche du curseur
arrière)
X (Touche Delete) Efface le caractère sous le curseur
Supprime une ligne complète au sens
Dd
vi
Supprime tous les caractères de la
D$ ou D
ligne placés après le curseur
Suppression Supprime tous les caractères de la
D0
ligne placés avant le curseur
Commande Supprime les caractères d'un mot se
commence Dw trouvant après le curseur y compris
par d l'espace
Supprime les caractères se trouvant
DE après le curseur. dE et dw sont presque
identiques.
Db Supprime le début du mot
Supprime les deux mots placés avant
2db (voir aussi 3dd, le curseur. Le fait de placer un chiffre
4D,...etc) avant la commande marche pour les
autres commandes.
Copier Yy ou Y Copie une ligne compléte
Copie tous les caractères de la ligne
Commande Y$
placés après le curseur
commence
par y Copie tous les caractères de la ligne
Y0
placés avant le curseur
Yw (voir aussi yE) Copie les caractères se trouvant après
le curseur

Ounissi Mounir 53
Yb Copie le début du mot
Place ce qui a été copié après le
P
curseur
Place ce qui a été copié avant le
P
curseur
Place 3 fois ce qui a été copié après le
3p (7P)
curseur, ou 7 fois avant
Pour déplacer on supprime puis on
utilise p ou P. Seule la dernière
Déplacer dd puis p ou P
suppression est prise en compte. On
peut aussi utiliser y$, y0, ....
Ecrit 3 fois le mot coucou à partir du
Répétition 3icoucou puis echap
curseur
Recherche le mot micro et s'arrête au
premier trouvé. Attention le résultat
/micro
donnera aussi Microsoft,
microcosme....
/ Entrée Répète la recherche vers le bas
? Entrée Répète la recherche vers le haut
Recherche tous les mots micro, macro,
Microsoft,...
Rechercher Le. Représente n'importe quel
/m.cro*
caractère y compris l'espace.
Le * représente n'importe quel nombre
de caractères.
Ne recherche que micro et macro. Il ne
peut y avoir que un i ou un a après le
/m[ia]cro m.
Utiliser [^ia] pour avoir les mots sans
le i et le a, par exemple mocro..!
Recherche et supprime micro
D /micro (attention on supprime aussi
microsoft,...)
Remplace Microsoft par linux dans
tout le texte, sauf si microsoft existe
:g/microsoft/s//linux
Remplacer deux fois de suite dans la même ligne,
seul alors le premier est remplacé.
:g/microsoft/s//linux/c Idem mais demande confirmation
Idem mais le g permet de remplacer
:
aussi tous les microsoft rencontrés
g/microsoft/s//linux/gc
dans la même ligne.

Remarques : en mode INSERT (insertion) il est toujours possible d'utiliser les commandes
flèches haut, bas, gauche, droite pour se déplacer, et Suppr (ou Delete), Effacement arrière,
mais aussi la touche Insert pour l'insertion.

Ounissi Mounir 54
:help vous permettra d'avoir l'aide de vi. Constatez que le sujet est infini. Cela n'est pas le but
de cette petite doc.

Installation d'applications avec RPM

 L'utilitaire RPM (=RedHat Package Manager) gère une base de données des
applications déjà installées. Il permet d'installer (et de désinstaller) facilement les
nouvelles applications qui sont disponibles sous forme d'un fichier "paquetage". De
plus, pendant une mise à jour RPM conserve les fichiers de configuration déjà
présents.
 Syntaxe des paquetages
La syntaxe générale des paquetages à installer sur les machines à base de processeur
Intel est nom.version.i386.rpm
Pour connaître toutes les (nombreuses) options, voir man rpm
 Pour utiliser la commande rpm de façon aisée et transparente, il est recommandé de
passer par l'utilitaire graphique KPackage
Mais le recours à la ligne de commande s'avère parfois indispensable, si on ne dispose
pas de serveur X, ou si KPackage n'est pas installé !
 Principales options en ligne de commande
o rpm -q nomfichier.rpm , pour obtenir de l'information
Cette commande suppose la connaissance exacte du nom du paquetage (y
compris respect de la casse). Sinon utiliser la commande rpm -qa | grep -i
nom
o rpm -q nomfichier.rpm donne le numéro de version du programme
s'il est installé, sinon renvoie le message "package ... is not installed"
o rpm -qa | less donne la liste des programmes rpm installés
o rpm -qa | grep kernel pour chercher les programmes du noyau
o rpm -ql kernel | less donne la liste de tous les fichiers inclus dans
les paquetages désignés, en particulier les modules installés dans
/lib/modules/...
o rpm -i nomfichier.rpm, commande générale d'installation
o rpm -i cette commande, réservée à root, décompresse les
programmes en les installant dans les bons répertoires.
o Les options v et h, facultatives, permettent de voir l'état d'avancement
de l'installation.
o rpm -ivh -- nodeps nomfichier.rpm, pour contourner le refus
d'installer en raison de dépendances non satisfaites.
o rpm -ivh -- force nomfichier.rpm, pour forcer l'installation en
cas de conflit avec une version déjà installée
o Exemple : pour installer les HOWTO en français, monter le cd-rom, aller
dans /Mandrake/RPMS/, et passer la commande rpm -ivh howto-
french-*
o rpm -U nomfichier.rpm, commande de mise à jour d'un paquetage déjà
installé.
L'ancienne version est d'abord retirée, tout en préservant les fichiers de
configuration
o rpm -e nomfichier.rpm, pour désinstaller (e=extract) un programme.
Cette commande contrôle les dépendances, et signale les autres programmes

Ounissi Mounir 55
qui en ont besoin. Donc, attention à ne pas désinstaller des fichiers en
dépendance.
o rpm -V nomfichier.rpm, cette commande compare les fichiers installés avec
les fichiers d'origine du paquetage, pour vérifier que tous les fichiers d'un
programme sont présents et pour connaître ceux qui ont été modifiés depuis

Sauvegarde et archivage avec tar

Généralités

La commande tar (=Type ARchive) est une ancienne commande Unix qui permet
aisément d'archiver, c'est-à-dire de réaliser la sauvegarde d'un ensemble de fichiers en
un seul fichier, que l'on peut également compresser. Certaines applications et des
mises à jour (les noyaux Linux notamment) ne sont livrées que sous forme soit
binaire, soit de source à compiler, dans ce format (bien que les applications soient de
plus en plus disponible pré compilé, prêtes à l'emploi, sous format .rpm)

Syntaxe

tar options fichiers

fichiers :
désigne un ensemble de fichiers ou toute une arborescence précédée d'un chemin
absolu (à partir de /) ou relatif. Il est recommandé d'indiquer un chemin absolu qui
sera conservé dans l'archive et permettra ensuite un dés archivage correctement
positionné (sinon il y a installation conformément au chemin relatif conservé, ce qui
nécessiterait un exact positionnement dans le système de fichiers).

options :
Les 3 premières -c -x -t spécifient les 3 types d'actions de la commande

o -x extraire le contenu d'une archive


o -c créer une nouvelle archive
o -t afficher seulement la liste du contenu de l'archive, sans
l'extraire
o -f fichier indiquer le nom du fichier archive
o -v mode bavard
o -z compresser ou décompresser en faisant appel à l'utilitaire gzip
o -y compresser ou décompresser avec l'utilitaire bgzip2
o --help aide
o -B pour éviter le blocage en utilisant un pipe

Utilisation et exemples

Création
tar -cvf sauve.mounir.tar /home/mounir effectue la sauvegarde de
tous les fichiers du répertoire /home/mounir dans le fichier
sauve.mounir.tar placé dans le rép. Courant
tar -cvf /tmp/sauve.mounir.tar /home/mounir idem, mais le

Ounissi Mounir 56
fichier archive est placé dans le rép. /tmp
tar -c /home/mounir > sauve.mounir.tar variante de la commande
précédente
tar -cvf sauve.mounir.tar /home/mounir
tar -cvzf sauve.mounir.tar.gz /home/mounir effectue une
compression en plus

Listage

tar -tvf sauve.mounir.tar pour connaître l'arborescence regroupée


dans le fichier archive, en particulier la place où sera installée son contenu lors des
dés archivage.
L'utilitaire mc, avec sa fonction d'édition F3, permet d'effectuer le même listage de
l'archive

Extraction
tar -xvf sauve.mounir.tar exécute les dés archivage dans le répertoire
courant.
Si l'archive à été créé par tar -cvf sauve.mounir.tar
/home/mounir, il faut se placer à la racine / pour restaurer exactement le rép.
perso de mounir.
Décompresse et dés archive
tar -xvfz sauve.tar.gz home/mounir/tmp ne dés archive dans
l'archive, que le rép. désigné

Compression avec gzip

La commande gzip

Elle est utilisée pour compacter un fichier quelconque, et en particulier une archive
tar.
Le décompactage se fait par la commande gunzip, ou de manière totalement
équivalente par gzip -d.
Elle peut décompacter les fichiers .gz, mais aussi les fichiers .z , .Z

Options

o -1 ...-9 fixe le niveau de compression


o -d décompresse
o -c écrit sur la sortie standard au lieu de remplacer le fichier d'origine
(possibilité d'utiliser un tube)
o -l affiche des infos sur le dé/compression.
o -r dé/compresse tous les fichiers du rép. Passé en argument.
o -h aide

Exemples

Ounissi Mounir 57
o gzip backup.tar /home/mounir compresse backup.tar et le remplace par le
fichier backup.tar.gz, d'une taille beaucoup plus réduite.
Attention, le fichier d'origine est donc détruit !
o gzip -9 *.txt compresse au maximum chaque fichier .txt séparément, et les
renomme en ajoutant le suffixe .gz

Autre utilitaire

bzip2 admet la même syntaxe que gzip, mais compresse mieux avec un besoin
accru de mémoire

Commandes DOS et Linux

Les pages qui suivent décrivent des commandes communes utilisées à l'invite MS-DOS sous
Windows 9 x et dans Linux, de même qu'un exemple de base de la manière dont la commande
est utilisée à l'invite du shell de Linux. Notez que ces commandes offrent généralement un
certain nombre d'options. Pour plus de détails sur chaque commande, lisez la page de manuel
correspondante (par exemple, entrez man ls à l'invite du shell pour lire des informations sur
la commande ls).

Tableau C-1. Commandes similaires

But de la commande MS-DOS Linux Exemple Linux de base


Copie des fichiers copy cp cp ce fichier.txt
/home/cerépertoire
Déplace des fichiers move mv mv ce fichier.txt
/home/cerépertoire
Affiche la liste des fichiers dir ls ls
Efface l'écran cls clear clear
Ferme la fenêtre d'invite exit exit exit
Affiche ou définit une date date date date
Supprime des fichiers del rm rm ce fichier.txt
"Renvoie" une sortie à echo echo echo ce message
l'écran
Edite des fichiers à l'aide edit pico [a] pico ce fichier.txt
d'un simple éditeur de
texte
Compare le contenu de fc diff diff fichier1 fichier2
fichiers
Recherche une chaîne de find grep grep ce mot ou cette
caractères dans un fichier phrase cefichier.txt

Formate une disquette format a: (si la mke2fs (ou /sbin/mke2fs /dev/fd0


disquette est dans mformat [b]) (/dev/fd0 est l'équivalent
A:) Linux de A:)

Ounissi Mounir 58
Affiche de l'aide sur une commande /? man [c] man commande
commande
Crée un répertoire mkdir mkdir mkdir directory
Parcourt un fichier more less [d] less cefichier.txt
Renomme un fichier ren mv mv cefichier.txt
cetautrefichier.txt [e]
Montre votre emplacement chdir pwd pwd
dans le système de fichiers
Change les répertoires cd pathname cd pathname cd /directory/directory
ayant un chemin d'accès
spécifique (chemin d'accès
absolu)
Change des répertoires cd .. cd .. cd ..
ayant un chemin d'accès
relatif
Affiche l'heure time date date
Affiche la quantité de mem free procinfo
RAM et son utilisation
Remarques:
a. Pico est un simple éditeur de texte ; parmi les autres éditeurs que vous pouvez utiliser à la
place de pico figurent emacs et vi.
b. Ceci formate une disquette pour le système de fichiers DOS.
c. Vous pouvez également utiliser info pour certaines commandes.
d. Vous pouvez également utiliser un autre pageur , appelé more, pour faire défiler un fichier
un écran à la fois.
e. La commande mv est à double usage en ce qu'elle permet de déplacer un fichier et, si vous
voulez renommer un fichier dans le même répertoire, de le "déplacer" vers le même répertoire
sous un nouveau nom, comme dans l'exemple suivant.

Lexique pour comprendre le manuel UNIX


Le manuel en ligne d’UNIX est la principale source d’information sur les commandes
du système. Il est rédigé dans un anglais technique très simple qui devrait vous être accessible
sans efforts après acclimatation (de nombreuses pages sont maintenant traduites). Le lexique
ci-dessous défini les termes informatiques les plus couramment utilisés dans ce manuel.
blank vide (ligne vide, écran vide).
by default par défaut, ce qui se passe si l’on ne spécifie rien d’autre.
byte octet (8 bits).
comma virgule.
concatenate “concaténer”, c’est à dire mettre bout à bout.
directory répertoire.
file fichier.
handler traitant (d’interruption, de signal, ..), c’est à dire fonction gérant une situation
spécifique.

Ounissi Mounir 59
head tête (début).
inhibit inhiber (empêcher, interdire).
job travail, tâche (processus contrôlé par un shell).
key touche (littéralement “clé”).
parse analyser la syntaxe.
path chemin d’accès à un fichier ou répertoire.
pipe tube (communication interprocessus).
prompt demander (à l’utilisateur) ; ce qui s’affiche au début des lignes d’un interpréteurde
commandes.
quote guillemet ’ ; double quote = " ; backquote = ‘.
recursive récursif.
return retourner (d’une fonction) ; touche “entrée”.
shell littéralement “coquille” ; désigne sous UNIX un interpréteur de commandes interactif.
skip sauter.
sort trier.
space espace.
status état.
syntax syntaxe.
tail queue (fin).
word mot.

Ounissi Mounir 60
BIBLIOGRAPHIE

BACH, Maurice J. The Design of the Unix Operating System, Englewood Cliffs, New Jersey,
Prentice Hall, 1990, 471 p.

RITCHIE, Dennis M. et THOMPSON, Ken. « The Unix Time Sharing System », dans
Communications of the ACM, New York, Vol. 17 no 7, juillet 1974, p. 365-375.

SALLUS, Peter H. A Quarter Century of Unix, Boston, Addison-Wesley, 1994, 256 p.

SOBELL, Mark G. A Practical Guide to Unix System V, Redwood, California, 2e éd.


Benjamin/Cummings, 1990, 700 p.

TAYLOR, Christopher C. Unix is a Four Letter Word... and Vi is a Two Letter Abbreviation,
New York, 1993, 48 p.

Ounissi Mounir 61
Table des matières

Avant propos.......................................................................................................................
CHAPITRE 1 : INTRODUCTION AUX SYSTÈMES D’EXPLOITATION.....................................
I) INTRODUCTION ...............................................................................................................................
I - 1 ARCHITECTURE DES ORDINATEURS :...............................................................................................
I - 2 DÉFINITION D'UN SYSTÈME D'EXPLOITATION...................................................................................
II ) LES FONCTIONS PRINCIPALES................................................................................................
II - 1 FONCTIONS UTILITAIRES................................................................................................................
II - 2 GESTION DU DIALOGUE HOMME/MACHINE...................................................................................
II - 3 GESTION DES DONNÉES ET DES FICHIERS.......................................................................................
II - 4 GESTION DES PÉRIPHÉRIQUES ET DES ENTRÉES/SORTIES PHYSIQUES.............................................
II - 5 GESTION DE LA MÉMOIRE...............................................................................................................
CHAPITRE 2 : PRÉSENTATION DU SYSTÈME UNIX...................................................................
I) CARACTÉRISTIQUES D’UNIX .....................................................................................................
I - 1 HISTORIQUE ET VERSIONS D’UNIX.................................................................................................
I - 2 ARCHITECTURE D’UNIX :................................................................................................................
II ) NOTIONS DE PROCESSUS ...........................................................................................................
II - 1 COMMUNICATION ET SYNCHRONISATION ENTRE PROCESSUS ........................................................
III) LES FICHIERS UNIX......................................................................................................................
III - 1 RÉPERTOIRES ................................................................................................................................
III - 1 - 1 Chemins absolus et relatifs...............................................................................................
III - 1 - 2 Répertoire de connexion.....................................................................................................
III - 2 TYPES DE FICHIERS........................................................................................................................
III - 3 DROITS D’ACCÈS...........................................................................................................................
III – 3 - 1 Utilisateurs et droits...........................................................................................................
III – 3 - 2 Le super-utilisateur............................................................................................................
III - 4 ARBORESCENCE TYPE D'UN SYSTÈME UNIX................................................................................
CHAPITRE 3 : COMMANDES DE BASE (SHELL)..........................................................................
I) DÉFINITION........................................................................................................................................
I - 1 SYNTAXE D'UNE COMMANDE...........................................................................................................
II) LES DIFFÉRENTS SHELLS............................................................................................................
II - 1 MÉTACARACTÈRES DU SHELL :.......................................................................................................
II - 2 INITIALISATION D’UN SHELL...........................................................................................................
III) VARIABLES D’ENVIRONNEMENT............................................................................................
IV) LES ENTRÉES-SORTIES ET LEUR REDIRECTION...............................................................
IV - 1 REDIRECTIONS DES ENTRÉES/SORTIES...........................................................................................
IV - 2 REDIRECTIONS VERS/DEPUIS DES FICHIERS...................................................................................

Ounissi Mounir 62
IV - 3 REDIRECTIONS VERS DES TUBES...................................................................................................
V) CONTRÔLE DE TÂCHES................................................................................................................
LES COMMANDES................................................................................................................................
Gestion et déplacement des arborescences.............................................................................
Archivage et restauration de données.............................................................................................
CHAPITRE 4 : UTILITAIRES UNIX...................................................................................................
I) L’ÉDITEUR VI.....................................................................................................................................
II) COMMANDES DIVERSES..............................................................................................................
III) FILTRES DE TEXTE.......................................................................................................................
IV) MANIPULATION DES PROCESSUS...........................................................................................
CHAPITRE 5 : INTRODUCTION AUX SCRIPTS BASH.................................................................
I) LA PROGRAMMATION SHELL.....................................................................................................
I –1 SAISIE DU SCRIPT.............................................................................................................................
I – 2 EXÉCUTION DU SCRIPT....................................................................................................................
II) ENTRÉES-SORTIES.........................................................................................................................
III) LES VARIABLES BASH.................................................................................................................
III – 1 VARIABLES PROGRAMMEUR.........................................................................................................
III – 2 VARIABLES D'ENVIRONNEMENT...................................................................................................
III – 3 VARIABLES PRÉDÉFINIES SPÉCIALES............................................................................................
IV) PASSAGE DE PARAMÈTRES.......................................................................................................
IV – 1 LA COMMANDE SHIFT ..................................................................................................................
IV – 2 LA COMMANDE SET .....................................................................................................................
IV – 3 LA COMMANDE TEST....................................................................................................................
IV – 3 – 1 Généralités.........................................................................................................................
IV – 3 – 2 Syntaxe...............................................................................................................................
IV – 3 - 3 Valeur de retour..................................................................................................................
IV – 3 - 4 Tester un fichier..................................................................................................................
IV – 3 - 5 Tester une chaine................................................................................................................
IV – 3 - 6 Tester un nombre.................................................................................................................
IV – 3 - 7 Opérations dans une commande test..................................................................................
V) STRUCTURES CONDITIONNELLES...........................................................................................
V – 1 STRUCTURE CONDITIONNELLE SIMPLE..........................................................................................
V – 2 STRUCTURE CONDITIONNELLES IMBRIQUÉES................................................................................
V – 3 CHOIX MULTIPLES.........................................................................................................................
VI) STRUCTURES ITÉRATIVES.........................................................................................................
VI – 1 Boucle for.................................................................................................................................
VI – 2 Boucle while.............................................................................................................................
VI – 3 Sortie et reprise de boucle.......................................................................................................
VII) FONCTIONS....................................................................................................................................
VIII) COMMANDES DIVERSES..........................................................................................................

Ounissi Mounir 63
1) TR...........................................................................................................................................................
2) SET.........................................................................................................................................................
3) EVAL......................................................................................................................................................
ANNEXE...................................................................................................................................................
COMMANDES DOS ET LINUX...........................................................................................................
BIBLIOGRAPHIE...................................................................................................................................

Ounissi Mounir 64

Vous aimerez peut-être aussi