Vous êtes sur la page 1sur 311

Operating Systems

Licence Smi
Semestre 3

Mohammed Bensalah & Younes Kabbadj


Régression
linéaire

Objectifs de ce cours

A l’issue de ce cours vous serez capable de :


• Comprendre le rôle des systèmes d’exploitation pour un dispositif
informatique.
• Discerner les principaux constituants d’un système d’exploitation
• Utiliser l’interface de commande qui permet de communiquer
avec un système d’exploitation.
• Se projeter dans l’avenir pour choisir le rôle que vous allez jouer
dans le domaine informatique.
• Se préparer au deuxième cours Os
• S’initier à l’invité de commandes
• Pouvoir accomplir certaines tâches à partir de l’invité de
commandes
• Synthèse : Pouvoir automatiser des tâches avec les scripts

2
Operating systems
Régression
linéaire

Comment atteindre ces objectifs ?

Pour atteindre ces objectifs vous aurez à votre


disposition :
-Un support de cours (slides)
-Des travaux pratiques/travaux dirigés
-Des activités en classe
-Des qcm
-Un espace classroom
-Des recherches personnelles
-Des mini-projets eventuellement
3
Operating systems
Régression
linéaire

Validation du module

La validation de ce module :
-La validation du module dépend :
• De la compréhension et l’assimilation du cours
• De la mise en pratique des concepts en cours
• De l’application à travers les activités en classe, les
travaux dirigés et les travaux pratiques
• Des efforts extras : recherches spontanées,
lecture d’autres références, recherches sur le
web……
4
Operating systems
Régression
linéaire

De l’ectronique vers les Smartphones

De l’électronique vers l’usage généralisé de l’informatique :


• Comment es t’on passé de l’electronique à Snapshat,
Messenger, Facebook, Maps, Ways, Glovo, Telegram…..?
• Comment l’informatique s’est popularisé ?

5
Operating systems
Régression
linéaire

Les origines des ordinateurs et des smartphones actuels

De l’électronique vers l’usage généralisé de


l’informatique :
• Comment es t’on passé de l’electronique à Snapshat,
Messenger, Facebook, Maps, Ways, Glovo,
Telegram…..?
• Comment l’informatique s’est popularisé ?

6
Operating systems
Régression
linéaire

Les origines des ordinateurs et des smartphones actuels

De l’électronique vers l’usage généralisé de


l’informatique :
• Comment es t’on passé de l’electronique à Snapshat,
Messenger, Facebook, Maps, Ways, Glovo,
Telegram…..?
• Comment l’informatique s’est popularisé ?

7
Operating systems
Régression
linéaire

Plan du cours

• Notions de base (en continu)


- Qui ce qu’un système d’exploitation ?
- Rôle d'un système d'exploitation
- Spécification des système d’exploitations
Unix

• Chap.1 Les commandes de base du système Unix

• Chap.2 Programmation shell

8
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?

Un système d’exploitation (SE) = operating system (OS)

Exemple d’OS : Windows, Unix, Linux

UNIX/LINUX met ses fonctionnalités à la disposition des


programmes d'application sous forme d'appels système (en langage C)

9
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?


Contexte :
- Un ordinateur est constitué de ressources matérielles
(processeur, mémoire, disque dur …)
Hardware :
CPU (Central Processing Unit), mémoire, clavier, disque dure…

-Pour faire fonctionner des programmes informatique


(applications ou logiciels) un ordinateur a besoin d'effectuer
des opérations permettant d'assurer les échanges entre le
processeur, la mémoire, et les ressources physiques
(périphériques).
- Multiprogrammation, gestion des fichiers …
10
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?


Contexte :
- Un ordinateur est constitué de ressources matérielles
(processeur, mémoire, disque dur …)
Hardware :
CPU (Central Processing Unit), mémoire, clavier, disque dure…

Un OS est :
Un traducteur d’une langue étrangère
-Un chef d’orchestre
-Un agent de sécurité
-…………….

11
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?


Contexte :

- Besoin d’une couche intermédiaire entre les application et les


ressources matérielles pour assurer la liaison entre les ressources
matérielles, l'utilisateur et les applications.
utilisateur utilisateur

applications Programme d’expolitation : editeur, ….


gestionnaire d’impression
SE ( ou OS)
Hardware :
CPU (Central Processing Unit), mémoire, clavier, disque dure…
12

12
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?


Activité 1 :
-Vous avez besoin de prendre une photo avec l’application appareil
-Vous désirez enregistrer un audio avec l’application whatsapp
Décrivez dans chacun des deux cas les programmes utilisateurs et les
périphériques utilisés
utilisateur utilisateur

applications Programme d’expolitation : editeur, ….


gestionnaire d’impression
SE ( ou OS)
Hardware :
CPU (Central Processing Unit), mémoire, clavier, disque dure…
13

13
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?

Crédit: Modern Operating


Systems-Tanenbaum
14
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?

Définition 1 :
• Un système d’exploitation est un ensemble de programmes et de
sous-programmes qui ont pour rôle de gérer et piloter les resources
matérielles du dispositif informatique et fournir des services aux
applications et utilisateurs.
• C'est donc le traducteur entre les programmes d'application et
les ressources matérielles d’un ordinateur dans la mesure où il est chargé
d'assurer la liaison entre les ressources matérielles et les applications.

15
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?

OS

Programme A Programme 1
Programme B
Ordre 1
Ordre 4
Matériel

Programme C Programme 2
Programme D
Ordre 3
Ordre 2

16
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?

Définition 2 :
• Un système d’exploitation permet d’organiser et de répartir l’accès des
programmes aux différentes ressources disponibles ainsi que leur ordre
d’exécution
• C'est donc le chef d’orchestre entre les programmes d'application et
les ressources matérielles d’un ordinateur dans la mesure où il est chargé
d'assurer la liaison entre les ressources matérielles et les applications.

17
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?

Définition 3:
• Un système d’ exploitation interdit l’accès direct aux ressources
matérielles par les programme (sauf autorisation)
• C'est donc un agent de sécurité qui veille sur les sécurité et l’intégrité
D’un système informatique

18
Operating systems
Régression
linéaire

Qu’est ce qu’un Os?

Activité 2
• Essayez de penser aux risques liés à l’accès direct des programmes aux
ressources matérielle
Exemple: Accès direct au disque dur ou à la caméra

19
Operating systems
Régression
linéaire

Rôle d'un système d'exploitation

Du fait de sa position d'intermédiaire entre les demandes et le matériel,


Voici les tâches assurées par l'OS :
- assurer la bonne gestion, le partage et l’optimisation de l’utilisation des
ressources physiques et matérielles entre les différents programmes
- gestion de processus
- la gestion de la mémoire ;
- gestion de l’espace disque et des fichiers
- intercepter tous les accès à des périphériques. Aucun programme ne
peut y accéder directement
- Il offre des services abstraits aux applications (ouvrir un fichier …) et
demande des services concrets du matériel.
- Cache la complexité de l’interaction avec les ressources matérielle
d’un ordinateur et permet ainsi de libérer l’utilisateur de la complexité
de la programmation du matériel
20
Operating systems
Régression
linéaire

Rôle d'un système d'exploitation

- Il permet la gestion des exceptions :


▪ mauvais fonctionnement du Hard,
▪ mauvais fonctionnement du programme (mécanisme d’interruption)
et la Gestion des entrées /sorties et des fichiers.
- gestion des fichiers : gestion de la lecture/écriture dans le système de
fichiers et les droits d'accès aux fichiers
- gestion des entrées/sorties ou de périphériques : utilise les
pilote pour contrôler l'accès aux ressources matérielles par les
programmes

21
Operating systems
Régression
linéaire

Qualités d’un système d’exploitation

Les qualités des systèmes d’exploitation :


•Ergonomie : Donner une vision simplifiée et uniforme du matériel.
•Efficacité : Accès rapide à l’information
•Evolutivité : adaptation du système d’exploitation aux
nouveaux périphériques.

22
Operating systems
Régression
linéaire

Qualités d’un système d’exploitation

Les qualités des systèmes d’exploitation :


•Ergonomie : Donner une vision simplifiée et uniforme du matériel.
•Efficacité : Accès rapide à l’information
•Evolutivité : adaptation du système d’exploitation aux
nouveaux périphériques.

23
Operating systems
Introduction au système d’exploitation
Unix

24
Régression
linéaire

Historique de Linux
● L’histoire d’UNIX commence aux laboratoires Bell (Filiale d’AT&T).
● Développé a partir de 1969 par Ken Thompson et Dennis Ritchie pour
leurs besoins propres en s’inspirant du système MULTICS. Il a été écrit
“Unics” en premier lieu (UNiplexed Information and Computing
System).
Objectif : un système interactif qui met l’accent sur les utilitaires de
développement de logiciels, le partage de fichiers et les outils de
documentation
● 1973:
- besoin de rendre UNIX portable sur d’autres Ordinateurs,
- dans ce but, Denis Ritchie réécrit UNIX en langage C qui a été
crée pour l’occasion par Brian Kernighan et Dennis Ritchie.
Ceci explique les liens profonds entre le langage C et UNIX.
25
Operating systems
Régression
linéaire

Historique de Linux

● vers 1975 AT &T a distribué aux universités le système Unix (v6)


ce qui a permit l’enrichissement en extensions et en utilitaires.
Cette date correspond au début de la popularité et de la diversité
d’UNIX.
La principale université qui a travaillé sur Unix est l’université de
Berkeley == > production de ses propres versions appelées BSD
(Berkeley Software Distribution)
● En 1979, sortie de la version des Bells Labs appelée v7. Cette version
est la première à être diffusée dans le monde industriel. Cette version
est à l’origine du développement du marché Unix.

26
Operating systems
Régression
linéaire

Historique de Linux

● Au début des années 80 : AT&T autorise le clonage d’UNIX par


d’autres constructeurs et depuis apparaissent des versions
constructeur.

● En 1983, A.T.&T. sort la version System V, qui est issue de la v7 et qui


sera enrichie au fur et à mesure par de nouvelles versions (releases).
Berkeley, propose sa version 4.2 BSD qui va servir de base pour de
nombreux constructeurs (Sun Microsystems, Digital...) et lui permettre
d’entrer dans le monde industriel
== > Depuis la fin des années 70 début 80, il existe deux grandes
familles d’UNIX :
- La version UNIX BSD
- La version UNIX Système V commercialisé par AT&T. 27
Operating systems
Régression
linéaire

Historique de Linux

28
Operating systems
Régression
linéaire

Historique de Linux

La fin des années 80 est marquée par une croissance sans précédent
du nombre de systèmes Unix.
On trouve alors trois grandes familles: les versions basées sur System
V, celles issues de BSD et les versions Xenix sur micro.

⚫ Ces différentes versions possèdent des incompatibilités.

⚫ Pour y remédier, une norme a été proposée par l’IEEE (Institue of


Electrical and Electronic Engineers), la norme POSIX.
La norme POSIX, définit plusieurs fonctionnalités que doit
fournir un système UNIX

29
Operating systems
Régression
linéaire

Historique de Linux

30
Operating systems
Régression
linéaire

Historique de Linux
⚫ Linus Torvalds, étudiant à l'université d'Helsinki, a développé son
propre noyau OS (LINUX).
⚫ La première version remonte à 1991. Puis de nombreux
développeurs ont participé à l'élaboration des premières
distributions avec comme support de communication : internet.
⚫ Linux est distribué sous la licence GPL (General Public Licence)
=> tout acquéreur peut librement utiliser et même commercialiser
le produit. Cependant, toutes les modifications doivent à leur tour
être librement et gratuitement disponibles pour la communauté.
⚫ Distributions GNU/LINUX

31
Operating systems
Régression
linéaire

Architecture d’un système Unix


Une architecture en couche:
- Au centre on trouve le noyau:
chargé en mémoire au
démarrage. Il interagit
avec le matériel. Il permet la
gestion de la mémoire, le partage
du processeur entre les
différentes taches à exécuter et la
protection entre ces processus.
- Les bibliothèques : bibliothèques
standard d’appels système
- Le shell : l’interpréteur de
commande; un langage (voir chap.
Programmation shell). 32
Operating systems
Régression
linéaire

Caractéristiques d’un système Unix


● Multi-utilisteur : Plusieurs utilisateurs peuvent se connecter et
travailler en même temps. Chaque utilisateur a son environnement
personnel.
● Multi-tâche : Un même utilisateur peut lancer plusieurs travaux
simultanément.
● Possibilité aussi de lancer des processus (tâches) en arrière plan et en
mode différé (batch).
● Un système de fichiers hiérarchisé : Organisation arborescente

33
Operating systems
Régression
linéaire

Caractéristiques d’un système Unix


● Un mécanisme de protection
- Identification des utilisateurs par mot de passe
- deux types d’utilisateurs :
*) L’administrateur système (super-utilisateur) : ‘root’.
Il dispose de tous les droits sur la machine et le système
Unix. Le ‘root’ crée les comptes utilisateurs
*) L'utilisateur normal dispose des droits réduits qui
sont définis par l'administrateur système
- Chaque utilisateur possède un compte :
*) Un nom d’utilisateur ou nom de connexion (login).
*) Un mot de passe (password ).
*) Un Home Directory (répertoire de l’utilisateur ou répertoire
de connexion)
*)Un langage de commandes (shell).
- protection des fichiers

34
Operating systems
Régression
linéaire

Connexion
● Connexion :
Pour pouvoir travailler sous Unix il faut se connecter
Il faut s’identifier à l'aide d'un nom d'utilisateur et d'un mot de
passe. :
Login : <tapez ici votre nom d’utilisateur>
Password : <tapez ici votre mot de passe>
Exemple sous Ubuntu :

● A la connexion, l'utilisateur est automatiquement positionné dans son


répertoire de connexion (home directory) .
Ex : /home/jean
35
Operating systems
Régression
linéaire

Changement d’utilisateur pendant la session

● Prendre la place d’un autre


un utilisateur connecté peut changer de nom en cours de travail en
utilisant la commande su. Le mot de passe du nouvel utilisateur sera
demandé.
syntaxe :
su [-] utilisateur [-c commande]
Exemple : su - root
*) si – est précisé, l'environnement du nouvel utilisateur est chargé
*) si -c est précisé alors les commandes qui suivent sont exécutées.
Revenir au shell précédent : exit
36
Operating systems
Régression
linéaire

Changement d’utilisateur pendant la session

● Prendre la place d’un autre


un utilisateur connecté peut changer de nom en cours de travail en
utilisant la commande su. Le mot de passe du nouvel utilisateur sera
demandé.
syntaxe :
su [-] utilisateur [-c commande]
Exemple : su - root
*) si – est précisé, l'environnement du nouvel utilisateur est chargé
*) si -c est précisé alors les commandes qui suivent sont exécutées.
Revenir au shell précédent : exit
37
Operating systems
Régression
linéaire

Déconnexion

● Déconnexion : Pour se déconnecter :


- taper la commande : exit
- ou utiliser la combinaison de touches Ctrl+D

38
Operating systems
Régression
linéaire

Le shell

● Unix fournit des commandes pour communiquer (interagir) avec le SE


● Ces commandes sont interprétés par le shell
● Le shell est une couche qui fournit l'interface utilisateur d'un système
d'exploitation. C’est donc l’interface entre le système d’exploitation (le noyau ) et
l'utilisateur . La principale fonction est de permettre à l’utilisateur d’interagir avec le
SE via des commandes.
Une commande est transmise à l’OS soit :
- via la ligne de commande
- en utilisant une interface graphique pour l'utilisateur
(GUI=Graphical User Interface).

● Le shell est aussi un langage : voir chapitre programmation Shell.


- Il dispose de variables et de structures de contrôle qui en font un
langage de commande (partie programmation shell)
39
Operating systems
Régression
linéaire

● shell est aussi appelé interpréteur de commandes.


- Il affiche un prompt (en mode ligne de commande) dans un terminal
ou dans un terminal ou console virtuelle, attend la frappe d’une ligne,
analyse cette ligne puis exécute la ou les commande(s).
- Pour exécuter une commande externe il crée un nouveau processus.
Il attend la fin du processus crée puis affiche un nouveau prompt
Console (mode ligne de commande ) :

40
Operating systems
40
Régression
linéaire

Après le login, dans une consol vous voyez :


nomSession@nomMachine:$
Quand on ouvre une console c’est un processus qui se lance

41
Operating systems
41
Régression
linéaire

Le shell

• Il existe plusieurs shells sous Unix :


sh : Le bourne shell; sh (/bin/sh ). C’est l’ ancêtre de tous les
shells. Il est disponible sur toute plateforme UNIX.
bash : Le Bourne again shell. C’es la version améliorée de
bourne shell. Il est dans /bin/bash
Ksh : Le Korn shell (/bin/ksh ) . Il correspond au Bourne Shell
étendu par l’AT&T.
csh : développé par BSD

• Les shells disponibles sont dans le fichier fichier /etc/shells

• le shell utilisé est dans la variable SHELL. On peut le visualiser avec la


commande : echo $SHELL
• Pour changer la shell utilisé on change la valeur de la variable SHELL :
exemple : SHELL=bash
42
Operating systems
Régression
linéaire

Les fichiers
● Un fichier dans UNIX est une séquence d'octets, le noyau n'impose
aucune structure spécifique aux fichiers
● Le rôle d'un fichier est de conserver, de traiter et transmettre de
l'information

● Sous Unix pas de notion de disque physique : tout est fichier

43
Operating systems
Régression
linéaire

Les fichiers

● Les types de fichiers :


- répertoire (d)
- Un fichier ordinaire (normal) : fichiers de données manipulés
directement par les utilisateurs
- tubes nommés (p) : dispositif de communication
- sockets (s)
- liens (l) : pointe vers un autre fichiers
- les fichiers spéciaux : Ils sont associés aux périphériques ( disques,
imprimantes, terminaux)
==> manipulés que par l’intermédiaire du système

44
Operating systems
Régression
linéaire

Les fichiers

● Activité 3:
-Quelle est l’organisation des systèmes sous Unix/Linux
-Quelle est la différence d’un chemin absolu et un chemin relatif pour
Accéder à un fichier?

45
Operating systems
Operating Systems
Licence Smi
Semestre 3

Mohammed Bensalah & Younes Kabbadj


Régression
linéaire

Objectifs de la séance 2

A l’issue de cette séance vous serez capable de :


• Aborder et comprendre la notion de fichiers et des
répertoires
• Comprendre l’arborescence des fichiers sous Unix
• Apprendre à utiliser les commandes de base Unix
• Découvrir le mécanisme des commandes ,shell,
terminal.

2
Operating systems
Régression
linéaire

Les fichiers
● Un fichier dans UNIX est une séquence d'octets, le noyau n'impose
aucune structure spécifique aux fichiers
● Un fichier est un ensemble d’information codée sous forme binaire,
qui a un nom est qui stocké dans un emplacement (répertoire) avec
un chemin d ’accès
● Sur le disque dur, tout est octets, c’est la réalité physique des
fichiers, Unix se charge de les organiser et de les nommer et ainsi
permttre à l’utilisateur d’utiliser les informations stockées sur le
disque dur

3
Operating systems
Régression
linéaire

Les fichiers

● Les types de fichiers :


- répertoire (d)
- Un fichier ordinaire (normal) : fichiers de données manipulés
directement par les utilisateurs
- tubes nommés (p) : dispositif de communication
- sockets (s)
- liens (l) : pointe vers un autre fichiers
- les fichiers spéciaux : Ils sont associés aux périphériques ( disques,
imprimantes, terminaux)
==> manipulés que par l’intermédiaire du système

4
Operating systems
Régression
linéaire

Arborescence Unix ou structuration des fichiers

● En informatique il y a deux structures de fichier :


1-La structure physique: Comment les données sont codées sur le
disque dur
2-La structure Logique: Organisation des fichiers telle qu’un
utilisateur d’un système la voit, l’arborescence fait partie de cette
catégorie.

5
Operating systems
Régression
linéaire

Arborescence Unix ou structuration des fichiers

● En informatique il y a deux structures de fichier :


1-La structure physique: Comment les données sont codées sur le
disque dur
2-La structure Logique: Organisation des fichiers telle qu’un
utilisateur d’un système la voit, l’arborescence fait partie de cette
catégorie.
● Sous UNIX, les fichiers sont enregistrés dans une structure hiérarchisée en arbre.
== > Ce système de fichiers est composé d’une racine et des noeuds qui sont des
répertoires et des feuilles qui sont des fichiers ordinaires

6
Operating systems
Régression
linéaire

Arborescence Unix ou structuration des fichiers


● Les fichiers sont Structurés hiérarchiquement en un arbre unique constitué de :
le répertoire racine (root) : indiqué par / et il contient tous les autres fichiers.
nœuds : répertoires, ces derniers contiennent d’autres fichiers
feuilles : généralement des fichiers ordinaires

/etc : contient les fichiers d'administration


/bin : contient les commandes Unix
/usr : commandes et bibliothèques supplémentaires
/tmp : fichiers temporaires
/lib : bibliothèque système
/dev ; périphériques
7
Operating systems
Régression
linéaire

Arborescence Unix ou structuration des fichiers


racine

Séparateur
de niveaux
• situer un fichier dans l’arborescence :
• son nom
• son chemin d’accès: /home/etudiant1
Les niveaux sont séparés par une la barre oblique / (slash)

8
Operating systems
Régression
linéaire

Activité 1

• Citer les différences entre les dossiers (répertoires) et les fichiers?


• Cherchez dans votre téléphone un fichier (image, document) et donner
pour ce fichier son emplacement (chemin d’accès) et son nom

9
Operating systems
Régression
linéaire

Arborescence Unix ou structuration des fichiers


● Vision abstraite du système de fichiers (structure logique)
Du point de vue du programmeur et de l’utilisateur, le système de
fichiers apparaît comme un arbre dont les feuilles sont les fichiers. Un
nœud interne de cet arbre s’appelle un répertoire (directory)

● Vision concrète du système de fichiers (structure physique)


Concrètement le système de fichiers est constitué de deux types de
structures de données :
- les i-nœuds (i-nodes) : à chaque fichier correspond un i-nœud (i-node)
=== > un fichier est identifié par un numéro de i-nœud
unique
-Le système maintient en mémoire une table des i-nœud (inodes)
des fichiers ouverts dont les éléments pointent sur les fichiers (données).
10
Operating systems
Régression
linéaire

I-node (Table des informations des fichiers)

Structure logique du disque

Super bloc Table des i-noeud Bloc des données

type droitstype …. droits


@données
….

un i-nœud
Liste des i-nœud : contient plusieurs entrées. Chaque fichier y possède une entrée
et contient les caractéristiques de chaque fichiers (les attributs) et les adresses des
blocs de données.
Bloc des données : contiennent les données des fichiers. Les blocs libre sont
répertoriés dans le super bloc (table d’allocation des blocs) 11
Operating systems
Régression
linéaire

Activité 2 (chez soi)

Cherchez chez vous sur la structure des I-Nodes et leur rôle dans le système Linux

12
Operating systems
Régression
linéaire

Interaction avec Linux


● Connexion :
Unix est un système multi-utilisateur dans lequel la notion de sécurité
prime.
Pour pouvoir travailler sous Unix il faut se connecter
Il faut s’identifier à l'aide d'un nom d'utilisateur et d'un mot de
passe. :
Login : <tapez ici votre nom d’utilisateur>
Password : <tapez ici votre mot de passe>
Exemple sous Ubuntu :
● A la connexion, l'utilisateur est automatiquement positionné dans son
répertoire de connexion (home directory) .
Ex : /home/jean
13
Operating systems
Régression
linéaire

Changement d’utilisateur pendant la session

● Prendre la place d’un autre


un utilisateur connecté peut changer de nom en cours de travail en
utilisant la commande su. Le mot de passe du nouvel utilisateur sera
demandé.
syntaxe :
su [-] utilisateur [-c commande]
Exemple : su - root
*) si – est précisé, l'environnement du nouvel utilisateur est chargé
*) si -c est précisé alors les commandes qui suivent sont exécutées.
Revenir au shell précédent : exit
14
Operating systems
Régression
linéaire

Déconnexion

● Déconnexion : Pour se déconnecter :


- taper la commande : exit
- ou utiliser la combinaison de touches Ctrl+D

15
Operating systems
Régression
linéaire

Le shell

● Unix fournit des commandes pour communiquer (interagir) avec le SE


● Ces commandes sont interprétés par le shell
● Le shell est une couche qui fournit l'interface utilisateur d'un système d'exploitation.
C’est donc l’interface entre le système d’exploitation (le noyau ) et l'utilisateur . La
principale fonction est de permettre à l’utilisateur d’interagir avec le SE via des
commandes.
Une commande est transmise à l’OS soit :
- via la ligne de commande
- en utilisant une interface graphique pour l'utilisateur
(GUI=Graphical User Interface).

● Le shell est aussi un langage : voir chapitre programmation Shell.


- Il dispose de variables et de structures de contrôle qui en font un
langage de commande (partie programmation shell)
16
Operating systems
Régression
linéaire

● shell est aussi appelé interpréteur de commandes.


- Il affiche un prompt (en mode ligne de commande) dans un terminal
ou dans un terminal ou console virtuelle, attend la frappe d’une ligne,
analyse cette ligne puis exécute la ou les commande(s).
- Pour exécuter une commande externe il crée un nouveau processus.
Il attend la fin du processus crée puis affiche un nouveau prompt
Console (mode ligne de commande ) :

17
Operating systems
17
Régression
linéaire

Après le login, dans une consol vous voyez :


nomSession@nomMachine:$
Quand on ouvre une console c’est un processus qui se lance

18
Operating systems
18
Régression
linéaire

Le shell

• Il existe plusieurs shells sous Unix :


sh : Le bourne shell; sh (/bin/sh ). C’est l’ ancêtre de tous les
shells. Il est disponible sur toute plateforme UNIX.
bash : Le Bourne again shell. C’es la version améliorée de
bourne shell. Il est dans /bin/bash
Ksh : Le Korn shell (/bin/ksh ) . Il correspond au Bourne Shell
étendu par l’AT&T.
csh : développé par BSD

• Les shells disponibles sont dans le fichier fichier /etc/shells

• le shell utilisé est dans la variable SHELL. On peut le visualiser avec la


commande : echo $SHELL
• Pour changer la shell utilisé on change la valeur de la variable SHELL :
exemple : SHELL=bash
19
Operating systems
Régression
linéaire

Les commandes Unix

• Pour interagir avec le système d’exploitation il existe deux moyens :


1. L’interface graphique
2. Les programmes et l’invité de commande
•L’invité de commande est un mode textuel dans lequel un invité de
commande (prompt) attend que nous saisissions des commandes dans un
langage spécifique 🡺 le shell
•Les commandes peuvent être exécutées successivement ou dans sous
forme de script
•Nous allons introduire les commandes élémentaires

20
Operating systems
Régression
linéaire

Bloc de commandes

• Exécuter plusieurs commandes de façon séquentielle :


syntaxe :
commande1 ; commande2 ; ...; commandeN

Commande<i> doit se terminer par un succès ou par un échec avant l’exécution de la


suivante

• Exécuter des commandes uniquement en cas de succès de la


commande précédente : &&

Syntaxe :
commande1 && commande2 && ... && commandeN

• Exécuter une commande en cas d’échec de la commande


précédente : ||
syntaxe : commande1 || commande2 || ... || commandeN 21
Operating systems
Régression
linéaire

Types commandes

• Le shell distingue deux sortes de commandes :


les commandes internes
les commandes externes.
• Une commande interne est une commande dont le code
est implanté au sein de l’interpréteur de commande.
Exemple : cd , echo, pwd

• Une commande externe : est une commande dont le code se


trouve dans un fichier ordinaire.
Exemple : ls, sleep, vi, mkdir … et les programme shell

• Un processus fils est crée à chaque fois qu’on exécute une


commande externe.
22
Operating systems
Régression
linéaire

Caractères spéciaux (méta-caractères su SHELL)


• Méta-caractères du shell
*, ?, [ ] : constructeurs de noms de fichiers (appelé aussi
les jokers)
~ : répertoire d’accueil
<, >> : redirections
| : tube (pipe)
$ ou ${...} : évaluation de variable
; : séparation de commandes
(...) et {...} : groupements de commandes
|| et && : associations de commandes
! : non logique
& : lancement en arrière plan
# : introducteur de commentaire 23
Operating systems
Régression
linéaire

Caractères spéciaux (méta-caractères su SHELL)

Pour éviter l’interprétation des méta-caractères par le shell utiliser une


des protections suivantes :

' : protection forte. Aucun cratère n’est interprété y compris $


" : délimite une chaîne de caractères avec substitution de
variables.
\ : annule la signification du caractère spécial suivant
(protège le caractère suivant )

Exemple d’application voir la commande echo

24
Operating systems
Régression
La commande echo
linéaire

La commande echo

●Transmet tous ses paramètres sur écran (ou canal de sortie


standard).
Exemple :
$ echo "Bonjour, ça va ?"

25
Operating systems
Régression
linéaire

La commande Echo

Les simples quotes : ‘


Les simples quotes protègent tous les caractères spéciaux du shell. Ils doivent être
utilisés en nombre pair

Exemples :
$> echo * == > affiche le contenu du répertoire courant
rep1 fic
$> echo ‘*’ == > affiche *
*
$> echo ‘bonjour l’ami’ =nombre impaire de ‘
== > le shell affiche le prompt secondaire (>)
>
$> a=6
$> echo ‘ la valeur de a est : $a ‘
la valeur de a est :$a
26
Operating systems
Régression
linéaire

La commande echo

Les guillemets : "


protègent tous les caractères spéciaux du shell à l'exception du :
$var, `` (des quottes inversés ), ${}, \ et "
Exemple :

27
Operating systems
Régression
linéaire

La commande echo

Comment afficher :
1- je m'appelle "toto "
2- je m'appelle ‘toto ‘
3- je m'appelle \toto\

28
Operating systems
Régression
linéaire

Création d’un fichier régulier (ordinaire)

● touch :
■ permet de créer un fichier s’il n’existe pas, et s’il existe d’appliquer
une date à ce fichier (modifier sa date d’accès et de sa date de
modification)

Exemple :
touch test.log
1er cas : le fichier test.log n’existe pas == > ce dernier sera crée
2em cas : le fichier test.log existe
== > applique la date et l’heure courante au fichier test.log
comme date et heure d’accès et de dernière modification
29
Operating systems
Régression
linéaire

Création d’un répertoire

● mkdir :
■ permet de créer un répertoire vide
Syntaxe :
mkdir [options] [nom répertoire]

■ Options :
-p : Crée les répertoires parents (intermidéaire) s’ils n’existaient
pas
== > crée un répertoire et ces sous répertoires
exemple :mkdir –p rep1/test/image
-m : Donne des droits d'accès spécifiques 30

-v : pour indiquer les tâches de mkdir en cours


Operating systems
Régression
linéaire

Se déplacer dans l’arborescence

● La commande cd : permet de se déplacer dans l’arborescence (changer de répertoir


ou change directory)

Syntaxe :
cd [Chemin (absolu ou relatif) vers le répertoire]
● commandes utiles :
cd . : laisse dans le répertoire courant
cd .. : monter d'un niveau dans la hiérarchie
cd ../.. : monter de 2 niveaux dans la hiérarchie
cd ~ : aller directement dans le répertoire de l'utilisateur
cd - : revenir au répertoire précédent
● Pour connaitre la position actuelle ou du répertoire courant : pwd

31
Operating systems
Régression
linéaire

Se déplacer dans l’arborescence

Exemple : en supposant qu’on est dans le répertoire /home/etudiant/TP


== > c’est à dire la commande pwd affiche /home/etudiant/TP
home
home 2
1
etudiant
cd ..
etudiant ../
TP
TP
TP1 TP2
TP1 TP2

La commande cd .. déplace dans


La commande cd ../TP/TP2 déplace dans
le répertoire etudiant (le répertoire père)
le répertoire TP2

32
Operating systems
Régression
linéaire

Se déplacer dans l’arborescence

Activité 3 : si je suis dans le répertoire home et que je veux me déplacer


Vers tp2, comment utiliser la commande cd??

home

etudiant

TP

TP1 TP2

33
Operating systems
Régression
linéaire

Lister les fichiers

● Pour lister le contenu d’un répertoire on utilise la commande ls


Syntaxe :
ls [options] [chemin]

34
Operating systems
Régression
linéaire

Lister les fichiers


● ls sans option :
Lister le contenu du répertoire courant :

Liste le contenu du répertoire courant (on ne spécifie pas le chemin ou mettre .)

Lister le contenu d’un répertoire nommé en passant son chemin en argument

Liste le contenu du répertoire ‘rep’ 35


Operating systems
Régression
linéaire

La commande ls
● Les options de ls :
■ -l : permet d'obtenir l'ensemble des informations relatives à
chaque fichier du répertoire :
Type de fichier
$ ls −l droits d’accès groupe taille(octets) nom du fichier
drwxr−xr−x 2 toto grp1 512 Mar 10 15:09 CVS
−rw−r−−r−− 1 toto grp1 744 Mar 10 14:17 Makefile
−rw−r−−r−− 1 toto grp1 8117 Mar 10 15:23 chap1.text

(compteur-lien) propriétaire date de dernière modification

compteur-lien : nombre d'inodes (partie élémentaire de système de fichiers)


qui pointent vers le fichier/répertoire (généralement 1 pour un fichier, 2+le nombre
de sous-répertoires pour un répertoire).
36
Operating systems
36
Régression
linéaire

La commande ls

● le premier caractère du résultat de la commande ls -l désigne le type du


fichier:
- : désigne un fichier régulier(ordinaire) ce sont des fichiers dont les
données sont stockés sous forme d'octets sur le disque dur.
d : désigne un répertoire (dossier ou directory)
l : désigne un lien symbolique (raccourci)
c: Fichier spécial caractère
b: Fichier spécial bloc
p : pipe nommé

Exemple :
ls -l [a-r]?*.txt
== > lister tous les fichiers commençant par les lettres de a à r,
possédant au moins un second caractère avant la terminaison txt
37
Operating systems
Mohammed Bensalah & Younes Kabbadj
Objectifs de la séance 3

A l’issue de cette séance vous serez capable de :


• Comprendre le besoin de développement du premiers
systèmes d’exploitation
• De résumer l’étape de développement de l’Eniac au
premier OS
• De distinguer le chemin absolu du chemin relatif
• D’acquérir la compétence de créer/effacer des
fichiers/répertoires, lister le contenu des répertoires, se
déplacer entre les répertoires, déplacer
fichiers/répertoires…….
• De mettre tout ceci en pratique
2
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Année 1945 à 1955


• Pas de présence de systèmes d’exploitation
• Pas d’utilisation des langages de programmation
• Programmation faite de manière manuelle
• Omniprésence de la main d’œuvre qualifiée pour
l’utilisation des machines
• Utilisation des tubes à vides comme amplificateur
de signal
• Exemple typique de l’ENIAC et l’EDVAC
• Utilisation de switch pour permettre de programmer
3
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Années 1945 à 1955

4
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Premiers langages de programmation et Fortran


• Invention de Plankalkül en 1944 à 1945 qui avait pour but le
stockage de procédure (routines ) principe de réutilisabilité
• Langage de l’assemblée en 1949 et qui est l’ancêtre du
langage d’assembleur, le plus proche du langage machine
• Langage Fortran (Formule Transfert) en 1957 qui est le plus
ancien langage de programmation encore en usage
aujourd'hui en particulier dans le domaine scientifique pour le
calcul intensif.

5
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Milieu des années 1956-1965: Ancêtres des système


d’exploitation
• Création d’un ensemble de librairies de programmes pour
assister les programmeurs dans la (compilation,
entrées/sorties)
• Les programmes continuaient à tourner les uns après les
autres
• Plus de besoin de lancer chaque programme une fois que le
dernier s’est terminé
• Un exemple de ces ancêtres d’OS est le GM-NAA I/O qui a été
créé pour le IBM 704 en 1956
6
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Années 1956-1965 (Batch systems)


• Une machine était programmable par un langage de
programmation
• Possibilité d’exécuter une et une seule tâche à la fois (un
programme en cours d’exécution)
• Les tâches à exécuter étaient codées comme programmes
dans des cartes perforées
• Possibilité de regrouper plusieurs programmes au sein d’une
même bande magnétique
• Les sorties des programmes (affichage) se faisaient sur des
imprimantes
7
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Années 1955-1965
L’exécution des programmes avait lieu comme suit:
1. Les programmes étaient créés
2. L’ensemble des programmes à exécuter étaient ensuite
transféré sur des bandes magnétiques vers une autre
machine
3. La bande magnétique était transférée vers une autre
machine plus puissante pour l’exécution
4. Les résultats de toutes les tâches étaient stockées sur une
bande magnétique
5. Les résultats sont transférées via bande magnétique et
imprimées sur une autre machine pour l’impression
8
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Années 1955 à 1965

9
Operating systems
Des premiers ordinateurs au premier système d’exploitation

Activité 1
En utilisant ce que vous avez appris des dernières diapos
pouquoi est ce que les premiers systèmes d’exploitation ont été
créés selon vous?

10
Operating systems
Rappel sur la commande echo

• Transmet tous ses paramètres sur écran (ou canal de sortie


standard).

• Trois utilisations principales


1. Avec du texte sans caractères spéciaux: echo Bonjour
2. Avec du texte protégé par des ‘’ ‘’ (guillemets)
3. Avec des caractères protégées par des ‘ ‘ (apostrophe)

• Adaptation de son utilisation avec l’usage des caractères spéciaux


: *, ?, [ ] ,~,<,>,…….

11
Operating systems
Rappel sur la commande echo

1. Avec les protecteurs ‘’ ‘’:


• Les caractères spéciaux sont remplacés par leur signification
Exemple :
x=34
Echo ‘’ $x’’ affiche 34
• Pour annuler l’effet des caractères spéciaux et les afficher tels
qu’il sont : les précéder par des \.
Exemple : Je veux afficher Bonjour \
Echo ‘’ Bonjour \\ ’’

Operating systems 12
Rappel sur la commande echo

2. Avec les protecteurs ‘ ’:


• Les caractères spéciaux sont affichés tels qu’ils sont et leur
effet est annulé:
y=1
Echo ‘$y’ affiche $y

• Remarque : Pour afficher les guillemets, il faut les mettre à


l’intérieur des ‘’ ‘’ et vice/versa ou les précéder par \
Pour afficher ‘’ echo ‘ ‘’ ‘ ou echo \’’
Pour afficher ‘ echo ‘’ ‘ ‘’ ou echo \’

13
Operating systems
Régression
linéaire

Rappel sur la commande echo

3. Avec les protecteurs \:


• Les caractères spéciaux sont affichés tels qu’ils sont et leur
effet est annulé:
echo \$y affiche $y
echo \’ affiche ‘

14
Operating systems
Rappel sur le chemin absolu/relatif

• Pour organiser les fichiers Unix a créé pour les utilisateurs une
structure sous forme d’arbre  l’arborescence des fichiers
• L’ arborescence des fichiers est indépendante de l’organisation
physique des fichiers
• Les fichiers sont en réalité stockés comme des blocs binaires dont
l’emplacement physique qui est défini dans le i-node
• Cette organisation physique est transparente pour les utilisateurs

15
Operating systems
Rappel sur le chemin absolu/relatif

Notion d’emplacement actuel :


1. L’emplacement actuel désigne l’endroit dans lequel vous vous
trouvez dans l’arborescence des fichiers.
2. Cette emplacement est accessible en utilisant la ligne de
commandes ou l’interface graphique avec l’explorateur de
fichiers
3. L’emplacement actuel peut changer en utilisant la commande cd
4. Cette emplacement est défini en chemin absolu

16
Operating systems
Rappel sur le chemin absolu/relatif

Trouver l’emplacement actuel : pwd


• Le retour de la commande est le répertoire actuel (chemin
absolu)
Exemple : pwd affiche /home/user
• Lorsque je me déplace dans l’arborescence le chemin va
changer : cd .. Puis pwd va afficher /home

17
Operating systems
Rappel sur la commande cd

1. C’est une commande qui permet de se déplacer dans


l’arborescence
2. Utilisable avec un chemin relatif
Exemple :
cd home
cd ..
cd ../..
3. Utilisable avec le chemin absolu
cd /etc/bin
4. Nécessité de l’existence du répertoire vers lequel nous voulons
nous déplacer

18
Operating systems
Régression
linéaire

Le déplacement avec la commande cd

Se déplacer dans l’arborescence avec : cd


Deux possibilités principales :
1. En utilisant le chemin absolu
Exemple : cd /usr/bin  je suis dans le répertoire /usr/bin
maintenant
2. En utilisant le chemin relatif je me trouve dans le répertoire
/etc/usr dans lequel existe deux répertoires rep1 et rep2 et je
veux me déplacer dans rep1, cd rep1
Je veux maintenant remonter vers /etc/usr
cd ..

19
Operating systems
Régression
linéaire

Utiliser la commande cd

• La commande cd : permet de se déplacer dans l’arborescence (changer de


répertoire ou change directory)

Syntaxe :
cd [Chemin (absolu ou relatif) vers le répertoire]
• commandes utiles :
cd . : laisse dans le répertoire courant
cd .. : monter d'un niveau dans la hiérarchie
cd ../.. : monter de 2 niveaux dans la hiérarchie
cd ~ : aller directement dans le répertoire de l'utilisateur
cd - : revenir au répertoire précédent
• Pour connaitre la position actuelle ou du répertoire courant : pwd

20
Operating systems
Régression
linéaire

Exemples de la commande cd

Exemple : en supposant qu’on est dans le répertoire /home/etudiant/TP


== > c’est à dire la commande pwd affiche /home/etudiant/TP
home
home 2
1
etudiant
cd ..
etudiant ../
TP
TP
TP1 TP2
TP1 TP2

La commande cd .. déplace dans


La commande cd ../TP/TP2 déplace dans
le répertoire etudiant (le répertoire père)
le répertoire TP2

21
Operating systems
Le déplacement avec la commande cd

Activité 2 :
En considérant que vous connaissez l’arborescence de votre système
de fichiers.
1-Je suis dans le répertoire home et je veux me déplacer vers etc en
utilisant le chemin absolu? En utilisant le chemin relatif?
2-Je suis dans le répertoire etudiant et je veux me déplacer vers etc
en utilisant le chemin relatif.
/

etc home

etudiant

22
Operating systems
Régression
linéaire

Lister les fichiers avec ls

● Pour lister le contenu d’un répertoire on utilise la commande ls


Syntaxe :
ls [options] [chemin]

23
Operating systems
Lister les fichiers
ls sans option :
Lister le contenu du répertoire courant :

Liste le contenu du répertoire courant Lister le contenu d’un répertoire nommé en


passant son chemin en argument

Liste le contenu du répertoire ‘rep’ 24


Operating systems
La commande ls
Les options de ls :
-l : permet d'obtenir l'ensemble des informations relatives à
chaque fichier du répertoire :
Type de fichier
$ ls −l droits d’accès groupe taille(octets) nom du fichier
drwxr−xr−x 2 toto grp1 512 Mar 10 15:09 CVS
−rw−r−−r−− 1 toto grp1 744 Mar 10 14:17 Makefile
−rw−r−−r−− 1 toto grp1 8117 Mar 10 15:23 chap1.text

(compteur-lien) propriétaire date de dernière modification

compteur-lien : nombre d'inodes (partie élémentaire de système de fichiers)


qui pointent vers le fichier/répertoire (généralement 1 pour un fichier, 2+le nombre
de sous-répertoires pour un répertoire).
25
Operating systems
25
La commande ls

Le premier caractère du résultat de la commande ls -l désigne le type du


fichier:
- : désigne un fichier régulier(ordinaire) ce sont des fichiers dont les
données sont stockés sous forme d'octets sur le disque dur.
d : désigne un répertoire (dossier ou directory)
l : désigne un lien symbolique (raccourci)
c: Fichier spécial caractère
b: Fichier spécial bloc
p : pipe nommé

Exemple :
ls -l [a-r]?*.txt
== > lister tous les fichiers commençant par les lettres de a à r,
possédant au moins un second caractère avant la terminaison txt
26
Operating systems
La commande ls

Les options de ls :
-r : affiche les répertoires uniquement
-R : afficher la liste des fichiers dans des sous répertoire
== > affiche le contenu du répertoire et de tous ces sous-
répertoires
-a : Afficher aussi les fichiers cachés (commençant par un point)
Afficher le listing page par page == > ls | less
-i : pour afficher le numéro de l’inode

27
Operating systems
La commande ls

28
Operating systems
Les options de la commande ls

• -m : afficher le résultat sous forme de nom séparé par des virgules


• -F : afficher le type des fichiers
: fichier normale
/ : répertoire
* : exécutable
@ : lien symbolique

• -p : Mettre un '/' après les noms de


répertoires == > ls –p

29
Operating systems
Les options de la commande ls

• Tri sur la date (-t) et (-rt) :


Pour afficher les fichiers d'un répertoire en triant sur la date de
mise à jour des fichiers
-t : afficher les fichiers les plus récents en premier == > ls -t
-rt : afficher les fichiers les plus ancienne en premier == > ls -rt
- possibilité de mixer avec l'option l afin d'afficher le listing
détaillé :
ls -rtl ou ls –tl

30
Operating systems
La commande ls

• Tri en fonction de la taille : -s


ls -s
ls -sh == > la taille du fichier en k octets
-c : Affiche la date de création (si -l) ou tri par date de création (si -t)
-C : noms sont affichés sur plusieurs colonnes
-u : Affiche la date d'accès (-l) ou tri par date d'accès (-t)
-1 : liste sur une seule colonne

31
Operating systems
Déplacer des fichiers : la commande mv

Pour renommer et/ou déplacer un fichier on utilise la commande mv (move) :


Syntaxe :
mv [options] source destination
exemple :
mv ~/rep1/stat24.log . déplace stat24.log vers le répertoire
courant
mv file.txt rep1 déplace file.txt (qui se trouve dans le
repertoire courant) vers le répertoire
rep1
mv file1 file2 renomme le fichier file1 en file2, le fichier file 1
n’existera plus et son nom et son contenu est
désormais dans file2

32
Operating systems
Déplacer des fichiers : la commande mv

mv rep1 repf si repf existe : déplace le répertoire rep1 dans repf,


si repf n’existe pas : renomme le répertoire
rep1 en repf

Remarque pour les liens symbolique :


mv lien1 ~/rep1 déplace le lien symbolique

33
Operating systems
Régression
linéaire

Supprimer un fichier : la commande rm


rm : pour supprimer un fichier
Syntaxe :
rm [options] [nom fichiers]
• Options :
-i : pour confirmer la suppression de chaque fichier
-v : pour indiquer les tâches de rm en cours
-R : récursive (pour supprimer un répertoire avec son contenu) d’un répertroire
• Possibilité d’utiliser les caractères spéciaux :
exemple :
rm * : supprime tous les fichiers du répertoire courant
rm a* : supprime tous les fichiers du répertoire courant qui commencent par a
rm *test : supprime tous les fichiers du répertoire courant qui se terminent par test
rm ?test[0-4]*.txt : supprime tous les fichiers qui commencent par un caractère
quelconque suivi d’un caractère compris entre 0 et 4 suivi de 0 à n caractères suivis
de .txt
34
Operating systems
Supprimer un fichier : la commande rm
Activité 4:
Que va faire la commande ?
rm *test[0-4]?.txt

35
Operating systems
Supprimer un répertoire : la commande rmdir

• Pour supprimer un répertoire vide on utilise la commande rmdir :


rmdir [options] [nom répertoire]

• Pour supprimer un répertoire non vide:


rmdir –R rep

36
Operating systems
Mohammed Bensalah & Younes Kabbadj
Objectifs de la séance 4

A l’issue de cette séance vous serez capable de :


• D’effectuer des opérations de copies de fichiers ou de
répertoires
• De créer des liens de différentes sortes entre les
fichiers
• De changer les droits d’accès
• De comprendre et utiliser les communications entre
commandes
• De lire et concaténer des fichiers
• D’effectuer des statistiques sur des fichiers
• De découper le contenu de fichiers en champs
2
Operating systems
Copier un fichier ou un répertoire

Pour Copier un fichier ou un répertoire on utilise la commande cp


Attention:
Si le fichier cible existe déjà, il sera purement et simplement écrasé, sans
aucun message d'avertissement sauf si on utilise l’option -i . Il faut donc être
très prudent dans le cas de la copie des fichiers ou des dossiers.
Pour Copier un fichier : cp source destination
ou cp –i source destination
Exemple : copier un fichier
copie avec changement de nom: cp log/stat24.log stat/stat25.log
copie avec changement de nom : cp log/stat24.log stat/
Pour copier un répertoire source avec son contenu :
cp -R source destination 3
Operating systems
Copier un fichier ou un répertoire

• La copie d’un fichier ou d’un répertoire signifie que la source reste intacte
• Pour la copie des fichiers, si vous spécifiez le nom de la destination, le fichier
destination aura le même contenu que le fichier source mais pas forcément
le même nom
Exemples: cp ./directory1/cmd1.sh ./directory2/cmd2.sh
cp ./directory1/cmd1.sh ./directory2
La copie du fichier du premier exemple aura le nom cmd2.sh alors que dans le
deuxième exemple elle aura le nom cmd1.sh
• Pour la copie des répertoires, le répertoire de destination contiendra une
copie du répertoire source mais pas forcément son contenu sauf si on utilise
le -R
Exemples : cp directory1 directory2
cp –R directory 1 directory2 4
Operating systems
Les liens: hard and symbolic links

• Les systèmes Linux et Unix et dans une moindre mesure les systèmes Windows
disposent d’un dispositif pour faciliter l’accès et pour permettre la récupération des
fichiers (recovery). Ce moyen s’appelle les liens.
• Les liens sont de deux sortes : les liens symboliques et les liens physiques:
1-Les liens physiques : Comme leur nom l’indique, les liens physiques ont une
signification physique (côté disque dur). Autrement c’est une copie des données
du le fichier originel.
2-Les liens symboliques permettent d’accéder aux fichiers ou un répertoire à partir
d’un nom différent. Ces liens ne sont pas des copies des données mais plutôt des
raccourcis vers les données.
• Les liens physiques sont créés uniquement pour les fichiers alors que les
logiques sont créés pour des fichiers ou des dossiers

5
Operating systems
Les liens physiques : ln -P

• La création d’un lien physique se fait à partir d’un fichier source vers un fichier
destination avec la commande ln ou ln -P
ln -P <fichiers existant > <lien créé>
Ou ln <fichiers existant > <lien créé>
exemple : ln –P file link1_file
• Le lien créé est un fichier qui a un nom et qui partage le même contenu avec le
fichier originel ainsi que le même i-node :

6
Operating systems
Les liens physiques : ln -P

Quelques informations utiles sur les liens physiques:


• Ils contiennent les mêmes informations que les fichiers à partir
desquelles ils ont été créés
• Toute modification sur le fichier originel n’apporte est une
modifications sur le lien physique et vice versa
• La suppression du lien n’entraine pas la suppression du fichier à partir
duquel il a été créé et vice versa.
• Pour un fichier qui a un lien physique, le lien est un autre fichier avec
un nom différent qui contient exactement les mêmes données que le
fichier originel à n’importe quel moment.
• Le lien physique a le même i-node. Lorsque le fichier originel est perdu,
les informations qu’ils contenaient sont récupérables sur un de ses
liens physiques.
7
Operating systems
Les liens symboliques : ln -s

• La création d’un lien symbolique se fait à partir d’un fichier ou un dossier source par
ln -s
ln -s <fichiers existant ou répertoire existant > <lien créé>
exemple : ln –s rep link1_rep
• Le lien créé est une sorte de raccourci pour accéder au fichier ou au répertoire
originel, ils ne partagent pas le même i-node et la suppression du répertoire originel
entraine la suppression des données.

8
Les liens symboliques: ln -s

Quelques informations utiles sur les liens symboliques:


• Ils pointent sur les mêmes données que les lien
• Les liens symboliques permettent d’accéder aux fichiers ou
un répertoire à partir d’un nom différent
• Le fichiers ou répertoire source et le lien ne partagent pas
le même numéro d’i-node.
• Lorsque le fichiers originel est perdu les informations sont
perdues.

9
Operating systems
Copier un fichier ou un répertoire : cp

Activité 1 :
1. Si la position courante est le home dir de l'utilisateur toto,
c’est à dir que la commande pwd affiche :
/home/toto
Comment faire pour copier le fichier /home/toto/linux/tp dans le
répertoire courant?
2. Comment faire pour copier le répertoire courant avec son
contenu dans le répertoire de chemin absolu
/home/toto/personnel
3. Quelle est la différence entre :
cp –R . /home/toto/linux/tp et cp . /home/toto/linux/tp

10
Operating systems
Les liens

Activité 2 :
1-Nous avons un répertoire dir qui contient un fichier nommé
file1 et notre emplacement courant est le même répertoire .
Comment faire pour créér un lien physique nommé copy_file1
Pour le fichier file1
2-Le fichier file1 contenait le texte ‘’ texte file1 ’’. Nous
modifions ce texte par ‘’texte file1 modifié’’. Que contient
désormais copy_file1?

11
Operating systems
Les droits d'accès à un fichier

• Sous Unix il existe trois familles d'utilisateurs pour chaque fichier :


- le propriétaire
- le groupe
- les autres
• Pour chacune de ses trois famille il existe trois type d'autorisation
r : lecture
w : écriture
x : exécution

12
Operating systems
Les droits d'accès à un fichier

• le premier champ du résultat de ls -l , former de 10 caractères,


désigne le type et les droits d’accés
nom du
$ ls -l droits d’accès groupe taille(octets) fichier
drwxr−xr−x 2 toto grp1 512 Mar 10 15:09 CVS
−rw−r−−r−− 1 toto grp1 744 Mar 10 14:17 Makefile
−rw−r−−r−− 1 toto grp1 8117 Mar 10 15:23 chap1.text

(compteur-lien) propriétaire date de dernière modification

le premier caractère désigne le type


le trois suivants désignent les droits du propriétaire
le trois suivants désignent les droits du groupe
le trois derniers désignent les droits des autres utilisateurs
13
Les droits d'accès à un fichier

Signification des droits d'accès pour les répertoires :


r : Lecture , lister le contenu du répertoire ( ls)
w : Ecriture, modifier le contenu du répertoire ( touch, mkdir, rm
mv , cp)
x : Droit de traverser ( cd )
Signification des droits d’accès pour un fichier ordinaire:
r: Lecture, consulter le contenu du fichiers, (cat….)
w: Ecriture, modifier le contenu du fichier : echo
x: Droit d’ exécution, pour un fichier exécutable, ou un fichier de
script

14
Operating systems
Changer les droits d'accès à un fichier

• La commande chmod :
- la commande chmod permet de changer les droits d'accès d'un
fichier donné.
- Seul le propriétaire d ’un fichier peut modifier ses droits d ’ accès
• Il existe deux notations (méthodes) pour modifier les permission :
1- notation symbolique
2- notation octale

15
Operating systems
Changer les droits d'accès à un fichier

La notation symbolique :
syntaxe :
chmod [ugoa][+ - =] [rwx] nom_fichier

u : propriétaire (user) + : pour ajouter des droits


g : groupe d’accès
o : autre - : pour enlever des droits
a : tous (all) = propriétaire + groupe d’accès
+ autre = : pour affecter des droits
si aucune classe n ’est spécifiée toutes les classes sont concernées .

16
Operating systems
Changer les droits d'accès à un fichier

Exemples :
chmod go+w file == > autorisation d’écriture au groupe et aux autres
chmod a=rw file == > autorisation de lecture et d’écriture à tout le
monde
chmod go-rw file == > retirer les autorisations de lecture d’écriture au
groupe et aux autres
chmod u+x,g-w+x,o=r file == > ajouter x au propriétaire, enlever w au
groupe et ajouter x au groupe,
affecter uniquement la lecture aux autre
17
Operating systems
Changer les droits d'accès à un fichier

La notation octale :
• Les permissions du propriétaire ou du groupe ou bien des autres
sont stockées sous forme de nombre octale.
représentation par 3 bits:
r w x
Numéro du bit : 1 2 3

bit 1 : valeur 0 ou 1 (lecture)


bit 2 : valeur 0 ou 1 (écriture)
bit 3 : valeur 0 ou 1 (exécution)

18
Operating systems
Changer les droits d'accès à un fichier

La notation octale :

Valeur binaire Valeur octale Droits


Ainsi, on a:
000 0 ---
001 1 --x
010 2 -w-
011 3 -wx
100 4 r--
101 5 r-x
110 6 rw-
111 7 rwx

19
Changer les droits d'accès à un fichier
La notation octale :
Pour changer les droits d’accès d’un fichier :
syntaxe :
chmod abc filename
0 ≤ a,b,c ≤ 7
a désigne les droits du propriétaire
b désigne les droits du groupe
c désigne les droits des utilisateurs

20
Operating systems
Changer les droits par défaut : umask

- umask permet de définir les droits par défaut pour un fichier


- Pour calculer les droits par défaut d’un fichier :
== > Il faut partir des droits maximum par défaut :
- 666 pour un fichier normale (-rw-rw-rw-)
- 777 pour un répertoire (drwxrwxrwx)

On peut changer ces paramètres par défaut en utilisant la commande umask


Exemples :
1- Pour un fichier classique (régulier)
si on souhaite à ce que les fichiers réguliers auront comme droit 644 (-rw-r-r--) à la création . Il fau
taper la commande : umask 0022
Ainsi on part des droits maximum 666 et on retranche 0022, on obtient donc 644. Par défaut les
fichiers auront comme droit 644 (rw-r-r--).
2- Pour un dossier
Si on tape umask 0244.
On part des droits maximum 777 et on retranche 244, on obtient donc 533, par défaut. Ansi les
fichiers auront comme droit 533 (r-x-wx-wx).
21
Operating systems
Changer les droits

Activité 3 :
1-Créer un répertoire nommé Dir.
Changer les droits d’accès pour rwx------ en octal.
2-Expliquer les droits d’accès précédents.
3-Rajouter au groupe et aux autres le droit de lecture.

22
Operating systems
Redirection d’entrées/sorties sous Unix

• On a trois flux d’entrée/sorties (flux standard de données). Chacun


d’eux a un descripteur de fichier (identifiant) assigné de la façon
suivante :
0 : L’entrée standard (STDIN) associée au clavier
1 : La sortie standard (STDOUT) associé à l’écran
2 : La sortie standard erreur (STDERR) associé à l’écran
Sortie standard (stdout)
=écran par défaut
0 1
Entrée standard (stdin)
=clavier par défaut
2 Sortie erreur standard
(stderr)
=écran par défaut
23
Operating systems
Redirection d’entrées/sorties sous Unix

Au lieu de saisir les données d’entrée au clavier et Afficher à l’écran, on


peut stocker de façon permanente les donnée d’entrée ou de sortie dans
un fichier. Pour cela il faut rediriger les flux d’entrée-sortie au moyen
d’opérateurs spécifiques :
> : redirection de la sortie standard
< : redirection de l’entrée standard
>> : redirection de la sortie standard avec concaténation
& : redirection des sorties standard et d’erreur

24
Operating systems
Redirection de la sortie standard

• Rediriger la sortie d’une commande (sortie standard) vers un fichier régulier :


> ou >>
syntaxe :
commande > filename ou commande > > filename

0 1 > fichier
Entrée standard >>
=clavier par défaut
2 Sortie erreur standard

=écran par défaut

25
Operating systems
Redirection de la sortie standard
Affichage de la sortie de la commande (résultat de
la commande) à l’écran (par défaut)
Exemple :

Redirection de la sortie de la
commande vers le ficher res.txt

Si le fichier res.txt existait son contenu initial est effacé et remplacé par la sortie de
la commande

26
Operating systems
Redirection de la sortie des erreurs

• Pour rediriger les erreurs vers un fichier :


commande 2> filename
commande 2>> filename
* On peut rediriger les erreur vers un fichier poubelle comme /dev/null:
== > commande 2>/dev/null
Ainsi les erreurs ne sont pas affichés sur ecran

Exemple 1 eccho 2>fichier1


La commande eccho n’existe pas. Le message d’erreur sera placé dans le fichier1
Exemple 1
Supposant que le fichier2 n’existe pas
rm fichier1 2>fichier1
Le message d’erreur sera placé dans le fichier1
27
Operating systems
Redirection de l’entrée standard
• Utiliser un fichier comme entrée d’une commande : <
= > rediriger stdin de manière à ce qu’il provienne d’un fichier et
non d’un clavier
Syntaxe :
commande < filename

< Sortie standard (stdout)


fichier 0 1 =écran par défaut

2 Sortie erreur standard

=écran par défaut


28
Operating systems
Redirection simultanée de l’entrée et de la sortie standard

Cas de plusieurs redirections :


exemple de syntaxe :
commande < fichier_entree > fichier_sortie

Avec :
fichier_entree : fichier régulier vers lequel l’entrée standard est
rediriger. La commande va lire dans fichier_entree.
fichier_sortie : le fichier régulier vers lequel est rediriger la sortie de la
commande .

29
Operating systems
Afficher le contenu d’un fichier :cat

• La commande cat permet d’afficher le contenu d’un fichier


lorsqu’elle est utilisée seule avec le fichier comme argument
• La commande cat permet de concaténer le contenu de deux ou
plusieurs fichiers lorsque ces derniers sont utilisés comme
arguments
• La commande permet aussi grâce à la redirection de regrouper le
contenu de plusieurs fichiers dans un autre fichier.
• La documentation officielle cite cette commande comme une
commande de concaténation de un ou plusieurs fichiers vers la
sortie standard (l’écran)

30
Operating systems
Afficher le contenu d’un fichier :cat

• Afficher les fichiers sur stdout : cat


syntaxe :
cat fichier == > affiche le contenu de fichier à l’écran

- Concaténer des fichiers :


cat file1 file2 == > concaténer des fichiers vers stdout
cat file1 file2 > file3 == > concaténer des fichiers dans un autre
fichier (ici file3)
- Concaténer des fichiers et numéroté les ligne :
cat –n file1 file2

less file1 équivalente à cat file1 |less

31
Operating systems
Tube (pipe)
• La sortie d’une commande peut être reliée à l’entrée d’une autre
en utilisant | , dans ce cas là la sortie de la première commande.
C’est l’équivalent de < pour deux commandes.
La redirection entre commande est appelée pipe (tube) , elle est
symbolisée par la caractère |
Syntaxe :
cmd1 | cmd2
== > permet de redirigé la sortie de cmd1 pour servir d’entrée à
cmd2
Exemple :
echo ‘’bonjour’’ | cat
echo ‘’bonjour ’’ | cat >fichier1 32
Operating systems
Statistiques de fichiers :wc

• La commande wc permet de compter le nombre de caractères, de mo


et de lignes d'un fichier.
• Syntaxe :
wc [option] file
Les options :
-c : (chars) donne le nombre de caractères
-w : (words) donne le nombre de de mots
-l : (lignes) donne le nombre de de lignes
-L : (Length max ligne) affiche la longueur de la ligne la plus longue

33
Operating systems
Statistiques de fichiers :wc
Exemple :

34
Operating systems
Extraire des données dans un fichier

Application : Extraction des caractères


Soient n et m deux entiers naturels

cut -cn file extrait le nième caractère de chaque ligne

cut -cn- file extrait chaque ligne à partir du nième caractère

cut -c-n file extrait les n premiers caractères de chaque ligne

cut -cn,m file extrait les caractères n et m de chaque ligne

cut -cn-m file extrait les caractères n à m de chaque ligne


35
Operating systems
Extraire des données dans un fichier

Application : Extraction des champs (colonnes) dans un flux de données


Soit S le séparateur de champs :
cut -dS -fn file extrait le nième champs de chaque ligne
cut -dS -fn- file extrait chaque ligne à partir du nième champs
cut -dS -f-n file extrait les n premiers champs de chaque ligne
cut -dS -fn,m file extrait les champs n et m de chaque ligne
cut -dS -fn-m file extrait les champs n à m de chaque ligne

Avec S= , ou ; ou \ ou : etc

36
Operating systems
wc, cut, cat , et tubes

Activité 4:
1-Comment afficher le nombre de caractères d’un fichier f1: wc avec l’une des options
suivantes (-w, -c, -l).
2-Rediriger la sortie de la commande cat qui lit un fichier f1 vers un fichier nommé f2.
Que contiendra le fichier f2? Utiliser l’un des trois symboles (>,<,|)
3-Un fichier contient le texte suivant
Agadir: Maroc:80000
Rabat:Maroc:10000
Comment afficher uniquement le premier champs de ce texte ?
Comment afficher le premier au deuxième champs de ce texte?
4-En utilisant les tubes et les commandes echo et cat , extraire le premier et le
deuxième mot de la phrase
“Ceci est la phrase à découper "

37
Operating systems
Operating Systems
Licence Smi
Semestre 3

Mohammed Bensalah & Younes Kabbadj


Objectifs de la séance 5

A l’issue de cette séance vous serez capable de :


• De terminer le reliquat de la séance
précédente: redirection, pipes,
• De savoir trouver des fichiers qui répondent
avec des critères sélectifs de nom, de taille, de
date….
• De pouvoir sélectionner l’entête ou le fin d’un
fichier
2
Operating systems
Recherche des fichiers : find

• La commande find permet de chercher des fichiers sur le disque.


syntaxe :
find <répertoire de recherche> <options> <expression>
Options principales:
-name : recherche par nom de fichier
exemple :
recherche dans le répertoire courant de tous les fichiers dont le nom se termine par le
mot ‘test’
find . –name ''*test''
recherche dans le répertoire courant de tous les fichiers dont le nom contient le mot
‘test’
find . –name ''*test*''

3
Operating systems
Recherche des fichiers : find

-type : recherche par type de fichier


d : répertoire, f : fichier classique, l : lien symbolique, b: fichier
spécial en mode bloc, fichier spécial en mode caractère,
s : socket …

Exemples :
find . -type d -name ''Unix*''
recherche dans le répertoire courant de tous les répertoires dont le nom
commence par Unix

find TP/TP1 -type f -name ''Unix*''


recherche dans le répertoire TP/TP1 de tous les fichier réguliers dont le nom
commence par Unix

4
Operating systems
Recherche des fichiers : find

 Options principales:
-user : recherche par propriétaire
ex : find . –user scott
find . ! –user scott == > ce qui n’appartient pas à scott

-group : recherche des fichier appartenant à un groupe


exemple : find . ! –group alpha == > recherche des fichier
n’appartenant
pas au groupe alpha (alpha=identifiant d’un
groupe)
-size : recherche par taille
exemple : find . –size +1OM suffixe de la taille :
b = blocs
c = octets
k = ko, M = Mo, G = Go 5
Operating systems
Recherche des fichiers : find

 Options principales:
-user : recherche par propriétaire
ex : find . –user scott
find . ! –user scott == > ce qui n’appartient pas à scott

-group : recherche des fichier appartenant à un groupe


exemple : find . ! –group alpha == > recherche des fichier
n’appartenant
pas au groupe alpha (alpha=identifiant d’un
groupe)
-size : recherche par taille
exemple : find . –size +1OM suffixe de la taille :
b = blocs
c = octets
k = ko, M = Mo, G = Go 6
Operating systems
Recherche des fichiers : find

- mtime : recherche par date de la dernière modification


exemple :
-mtime 30 : le fichier a été modifié il y a 30 jours;
-mtime +30 : le fichier a été modifié il y a 30 jours ou plus;
-mtime -30 : le fichier a été modifié il y a 30 jours ou moins.

Exemple :
recherche dans le répertoire courant de tous les fichier modifiés il y a 5 jours
find . –mtime +5
recherche dans le répertoire courant de tous les fichier modifiés il y a 5
jours et dont le nom se termine par .txt

find . –mtime +5 -name '' *.txt ''

-atime : recherche par date de dernier accès en lecture du fichier,

7
Operating systems
Recherche des fichiers : find

Afficher un résultat lorsque plusieurs expressions sont vraies


(and)
Deux opérateur logique donnent la possibilité de combiner
plusieurs options : (-a) pour l’opérateur logique et et (-o) pour ou
Leur objectif est d’améliorer la précision de la recherche
Exemple :
Recherche de tous les fichiers réguliers dont le nom contient le mot unix
find . –name '' *unix* '' -a -type f
Ou find . –name '' *unix* '' -type f
Recherche sur le niveau 1 :
find . -maxdepth 1 –name '' *unix* ‘’
8
Operating systems
Recherche des fichiers : find

L’Option –exec:
L’option –exec permet d’appliquer une commande au résultat de la
recherche
Syntaxe:
find rep_source -options –exec commande {} \;

Exemple 1: supprimer les programmes en C dans l’arborescence à partir du


répertoire courant:
find . –name ’’*.c ’’ -exec rm {} \;
Exemple :

9
Operating systems
Recherche des fichiers : find

Activité :
Utiliser find pour trouver:
Les fichiers modifiés il y a moins de 5 jours et dont la taille soit
supérieure à 30 K
Les fichiers se terminant par file mais modifiés il y a plus de 5
jours .
Seulement les fichiers réguliers ayant l’extension .txt ou dont le
nom contient le mot file à la fin

10
Operating systems
Entête et fin de fichier : Head et Tail

Unix/Linux disposent d’outils pour l’affichage de l’entête et de la fin


d’un fichier en choisissant le nombre de ligne à afficher.
head : permet d ’afficher un nombre de lignes au début d ’un
fichier régulier
syntaxe :
head –n nbligne file1
Exemple :
head file1 == > Si l’on ne spécifie pas l’option –n, elle affiche les
10 premières lignes du fichier
head –n +20 fichier1.txt ou head –n 20 fichier1.txt == > affiche les
20 premières lignes.
11
Operating systems
Entête et fin de fichier : Head et Tail

tail : Permet d ’afficher un nombre de lignes à la fin d ’un fichier


texte
tail -n +20 fichier1.txt affiche le fichier à partir de la 20 ème
ligne.
tail -n -20 fichier1.txt affiche les 20 dernières lignes.

12
Operating systems
Entête et fin de fichier : Head et Tail

Activité :
Comment faire pour afficher les 5 premières lignes d’un fichier
file?
Comment utiliser tail pour afficher à partir de la dixième ligne du
fichier file?
Comment utiliser les deux pour afficher entre la 5ieme et la 7ieme
ligne?

13
Operating systems
Operating Systems
Licence Smi
Semestre 3

Mohammed Bensalah & Younes Kabbadj


Objectifs de la séance 5

Le but de cette séance est de :


• De savoir rechercher dans les fichiers un motif texte
dans des fichiers à travers la commande grep
• D’introduire les expressions régulières
• De synthétiser les deux notions précédentes
• De pouvoir scinder un fichier en plusieurs morceaux

2
Operating systems
La commande Grep

• La commande grep est une commande utilisée pour


chercher des chaines de caractères dans un fichier ou
un ensemble de fichiers
• grep cherche dans un/des fichiers les lignes contenant
des expressions particulières
• Elle est l’une des commandes les plus importantes de
linux pour les développeurs et pour les administrateurs
système
• Son nom dérive de g/re/p qui est utilisée dans
l’éditeur de texte ed
3
Operating systems
La commande Grep

• La commande grep est une commande utilisée pour


chercher des chaines de caractères dans un fichier ou
un ensemble de fichiers
• grep cherche dans un/des fichiers les lignes contenant
des expressions particulières
• Elle est l’une des commandes les plus importantes de
linux par les développeurs ou par les administrateurs
système
• Son nom dérive de g/re/p qui est utilisée dans
l’éditeur de texte ed
4
Operating systems
La commande Grep

Pour effectuer des recherches dans un fichier on utilise la commande grep ou


egrep (supporte les expressions régulières étendues)
syntaxe :
grep [options] expreg [fichiers]
expreg est une utilisation qui ressemble à l’utilisation des jokers mais différente
Exemple :
grep ‘test’ rep1/* == > recherche les lignes contenant la chaîne test
(tous les occurrences de test) dans tous les
fichier du répertoire rep1
Options :
-R : recherche récursive dans les fichiers des répertoires ou sous répertoires
-i : rechercher en ignorant la casse
-w : rechercher exactement un mot
5
Operating systems
La commande Grep

Autres options:
-n : affiche, en plus, le numéro de ligne dans lequel figure le mot
recherché
-v : affiche les lignes ne contenant pas le mot
-i : permet d’ignorer la casse (pas de différence entre majuscules et
minuscules)
-c: affiche seulement le nombre de lignes contenant la chaîne,
-l : affiche les fichiers où figure au moins une fois le motif cherché
-F: pas d’interprétation des expressions régulières, le contenu est
cherché tel qu’il est (utile pour les caractères ^, $, ….)
--color : permet de colorier les résultats
6
Operating systems
La commande Grep

Exemples :
grep tex file1 : cherche les lignes contenant ‘tex’ dans le fichier file1
grep -i tex file1: cherche les lignes contenant ‘tex’ dans le fichier
file1 sans différence entre majuscules et minuscules
grep –R tex . : cherche les lignes des fichiers contenant ‘tex’ dans
tous les fichiers du répertoire courant ou l’un de ses sous-répertoires
grep –w tex file : cherche exactement le mot ‘tex’ dans le fichier file,
le mot doit être tout seul exemples:
tex word
this is a tex
find tex in that text
7
Operating systems
La commande Grep

Exemples :
grep –v tex ./* : affiche les lignes ne contenant pas tex dans tous
les fichiers du répertoire courant
grep -R "texte" ./: affiche les lignes contenant “texte” dans les
fichiers des répertoires ou sous-répertoires du répertoire
courant
grep –c "texte" file: affiche le nombre d’occurrences de "texte"
dans file sans afficher les lignes dans lequelles elles apparaissent

8
Operating systems
Les expressions régulières

• Une expression régulière permet de chercher une chaîne de


caractère répondant à un certain critère (par exemple chaîne
contenant des lettres minuscules et quatre chiffre seulement).
• L'avantage : réaliser avec une seule commande un grand nombre
de tâches qui seraient compliqués à faire avec des commandes
UNIX classiques.
• Les expressions régulières offrent des possibilités plus larges que
les jokers
• Les commandes grep utilise les expressions régulières par défaut.
• La commande find aussi permet d’utiliser les expressions
régulières à travers -regex
9
Operating systems
Les expressions régulières

^ : Début de la ligne == > '^blabla' : Affiche toute les


lignes commençant par blabla
$ : Fin de la ligne == > blabla$ : affiche toutes les lignes se
terminant par blabla
\< : début du mot == > \<toto -> affiche toutes les lignes
contenant un mot qui commence par toto
\> : fin du mot == > toto\> -> affiche toutes les lignes
contenant un mot qui se termine par toto
. : remplacé par un et un seul caractère
[...] : remplacé par un caractère entre crochet
[^...] : remplacé par un caractère qui n'est pas entre
Operating systems
10

crochet.
Les expressions régulières

\ : donne la signification spéciale au caractère suivant

Répétition d’une expression :


? : se répété 0 ou 1 fois (au plus 1 fois)
* : répété 0 ou plusieurs fois
\{n\} se répète exactement n fois
\{n,\} se répète n fois ou plus (au moins n fois)
\{0,m\}se répète au plus m fois
\{n,m\} se répète n fois au moins et m fois au plus
\+ se répété une ou plusieurs fois (au moins une fois)

11
Operating systems
Les expressions régulières

Exemples:
Grep –R –-color ^S . : Cherche les lignes qui commencent par ‘S’
majuscule dans le repertoire courant et tous ses sous-fichiers
grep –R .ext . : Cherche les lignes qui contiennent un caractère
quelconque suivi de ‘ext’ dans le repertoire courant et tous ses
sous-fichiers
grep ‘’[abcd].n ’’ unix* : Cherche les lignes contenant un caractère a
ou b ou c ou suivi de n’importe quel caractère suivi de n dans les
fichiers dont le nom commence par unix
grep –R ‘’n* ’’ . : Cherche les lignes qui contiennent le caractères n
qui se répète 0 ou plusieurs fois dans le repertoire courant et tous
ses sous-fichiers
12
Operating systems
Les expressions régulières

Exemples:
grep –R –n ‘’\<korn’’ . : Cherche et numérote les lignes qui
contiennent l’expression korn en début de mot dans le
repertoire courant et tous ses sous-fichiers
grep –R –n ‘’korn \>’’ . : Cherche et numérote les lignes qui
contiennent l’expression korn en fin de mot dans le répertoire
courant et tous ses sous-fichiers

13
Operating systems
Les expressions régulières et grep

Activité :
1- Chercher les lignes commençant par la lettre ‘a’ dans tous les
fichiers ou sous-fichiers du répertoire courant
2-Afficher juste les noms des fichiers qui contiennent la chaine
‘texte’ ou ‘texse’ dans tous les fichiers ou sous-fichiers du
répertoire courant
3-Afficher en couleurs les lignes des fichiers qui contiennent une
lettre entre ‘a’ et ‘z’ suivi du caractère ‘s’ qui se répète 1 ou
plusieurs fois
4-Afficher les lignes qui contiennent {en début de ligne suivi de
n’importe quel caractère
14
Operating systems
Le découpage d’un fichier à travers split

La commande split permet de couper un fichier en


morceau (en plusieurs fichiers).
Syntaxe :
split <option> <fichier> <racine>
Mon-fichier est le fichier à couper
Racine est la racine des noms de fichiers résultants
Permet de créer les fichiers suivants : racineaa, racineab, racineac,
Selon un critère prédéterminé par l’option.

15
Operating systems
Le découpage d’un fichier à travers split

Quelques options utiles :


-n: permet de déterminer le nombre de fichiers de taille égale
résultant de la division du fichier
split –n 3 file : permet de scinder file en 3 fichiers, chacun aura la
même taille
-l : permet de déterminer le nombre de lignes par fichiers
résultant de la division
split –l 5 file : permet de scinder file en des fichiers qui ont chacun
5 lignes.

16
Operating systems
Mohammed Bensalah & Younes Kabbadj
Objectifs de la séance 5

Le but de cette séance est de :


• De comprendre les raisons de la transition entre la
deuxième et la troisième génération des ordinateurs
• D’étendre l’utilisation des expressions régulière à
travers la commande egrep et ses spécificités par
rapport à grep

2
Operating systems
Troisième génération des ordinateurs

Rappel sur la première génération d’ordinateurs


• Pas de langages de programmation
• Pas de système d’exploitation
• Utilisation de tubes à vides comme amplificateurs de
signal
• Exemples historiques: Eniac et Edvac

3
Operating systems
Troisième génération des ordinateurs

Rappel sur la deuxième génération


• Apparition des premiers langages de programmation
• Les transistors ont remplacés les tubes à vide
• Apparition des ancêtres des systèmes d’exploitation:
– Permettre l’accès aux opérations d’I/O
– Permettre la transition d’un programme à un autre
• 2 familles de machines étaient utilisées :
• Les machines moins puissantes pour les tâches plus lourdes
(calcul scientifique)
• Les machine moins puissante pour la lecture des
programmes et leur transfert sur bande magnétique ou les
tâches d’impression
4
Operating systems
Troisième génération des ordinateurs

Rappel sur la deuxième génération:

5
Operating systems
Troisième génération des ordinateurs
Raisons de l’introduction de la troisième génération:
• Les fabricants se sont rendu compte qu’il y a deux
familles distinctes de machines tels que la 7094 et la
1401 pour IBM. La 7094 était utilisée pour les tâches
plutôt pour des calculs scientifiques et la 1401 par les
banques et assurances.
• Deux familles différentes = Des programmes
incompatibles
• Certaines entreprises évoluaient en besoin et se devait
de passer à des machines plus puissantes  les
anciens programmes étaient incompatibles

6
Operating systems
Troisième génération des ordinateurs
Introductions du système/360 :
• IBM a créé une série de machine compatibles logiciellement
nommées système/360
• La série de machines ne différaient que par les caractéristiques
(plus ou moins performantes)
• La série se devait de satisfaire des besoins plus ou moins
importants
• La série 360 était l’une des premières à utiliser les circuits
intégrées (la révolution du silicone)
• Les descendants de ces machines existent encore actuellement :
la série Z surtout utilisées pour héberger des bases de données
géantes ou des serveurs Web

7
Operating systems
Troisième génération des ordinateurs
La série Z descendante actuelle de la 360

8
Troisième génération des ordinateurs
Introduction de l’OS/360:
• Pour cette série IBM a créé un OS qui se devait
de répondre aux besoins suivants:
– Il fallait qu’il tourne sur des machines plus ou
moins puissantes
– Il fallait qu’il marche sur des machines avec
beaucoup ou peu de périphériques
 Un OS avec des millions de lignes de code a
été écrit par des milliers de programmeurs

9
Operating systems
Troisième génération des ordinateurs
Avantages de l’OS/360 , Système/360:
•Dans les anciennes machines dans les phases d’I/O (entrées
/sorties) le CPU restait inactif
•Pour les machines telles que le 7094, ce temps était court
et donc CPU était peu inactif
•Dans les machines telles que le 1401, ce temps était de
l’ordre de 80 à 90%
•L’OS /360 utilise des partitions mémoires pour chaque
programme
•Lorsqu’un programme fait des entrées sorties, un autre
programme est chargé à partir de la mémoire
•C’est le principe de la multi-programmation
 Le CPU est utilisé presque à 100% du temps

10
Operating systems
Troisième génération des ordinateurs
Partitionnement de la mémoire :

11
Operating systems
Troisième génération des ordinateurs
Avantages de l’OS 360/système 360
•Dans la génération antérieure on avait besoin de
deux types de machines, une pour rassembler les
programmes et l’impression et l’autre pour
l’exécution des programmes
•Avec les 360 les programmes pouvaient être
copiés sur le disque et dès qu’une partition était
libre le programme était chargé en mémoire
•C’est le concept de spooling
Plus besoin de deux familles différentes de
machines

12
Operating systems
Troisième génération des ordinateurs

Problèmes lié à l’OS/360:


– Il contenait des milliers de bugs
– De nouvelles versions qui corrigeaient
continuellement les bugs étaient déployées
régulièrement

(A suivre…..)

13
Operating systems
Troisième génération des ordinateurs

Activité :
1. Expliquer en quelques phrases les raisons
transition entre la deuxième et troisième
génération.
2. Quelles sont les deux révolutions logicielles au
niveau de l’OS qui ont permis cette transition?
3. Quelles sont les révolutions au niveau du matériel
qui ont permis cette transition?

14
Operating systems
Les expressions régulières étendues et la commande egrep

• La commande egrep est une commande similaire à


grep, il utilise des expressions régulière mais d’une
manière différente. Elle est un des deux ancêtres de la
commande grep. Son utilisation est équivalente à
grep –E. egrep <options ><expressions régulières
étendues> <fichiers >
Exemple : egrep –w ‘’word’’ file1
• Certaines différences cependant apparaissent dans la
syntaxe concernant : ( ) ,|, +,?,{,}

15
Operating systems
Equivalences et différences entre grep et egrep

Chercher les lignes qui contiennent unix, unixx ou unixxx

Chercher exactement les mots: unix,unixx ou unixxx

16
Operating systems
Les expressions régulières étendues et la commande egrep

Les superpouvoirs des () :


Comment faire pour chercher une suite de caractères qui
se répètent.
Exemple: tu as vu toto?
La syllabe ‘to’ se répète 2 fois dans le mot ‘toto’.
Pour rechercher l’expression une expression qui se
répète on peut utiliser les parenthèses :
egrep ‘’(to){2,}’’ file ou grep –E ‘’(to){2,}’’ file

17
Operating systems
Les expressions régulières étendues et la commande egrep

Les superpouvoirs des | :


Comment faire pour chercher une parmi plusieurs
expressions
Exemple: tu as vu toto? Tu as vu Tata ?
Si on cherche les lignes dans lesquels apparait une
expression ou l’autre :
egrep ‘’toto|tata ’’ file ou grep -E‘’toto|tata ’’ file

18
Operating systems
Les expressions régulières étendues et la commande egrep

Les différences et ressemblances entre grep et egrep :

Symbole Signiffication pour Signification pour


grep egrep ou grep -E
+ Caractère + Une à plusieurs fois

| Caractère | Ou : a|b signifie a


ou b

* 0 ou plusieurs fois 0 ou plusieurs fois

? Le caractère ? Une fois


19
Operating systems
Les expressions régulières étendues et la commande egrep

Des différences et ressemblances entre grep et egrep :


Symbole Signiffication pour Signification pour
grep egrep ou grep -E
{ Caractère { Caractère utilisé
pour préciser le
nombre de
répétitions

} Caractère } Caractère utilisé


pour préciser le
nombre de
répétitions

20
Operating systems
Les expressions régulières étendues et la commande egrep

Des différences et ressemblances entre grep et egrep :

Symbole Signiffication pour Signification pour


grep egrep ou grep -E
( Caractère ( Caractère utilisé
pour délimiter une
chaine

) Caractère ( Caractère utilisé


pour délimiter une
chaine

21
Operating systems
Les expressions régulières étendues et la commande egrep

Des différences et ressemblances entre grep et egrep :

Symbole Signification pour Signification pour


grep egrep ou grep -E
. N’importe quel N’importe quel
caractère caractère

22
Operating systems
Les expressions régulières étendues et la commande egrep

Activité :
Effectuer les recherches suivantes en utilisant grep (sans –E) et
egrep:
1. Rechercher les fichiers qui contiennent le mot ‘’bonjour ’’
2. Rechercher les lignes qui commencent par un ‘e’ suivi du
caractère ‘s’ qui se répètent deux fois.
3. Rechercher les lignes qui contiennent le mot ‘linux’ ou le mot
‘unix’
4. Rechercher les lignes qui contiennent le caractère ‘|’
5. Rechercher les lignes qui contiennent l’une des deux
expressions suivantes ‘linux|unix’ ou ‘unix|linux’

23
Operating systems
Mohammed Bensalah & Younes Kabbadj
Objectifs de la séance 8

Le but de cette séance est de :


• De suivre les notions fondamentales sur la troisième
génération d’ordinateurs
• De savoir ordonner un fichier selon des critères
• De pouvoir trier un fichier texte
• D’aborder les notions fondamentales pour la création des
scripts shell
• De pouvoir créer ses premier script shell en adoptant les
règles de création et la en respectant la syntaxe

2
Operating systems
De la troisième vers la
quatrième génération
Rappel sur la multi-programmation

• Lorsqu’un programme CPU n’est pas en train d’utiliser le


CPU  ce dernier peut être par d’autres programmes
• Ceci est possible grâce à la fragmentation de la mémoire:
Un ensemble de programmes sont chargés en mémoire et
isolés les uns des autres
• Ceci dépend bien entendu de la capacité de la Ram et de la
taille des programmes
• Plus la Ram a de capacité et moins les programmes sont
volumineux plus ce principe de multiprogrammation sera
efficace.

4
Operating systems
Calvaires de la multi-programmation

Inconvénients de la multiprogrammation
• Avec les ordinateurs de troisième génération, un
programmeur devait attendre beaucoup d’heures pour
compiler leur programme et le tester puisqu’il attend
l’exécution de plusieurs programmes en parallèle
• Si il y a un problème dans le code, il devait attendre
plusieurs heures avant de le corriger et d’attendre à
nouveau
• Un ; mal placé pouvait impliquer de telles situations

5
Operating systems
Besoin de temps-réparti

Temps réparti : Une variante de la multiprogrammation


dans laquelle chaque utilisateur possède un terminal
pour la même machine (machine virtuelle)
• Si 20 utilisateurs sont connectés et que 17 sont en
train de boire un café, le CPU serait accordé aux 3 qui
sont actifs
• Le besoin de chaque utilisateur n’était pas très
gourmand en général (compiler une procédure, tester
un programme)

6
Operating systems
Développement du CTSS et le projet Multics

• Développé à MIT (1962) sur une version modifiée de 7094


• General Electric (Edison), Bell Labs et Mit ont commencé à
travailler sur le projet Multics
• Le projet Multics avait initialement pour visions de pouvoir
distribuer une puissance de calcul telle que la distribution
d’ électricité
• Le but primaire était de distribuer la puissance de calcul
dans la région de Boston
• Autrement : Plusieurs utilisateurs se connectent sur la
même machine avec des comptes différents pour
bénéficier d’une partie de la puissance de calcul de cette
machine (ça rappelle quelque chose)
7
Operating systems
Aboutissement du projet Multics

• Multics a été un succès mitigé, le but initial était de


distribuer (partager) la puissance de calcul d’une machine
à peine plus puissance que les premiers PCs
GE a abandonné le business informatique et a vendu sa
distribution informatique a Honeywell qui a continué le
projet
Multics a été distribué dans plusieurs grandes entreprises
et départements d’état qui ont continué à l’utiliser
jusqu’aux années 1990
Le dernier système Multics connu a été arrêté le le 30
octobre 2000 au ministère de la défense nationale au
Canada.

8
Operating systems
Influence de Multics

• Malgré son manque de succès Multics a inspiré la


plupart des systèmes d’exploitation actuels (Unix,
FreeBsd, Linux,Ios , Android….)
• Ken Thompson qui a travaillé sur le projet Multics a
commencé à développer une version mono-utilisateur
(un seul utilisateur) qui a été nommée plus tard Unix

9
Operating systems
Influence de Multics

10
Operating systems
Tri de fichiers
La commande sort

• Unix/Linux offrent la possibilité de trier des fichiers selon un ou plusieurs


critères et en utilisant la commande sort :
Supposons que le fichier est comme suit (à gauche) :

1 florent 36 1 arnaud 30
1 arnaud 30 1 florent 36
3 serges 78 2 arnaud 78
6 bernard 100 3 serges 78
2 arnaud 78 4 bernard 90
4 bernard 90 6 bernard 100
9 arnaud 12 9 arnaud 12

• Nous voulons utiliser la commande sort pour trier le fichier selon le premier
champs : sort file_sort (résultat à droite)
12
Operating systems
La commande sort

1 florent 36 1 arnaud 30
1 arnaud 30 2 arnaud 78
3 serges 78 9 arnaud 12
6 bernard 100 4 bernard 90
2 arnaud 78 6 bernard 100
4 bernard 90 1 florent 36
9 arnaud 12 3 serges 78

• Si nous voulons spécifier le champs de tri par exemple trier selon le


deuxième champs :
– sort +1 -2 file_sort
La dernière commande se traduit trier le fichier précédent des champs compris entre le
champs 1 (2ieme champs) et 2 (3ieme champs non inclus).
Les champs commencent par l’indice 0.

13
Operating systems
La commande sort

1 florent 36 9 arnaud 12
1 arnaud 30 1 arnaud 30
3 serges 78 1 florent 36
6 bernard 100 2 arnaud 78
2 arnaud 78 3 serges 78
4 bernard 90 4 bernard 90
9 arnaud 12 6 bernard 100

• Le champs numériques sont par défaut considérés comme des chaine de


caractères. Pour trier selon le critère numérique on rajoute l’option
numérique :
– sort –n +2 file_sort
La dernière commande va trier le fichier selon le troisième champs d’une manière numérique
1 avant 2 et 23 avant 100 etc …. et non 1000 avant 2

14
Operating systems
La commande sort

Quelque options utiles :


–t : permet de désigner le séparateur de champs
-b : Ignore les espaces en début de champ
-f : Pas de différences entre majuscules et minuscules
(conversion en minuscules puis tri)
-r : Reverse, tri en ordre décroissant.
–n : tri par ordre numérique

15
Operating systems
Shell Scripting
Que sont les scripts shell?

Plusieurs notions abordées depuis le début du cours:


• Historique des systèmes d’exploitation et des ordinateurs
• Rôle des systèmes d’exploitation
• Commandes Shell  Script shell
Définitions:
• Le script shell est un langage de programmation interprété intrinsèque à Linux/Unix.
Il dispose d’une syntaxe propre pour:
– Les variables : création, opérations arithmétiques,. substitution
– Les définition de fonctions
– Les structures conditionnelles
– Les tests
• Le script Shell permet de lancer un ensemble de commandes à la fois déclenchées ou
non par un évènement
• Le Shell est un moyen de communiquer avec le noyau du système d’exploitation
• Il existe plusieurs interpréteurs shell: bash, korn, c shell…..

17
Operating systems
Utilité des scripts shell

Les scripts shell peuvent regrouper et stocker un ensemble de


tâches et être exécutées à n’importe quel moment, elle
permettent donc :
• La réutilisabilité du code : les routines répétitives, exemple :
l’administrateur système veut transférer tous les fichiers
journaux vers une autre machine à minuit chaque jour avec la
commande at par exemple.
• Elles ont des possibilités d’un langage de programmation et
grâce aux commandes prédéfinies permettent de s’adapter aux
contraintes et aux besoins d’un système d’exploitation (gestion
des utilisateurs, gestion de fichiers, gestion réseaux….)
18
Operating systems
Création du premier script

#!/bin/bash
#commentaires ici
echo ‘’hello shell…’’

• Un script shell comence par le shebang (#!/bin/bash) : cette ligne


indique à l’interprète qu’il ne s’agit pas d’un binaire et indique le
chemin d’accès à l’interprète (/bin/bash)
• Les commentaires commencent par #
• Les lignes de code sont tout ce qui reste dans le programme
• Un tel programme peut être créé par n’importe quel éditeur de texte
en lignes de commande (vi, ed…) ou en interface graphique( gedit….)
• Les scripts sont stockés en général sous le format .sh
script_hello.sh
19
Operating systems
Lancement du script

• Avant de lancer le script on doit s’assurer que nous


possédons les droits d’ exécution sur le fichier (droit x)
• En général après la création du fichier on ajoute le
droit x : chmod u+x script1.sh
• Il faut retenir le chemin absolu du fichier sinon être
placé dans le même répertoire
• Le lancement de script se fait en ligne de commande:
/chemin_absolu_ou _relatif/nom_script
Exemples : /user/toto/script_hello.sh
./script_hello.sh
20
Operating systems
Sortie standard d’un script Shell

• Similairement aux langages de programmation le script


peut avoir un retour à l’écran tel que le script
précédent ou peut être sans retour à l’écran
#!/bin/bash
cp $1 $2

• Le code précédent copie le premier argument (fichier


ou dossier) dans le deuxième argument qui est
supposé être un dossier
• Ceci ne provoque pas de sortie sauf si il y a des erreurs
21
Operating systems
Paramètres et variables

• Les paramètres correspondent aux entrées éventuelles d’un script shell,


elles sont identifiées par des nombres commençant par $ suivi d’un chiffre
compris entre 1 et 9. Elles sont manipulées comme des variables spéciales.
– Exemple : $1,$2,$3,…………,$9
– Elle sont définies par l’utilisateur lors du lancement de script:
• Exemple : ./mon_script 1 ‘bonjour’ dans ce cas là $1 est égale à 1 et $2 à ‘bonjour’
– Un utilisateur ne peut pas définir ces variables
– Un utilisateur peut uniquement changer leur valeurs avec la commande shift
• Les autres variables sont :
– $0 : représente le nom du script ou de la commande
– $# représente le nombre d’arguments de la commande
– $* : représente la liste des arguments au format $1 $2 … $9
– $@ : liste des arguments sous format d’éléments distincts
– $? : contient le code de retour de la dernière commande exécutée (utile
pour les tests)

22
Operating systems
Activité :
1. Créer un script Shell qui va utiliser trois paramètres. Ces trois
paramètres doivent être affichés à l’écran ainsi que le nom du script
et le nombre de paramètres
2. Quels droits sont nécessaires pour le lancement du script par tous
les utilisateurs? Quelle commande permettra de faire cela?
3. Comment lancer le script avec trois paramètres?
4. Quels sont les résultats attendus à l’écran?

23
Operating systems
Création de variables et accès à leur valeur

• Pour créer une variable il suffit de déclarer son nom et de lui attribuer
une valeur, son nom peut être composé de majuscules, de minuscules
et de tous caractère qui n’a pas de signification spéciale. Le premier
caractère ne doit pas être un chiffre
– Exemples: x=34
– y=‘’Miséricode’’
• Une variable peut prendre différentes types de valeurs :
– Numérique
– Chaine de caractères
– Booléenne (0 ou 1)
• On peut accéder à la valeur d’une variable en précédant son nom par
$:
– Exemple : echo $x

24
Operating systems
Manipulation de variables : Affectation et utilisation

• L’affectation d’une valeur à une variable se fait au moment de


sa création ou plus tard, ceci se fait par le biais du symbole =
sans espace avant ou après
– Exemple : x=34
• La valeur d’une variable peut être utilisée par une commande
ou être affectée à une autre variable en précédant son nom de
la variable
– Exemple : echo $a
ou b=$a
• Une variable à laquelle on n’a jamais affecté de valeur peut être
considérée comme une chaine vide, supposons que la variable
z n’existe pas :
– echo $z ne va pas provoquer d’erreur mais elle n’affichera rien de particulier

25
Operating systems
Manipulation de variables : Traitement des espaces

• Les caractères spéciaux dont les espaces ne sont pas tolérées


pour les affectations si il ne sont pas protégés par des \, ‘’ ou ‘
La commande suivante provoque des erreurs :
Exemple
$> c=bonjour les amis
• Il faut soit verrouiller les caractères spéciaux un par un \ ou
les mettre entre guillemets ou apostrophes.
c= bonjour\ les\ amis # Solution lourde et correcte
c="bonjour les amis" # Solution correcte
c=’ bonjour les amis ’ # Solution correcte
• Les méthodes citées sont utilisées pour la création ou la
manipulation de chaines de caractères
26
Operating systems
Manipulation de variables : Caractère _

• Le caractère souligné _ n’est pas un caractère séparateur pour


le shell puisqu’il on peut composer le nom d’une variable.
Si on utilise par exemple
$> var1=new ; var2=file
$> echo $var1_$var2
Pour afficher new_file
Ceci sera interprété comme une variable $var1_ qui n’existe
pas, suivie d’une variable $var2. Ceci aura pour effet
d’afficher uniquement la valeur de la variable var2
• Pour palier à ça il faut protéger le caractère _ par des ‘’ ‘’:
$>echo $var1’’_’’$var2

27
Operating systems
Manipulation de variables : Protection du nom de la variables
par {}
Les variables et les accolades :
• On utilise les accolade {} pour identifier (ou délimiter) une variable
lorsqu’il y a possibilité de confusion de l’interprèteur Shell.
Exemple 1 (l’exemple précédent) : on souhaite afficher new_file
— $> var1=new ; var2=file
— $> echo ${var1 }_${var2}
Exemple 2: On souhaite copierun fichier nommé file1 dans un dossier
nommé file2
— $> a=file
— $> cp ${a}1 ${a}2
est équivalent à $> cp file1 file2
et non pas : $> cp $a1 $a2

28
Operating systems
Manipulation de variables: Lecture des valeurs des variables

• Tout comme les fonctions printf et scanf qui permettent d’afficher un


message pour l’utilisateur et lire la valeur d’une variable, le langage
shell permet de faire ce travail grâce à la commande read
• La commande read suivie du nom de variables attend que
l’utilisateur saisisse une valeur pour la variable et se charge de la lire
en mémoire :
— read a permet de lire la valeur de la variable a
— read a b permet de lire simultanément les valeurs des deux
variables a et b
• La commande read peut être aussi utilisée pour afficher un texte
personnalisée avant la saisie de la variable :
— read –p ‘’ Veuillez saisir la valeur de variable a :‘’ a
— read -p ‘’veuillez saisir la valeur des 2 variable ‘’ a b 29
Operating systems
Manipulation de variables: Suppression

• Contrairement à certains langages, la suppression de variables est


possible en langage de shell , pour cela il faut utiliser unset
• Syntaxe : unset <variables>
• Exemple :
— $>a=‘’hello’’
— $>echo $a
— Hello
— $>Unset a
— Echo $a

30
Operating systems
Manipulation de variables: Protection de valeurs de variables

• Les valeurs de variables peuvent être veruillées par le mot clé


readonly, ceci protège une variable du changement de valeurs.
Exemple : $>a=‘bonjour’
$>readonly a
$>a=‘autre chose’
-bash: a: readonly variable
• Une variable peut aussi être protégée dès sa création :
$>reaonly a =‘bonjour’
• L’option –p permet d’afficher toutes les variables constantes:
$>readonly a=45 b=50
$> readonly –p : va afficher a et b et toutes les autres
variables systèmes readonly
31
Operating systems
Opérations arithmétiques sur des variables

Opérations arithmétiques (shell évolué : ksh, bash …)


• Pour effectuer une opération arithmétique, nous précédons la variables qui va
recevoir le résultat par let ou protégeons l’expression par $(())
• exemple :
$>a = 100
$>a = $a + 1 : fausse
Au lieu de ça :
$>let a = $a + 1
Ou $> a=$(($a+1))
• Les opérations :
• + : l’addition , -: soustraction, /: division, * :multiplication,% reste de la division
exemples:
$> let r=$a + $b == > donne le résultat de l’addition de a et b
$>let r= $a - $b == > donne le résultat de la soustraction de a et b

32
Operating systems
Activité :
1-Ecrire un script qui prend comme arguments le rayon du cylindre d’un
cercle et sa hauteur et qui calcul et affiche ensuite la surface de ces côtés
et son volume. Pi doit être une constante dans le programme
2-Ecrire un programme qui copie le contenu de deux fichiers dans un
troisième fichier. Les trois fichiers sont donnés en argument. Le
programme affiche ensuite le contenu du troisième fichier.

33
Operating systems
Systèmes d’exploitation 1
Partie 2 :
Programmation shell

Pr. M. Ben Salah


1
Script shell

●Programmation shell
▪ Le shell n’est pas qu’un simple interpréteur de commande
▪ Le shell dispose d'un véritable langage de programmation avec notamment :
- la gestion des variables,
- des opérations sur variables,
- des tests et des boucles,
- des fonction
▪ Le langage shell est un langage interprété (convertis en code machine à
la volée)
● Objectif de la programmation shell :
- mettre en place des scripts shell
= programme regroupant une séquence de commande Shell

2
Script shell

● Etapes pour créer un script :


1- créer un fichier avec un éditeur de texte en y mettant les commandes
souhaitées
exemple de script : bonjour.sh
NB : le suffixe .sh n’a aucune importance. Le fichier peut bien s’appeler
bonjour. Le .sh ajouté n’est qu’une information pour l’utilisateur. Il ne
joue aucun rôle pour Unix
2- rendre le programme exécutable avec chmod:
exemple : chmod u+x bonjour.sh
3- exécuter le programme (lancer le fichier :
exemple : ./bonjour.sh

Quand un script est lancé, un nouveau processus « fils » est créé qui va exécuter
chacune des commandes.

3
Script shell

● Une fois le script lancé il sera interprété par le Shell disponible sur le
système :
- Bourne Shell ( l'antique shell de Steve Bourne ) : /bin/sh
- Bash (Bourne Again Shell, le shell de Linux ) : /bin/bash
- Korn Shell : /bin/ksh
- c-Shell : lbin/csh
== > connaître le Shell utilisé :
echo $SHELL

4
Script shell

● exemple d’un script :


Bonjour.sh type de shell
#!/bin/sh
# ceci est un premier script Un commentaire commence par #
echo ’’ bonjour … premier script ’’

La ligne #!/bin/sh précise le type de shell à utiliser (sh pour Bourne Shell)

5
Eléments de base de la programmation shell

1- Affichage :
- La commande echo
exemple : $> echo bonjour

2- Les commentaires :
Pour commenter une ligne on doit la précéder d’un dièse ( #)

3- Les variables

6
Les variables

 Un nom de variable obéit à certaines règles :


- Il peut être composé de lettres minuscules, majuscules, de chiffres, de
caractères de soulignement
- Le premier caractère ne doit pas être un chiffre
- La taille d'un nom est en principe illimité

7
Les variables

● Déclaration et affectation :
-Par défaut les variables ne sont pas typées
- Une variable n’a pas à être déclarée explicitement.
- Une variable est déclarée dès qu'une valeur lui est affectée.
- L'affectation est effectuée avec le signe « = », sans espace avant ou après le
signe =
Syntaxe de l’affectation :
variable=valeur

Exemple : $> x=′′ceci est une variable′′


$> z=alpha
$> var=3
!
Pas d’espace autour du signe d’affectation si non erreur
Exemple : $> i = 10
bash: i command not found 8
Les variables

Attention : une variable qui n’a jamais été affecté (inexistante) est considéré comme
une chaîne vide!

9
Manipulation des variables

● Accéder à une variable


▪ Pour accéder à la valeur d’une variable, il suffit de préfixer son nom d’un $
- Exemple : var1=$a

● L'affichage de la valeur d’une variable :


On utilise echo pour l’affichage == > affiche le contenu de sa ligne de commande
Exemple :
$> echo $i
10
Ps : le shell a remplacé la chaîne $i par sa valeur avant d’appliquer la commande
echo

10
Manipulation des variables
● Traitement des espaces !! :

Exemple :
soit la commande suivante :
$> c=bonjour les amis
== > ko
== > il faut soit verrouiller les caractères spéciaux un par un \ soit de les mettre
entre guillemets ou apostrophes.
c= bonjour\ les\ amis # Solution lourde
c="bonjour les amis " # Solution correcte
c=’ bonjour les amis ’ # Solution correcte

11
Manipulation des variables

● Différence entre " , ‘ et \ :


- La différence est dans l’interprétation des variable et des substitution
- \ : permet d'utiliser les caractères spéciaux comme des caractères normaux
(on protège le caractère)
- " et ‘ se verrouillent mutuellement
- ‘ protège tout
- " protège tout les chaîne de caractères sauf : $ et \
$> echo '$a $b'
== >affichage de : $a $b

Exemple :
$> a=bonjour echo "$a $b"
$>b=Monsieur == >affichage de : bonjour Monsieur

12
Manipulation des variables

● Le caractère souligné n’est pas un caractère séparateur pour le shell


== > on peut le trouver dans un nom de variable
Exemple :
$> var1=new ; var2=file
$> echo $var1_$var2 == > on souhaite afficher new_file
file mais ce n’est pas le cas : le shell a interprété
$var1_ comme une variable (qui n’existe pas bien sûr)
suivi de la variable var qui a bien été remplacé par sa valeur
Correction :
$> echo $var1 ’’_’’$var2

13
Manipulation des variables

● Les variables et les accolades :


On utilise les accolade {} pour identifier (ou délimiter) une
variable

Exemple 1 (l’exemple précédent) : on souhaite afficher new_file


$> var1=new ; var2=file
$> echo ${var1 }_${var2}
Exemple 2:
on souhaite copier file1 dans file2
$> a=file
$> cp ${a}1 ${a}2 est équivalent à $> cp file1 file2
et non pas : $> cp $a1 $a2

14
Manipulation des variables

● Lecture d’une valeur au clavier


syntaxe :
$> read var
la chaîne
exemples : saisie
*) $> read a b
bonjour Monsieur
$> echo $a
Bonjour
$> echo $b
Monsieur
**) -p : afficher un message de prompt
read -p 'Entrez votre nom : ' nom
echo "Bonjour $nom !"
15
Suppression d’un paramètre : unset

● Suppression d’un paramètre : unset


syntaxe :
unset nomVariable
exemple :
$> a=3
$> echo $a
3
$> unset a
$> echo $a

16
Protection d’une variable : read only

● variable en lecture seule: readonly


On utilise la commande read only pour protéger une variable en écriture
et contre sa suppression

syntaxe : readonly nomVariable


exemple :
$> readonly a

17
Opérations arithmétiques
● Opérations arithmétiques (shell évolué : ksh, bash …)
on précède l’opération arithmétique par le mot clé let
exemple : a = 100
a = $a + 1
let a = $a + 1
Ou a=$(($a+1))
● Les opérations :
+ : l’addition :
exemple : $> let r=$a + $b == > donne le résultat de l’addition de a et b
- : soustraction :
exemple : $>let r= $a - $b == > donne le résultat de la soustraction de a et b
* : multiplication
exemple : $> let r=$a * $b == > donne le résultat de la multiplication de a et b
/ : division
exemple : $> let r=$a / $b == > donne le résultat de la division de a par b
% : le reste de la division
exemple : $>let r=$a % $b == > renvoie le reste de la division entière de a par b
18
Sous exécution et appel d’une commande Unix

● Sous exécution et appel d’une commande Unix :


Le contenu d’une commande peut être stocké dans une variable.
La commande doit être encadré par ` ` (alt Gr +7)
Exemple :
$> a = "`pwd`"
$>echo $a
/home/smi

$> b="`ls -l`"

$> c="`echo bonjour`"


$> echo $c
bonjour

19
Passage de paramètres
● Les paramètres de position
Utilisés lors d’un passage de paramètres à un script
● Le passage d’arguments :
 Se fait via les variables $0 à $9
exemple :
$> ./nomscript arg1 arg2 arg3 … argn

pour récupérer ces


paramètre dans le => $1 $2 $3 $n
scripte on utilise

$0 : représente le nom du script ou de la commande


$# représente le nombre d’arguments de la commande
$* : représente la liste des arguments au format $1 $2 … $n
$@ : liste des arguments sous format d’éléments distinct
$? : contient le code de retour de la dernière commande exécutée

20
Passage de paramètres

● Exemple : script1.sh

#!/bin/sh
echo "nom script= $0"
echo "nbre de parametres = $#"
echo " les paramètres : 1=$1 2=$2 3=$3"
echo "liste =$*"

$> ./script1.sh a b c
nom script = script1.sh
nbre de parametres = 3
les paramètres : 1=a 2=b 3=c
liste =a b c

21
Exercice :
Ecrire un script permettant d’avoir un fichier file3 à partir du contenu de deux
fichiers file1 et file2. Affichez ensuite le nombre total de lignes de file3. Les noms des
trois fichiers doivent être passés en paramètre.

Une solution :

#!/bin/bash
cat $1 $2 > $3
# cat $1 $2 | sort > $3 # avec le tri (sort)
nblignes=`cat $3|wc -l`
echo "Le fichier $3 contient $nblignes lignes"
Passage de paramètres

● Redéfinition des variables de position : set


syntaxe :
set val1 val2 val3
== > $1=val1, $2=val2 et $3=val3

Exemple :
testSet.sh
#!/bin/sh
echo " avant set : param1=$1 param2=$2 param3=$3"
set aa bb cc
echo "apres set : param1=$1 param2=$2 param3=$3 "

Exécution :
$> ./testSet.sh a bc
avant set : param1=a param2=b param3=c
après set : param1=aa param2=bb param3=cc

23
Réorganisation des paramètres

● Pour réorganiser les paramètres on utilise la commande shift


- shift = > décalage d’un paramètre
== > $1 disparait, $2 devient $1, $3 devient $2 …
- shift n : décalage de n positions
Exemple:
shift 3 == > $4 devient $1
Exemple :
testShift.sh

!/bin/sh
echo " avant shift : arg1=$1 arg12=$2 arg13=$3"
Shift
echo "apres shift : arg1=$1 arg2=$2 arg3=$3"

$> ./testShift.sh a b c
avant shift : arg1=a arg2=b arg3=c
après shift : arg1=b arg2=c arg3=

24
Interruption d'un programme

● exit : met immédiatement fin au Shell dans lequel cette instruction est
exécutée
syntaxe : exit n
n est facultatif qui vaut 0 par défaut
$? : permet de récupérer le code de retour
Ps : lorsqu’un script shell se termine, il renvoie toujours au processus père un état
qui est la valeur de la variable $?

25
Les commandes "true" et "false"

Les commandes ‘true’ et ‘false’ ont pour but de renvoyer un état respectivement à
‘vrai’ ou ‘faux’

Exemple :
$> true #== > La commande renvoie la valeur "vrai"
$> echo $?
0
$> false == > # La commande renvoie la valeur "faux"
$> echo $?
1

26
Tests de conditions

● Test sur les chaînes : retourne true si le test est vrai , false si le test est faux,
le code >=2 si échec
*) test –z "variable" : zéro == >$? : retourne 0 si la variable est vide
exemple :
$>a=
$> test –z "$a" ;echo $?
0
*) test –n "variable" : non zéro == >$? : retourne 0 si la variable est non vide
exemple : $> test –n "$a" ;echo $?
1
*) test $variable = ’’chaine’’ == > $? retourne 0 si les deux chaînes sont identiques
exemple : $> a=alpha; test $a = alpha; echo $?
0
*) test $variable != chaine == > $0 retourne 0 si les deux chaînes sont différentes
27
Tests de conditions

● Tests sur valeurs numériques :


-eq == > =
-ne == > !=
-lt == > <
-gt == > >
-le == > <=
-ge == > >=
exemple :
$>a=10; b=20
$>test "$a" -ne "$b" ; echo $?
0
$>test "$a" -eq "$b" ; echo $?
1

28
Tests de conditions
● Tests sur les fichiers :
syntaxe :
test <option> <fichier>
▪ Options :
-f : fichier normal
-d : répertoire
-c : fichier en mode caractère
-b : fichier en mode bloc
-p : tube nommé
-r : autorisation en lecture
-w : autorisation en écriture
-x : autorisation en exécution
-s : fichier existe et non vide
-e : le fichier existe
-L : le fichier est un lien symbolique
29
Tests de conditions

0 si le fichier « monFichier » est régulier


Tests sur les fichiers (suite):
1 si non
Exemple 1 :

$> test -f monFichier; echo $?

$> test ! -f monFichier; echo $?


== > test si le fichier ‘’ monFichier’’ n’est pas régulier

30
Tests de conditions

● L’instruction test peut être remplacer par [ ]


exemple :
[ $a –lt $b ] est identique à test "$a" –lt "$b"

espace

31
Les opérateurs logiques
● liste des opérateurs logiques :
! : non
-a : et
-o : ou

Exemple 1:
test $a -eq $b -o $a != $c

32
Les structures de contrôle

Comme tout langage évolué, le Shell permet des structures de contrôles.


Ces structures sont :
l'alternative simple ( &&, ||)
l'alternative complexe ("if…")
le branchement sur cas multiples ("case…")
la boucle ("while…", "until…", "for…")

33
L'alternative simple
● Syntaxe :
cmd1 && cmd2
cmd1 || cmd2
Exemple 1 : Afficher si on a passé à un script des paramètres ou pas . 7
On affiche ensuite ces paramètres
#!/bin/sh
test $# -eq 0 && echo "$0 n'a reçu aucun paramètre"
# Test sur plusieurs paramètres
test $# -ge 1 && echo "$0 a reçu $# paramètres qui sont $*"
Exemple 2 :
test –e $1 && { echo $1 " existe "; } || { echo " n’existe pas " ; }

test \( -f $1 -o -d $1 \) && echo "rep ou fichier rég";

Ou
[ -f $1 -o -d $1 ] && echo « rep ou fichier rég »
Exemple 3 :
[ ! -f $1 -o ! -d $1 ] && echo « ni rep ni fichier rég » 34
L'alternative simple

Écrire un script qui affiche “fichier existe” si l’argument de la commande


correspond à un fichier qui existe. Utiliser la commande test et &&.

35
Instruction if

● Syntaxe if liste de commandes


if liste de commandes then
then liste de commandes
liste de commandes elif liste des commandes
else then
liste de commandes liste de commandes
fi else
liste de commandes
fi
Exemple 1 :
if test -d $1
then
echo " le fichier est un répertoire "
else
echo " le fichier n est pas un répertoire "
fi 36
Instruction if

Tester une variable numérique :


2) Variable de type entier : à l'aide de let
1) Test :
var=$1
var=$1
[ $var -eq 0 ] 2> /dev/null if let $var 2>/dev/null
if [ $? - le 1 ] then
then echo "$var numérique"
echo "La chaîne est numérique" else
fi echo "$var non numérique"
fi

nb :
let $var 2
$? # return 1 si var ,’est pas numérique
37
Instruction if

Exemple 2 :

#!/bin/bash
echo "Entrez un nombre"
read nb
if test $nb -eq 0
then
echo "c’est un 0 !"
elif test $nb –eq 1
then
echo "C'était 1 ! "
else
echo " le nbre n’est ni 0 ni 1"
fi

38
Instruction if

Exercice 1 :
Écrire un script qui demande le nom et le prénom et les afficher ensuite. Si le
nombre de paramètre est différent de 2 rappeler à l’utilisateur la bonne syntaxe .

Solution :

#!/bin/bash
echo " votre nom et prenom: "
if test $# -eq 2
then
echo "votre nom est : : $2 votre prénom est: $1 !"
else
echo "respecter la syntaxe : $0 nom prénom"
fi

39
Instruction if
Exercice 2 :
Ecrire un programme qui prend en paramètre un fichier et afficher ensuite s’il
s'agit d’un répertoire ou d’un fichier ordinaire ou autre

Solution :

#!/bin/bash
if test –d $1
then
echo " $1 est un répertoire"
elif test –f $1
then
echo " $1 est un fichier ordinaire"
else
echo " $1 n’est ni fichier ordinaire ni répertoire"
fi

40
Instruction if

Exercice 3 :

Écrire un script qui :


- Test qu’on a bien passé un argument et un seul
- si elle est appliquée à un répertoire retourne le nombre de fichiers de
ce répertoire
- si elle est appliquée à un fichier non répertoire, retourne la taille du
fichier

41
Instruction if

solution :

#!/bin/sh
if [ $# -eq 1 ]
then
if [ -f $1 ]
then
ls –s $1
else
if [ -d $1 ]; then ls –1 $1 | wc –l; fi
fi
else
echo erreur nb arguments
fi

42
Instruction if

Exercice 3 :
Ecrire un script :
- lorsqu'elle est appliquée à un répertoire écrit dans un fichier la liste
des fichiers du répertoire
- sinon renvoie un message (exemple : ce n’est pas un répertoire)

Solution :
#!/bin/sh
#description du shell
if [ -d $1 ]
then
ls -l $1 >resultat
else
echo erreur
fi
43
while do…done

● Syntaxe :
While expression
do
liste de commandes
done

44
while do…done

Exemple :
Demander à l’utilisateur à saisir un nom ((une chaîne de caractère).

x=$1
let $x 2>/dev/null
while test -z $x -o $? -eq 0
do
read -p "saisir le nom" x
let $x 2>/dev/null
done
echo nom=$x
while do…done

Exemple :
Afficher les nombres de 1 jusqu’à la valeur passée en paramètre
du script à l’aide d’une boucle while … do … done:

Solution :
i=1
while test $i -le $1
do
echo $i
let i=$i+1
done
echo $i

46
while do…done

Utiliser le while et le shift pour compter le nombre de paramètres passés à un


script et les afficher un par un

i=0
Une solution : while test $# -ge 1
do
i=$(($i+1))
echo $1
shift
done
echo nombre de parametres : $i

47
until do…done

Syntaxe :
until expression
do
liste de commandes
done

Exemple Utiliser le until et le shift pour compter le nombre de paramètres passés à


un script et les afficher un par un

i=0
Une solution : until test $# -lt 1
do
i=$(($i+1))
echo $1
shift
done
echo nombre de parametres : $i
48
Until … do … done

Exemple :
Afficher les nombres de 1 jusqu’à la valeur passée en paramètre
du script à l’aide d’une boucle until … do … done

#!/bin/bash
i=1
until test $i -gt $1
do
echo $i
let i=$i+1
done

49
Boucle for

● Syntaxe :
for var in liste
do
liste de commandes
done

50
Boucle for
Exemple 1 : Ecrire un script shell qui permet de lister le contenu d’un répertoire passé
en paramètre. Afficher ensuite, pour chaque élément, s’il s'agit d’un répertoire ou d’un
fichier ordinaire ou autre (fichier spécial,
socket …)

#!/bin/bash
test $# -ne 1 && { echo "il faut un arg. exemple : $0 rep"; exit 1; }
test ! -d $1 && { echo " l’arg. doit être un répertoire ! " ; exit 1; }
cd $1
for file in "`ls -1`"
do
if test -d $file
then
echo "$file est un répertoire"
elif test -f $file
then
echo "$file est un fichier ordinaire"
else
echo "$file n’est ni rép ni fichier ordinaire"
fi
done
51
Boucle for

Exemple 2: Copier tous les fichier s, du répertoire courant, dont le nom se termine par
.txt en .txt.copie dans le même répertoire.
#!/bin/bash
for v in *.txt NB :
do - R : car on s’intéresse à tout type de fichier== > on
cp –R $v ${v}.copie peut avoir des fichiers de type répertoires à copier

done

Exemple 3 : Amélioration du script précédent:


Copier tous les fichier s, d’un répertoire passé en argument, dont le nom se termine par
.txt en .txt.copie dans le même répertoire.
#!/bin/bash
test $# -ne 1 && { echo "il faut un arg. exemple : $0 rep"; exit 1; }
test ! -d $1 && { echo « l’arg. doit être un répertoire ! " ; exit 1; }
cd $1
for v in *.txt
do
cp – R $v ${v}.copie
done
Boucle for

Exercice : Ecrire un script shell qui doit prend en argument un répertoire existant. Le script
calculera (comptera) et affichera le nombre de mots dans chaque fichier régulier de ce
répertoire. Ne pas utiliser les deux commandes suivantes : la commande grep (ou egrep) et la
commande wc (l’utilisation de d’autres commandes hormis ces deux dernières est autorisée).
Une solution :
test $# -ne 1 && { echo "il faut deux args : $0 rep "; exit 1; }
test ! -d $1 && { echo "le repertoire source (arg1) doit exister : $0 rep " ; exit 1; }
nb=0
cd $1
n=`find . –type f `
for var in $n
do
for x in `cat $var`
do
nb=$(($nb+1))
done
done
Boucle for

Une autre solution :

#!/bin/bash
test $# -ne 1 && { echo "il manque l’arg . : $0 rep "; exit 1; }
test ! -d $1 && { echo "le repertoire source (arg1) doit exister : $0 rep " ; exit 1; }
nb=0
cd $1
for var in *
do
if[ -f $var ]
then
for x in `cat $var`
do
nb=$(($nb+1))
done
fi
done
Boucle for

Exercice :
Pour un répertoire donné passé en argument, affiche tous les fichiers dont la seconde
lettre est un « e ».
Pour chaque fichier afficher si c'est un répertoire ou un fichier ordinaire ou autre.
Une partie d’une solution :

test $# -ne 1 && { echo "il faut un arg : $0 rep "; exit 1; }
test ! -d $1 && { echo " $1 n’est pas u répertoire : $0 rep " ; exit 1; }
cd $
res=`find . -name "?e*“`
for file in res
do
test -f $file && echo "fichier"
test -d $file && echo "rep"
test \( ! -d $file -a ! -f $file \) && echo " autre"
done
Boucle for

Afficher les nombres de 0 jusqu’à la valeur passée en paramètre

#!/bin/bash
sm=0
for ((i=0;i<=$1;i++))
do
let sm=$sm+$i
done
echo "somme=$sm"

56
Le branchement à choix multiple :Case

● Syntaxe :
case var in
choix1) liste de commandes ;;
choix2) liste de commandes ;;

*) liste de commandes à exécuter par défaut ;;
esac

● Les valeurs de choix peuvent utiliser les constructions suivants :


[a-z] : La valeur correspond à tout caractère compris entre " a" et " z"
[az] : La valeur testée correspond à "a" ou "z"
aa|bb : La valeur correspond à deux caractères " a" ou " bb"
? : La valeur testée correspond à un caractère quelconque
* : La valeur testée correspond à toute chaîne de caractères

57
Le branchement à choix multiple :Case

Exemple : Ecrire un script qui permet de saisir un nombre et qui évalue ensuite s'il est
pair, impair, compris entre 10 et 100 ou autre chose

#!/bin/sh
echo "Entrez un nombre"
read nb
# Evaluation du nombre
case $nb in
0) echo "$nb vaut zéro";;
1|3|5|7|9) echo "$nb est impair";;
2|4|6|8) echo "$nb est pair";;
[1-9][0-9]) echo "$nb est supérieur ou égal à 10 et inférieur à 100";;
*) echo "$nb >100"
esac

58
Les tableaux
● Initialisation du tableau :
nom_tableau[indice]=valeur
indice : commence à zéros

Exemple :
Tab[1]=’’bonjour’’
table=(a b c)
● Lecture :
echo ${Tab[1]}
● Pour compter le nombre d'éléments du tableau :
Len=${#tab[*]}
● Afficher tous les éléments :
echo ${tab[@]}
echo ${tab[*]}
● Parcourir un tableau :
Exemple :
for el in ${tab[*]}
do
echo $el;
done 59
Les tableaux

Ecrire un script qui renvoie la même résultat que ls –1r rep (sans utiliser ni ls ni sort).
#!/bin/bash

[ $# -ne 1 ] && { echo "il faut un parametre de type rép :";exit 3;}
[ ! -d $1 ] && { echo "$1 n’est pas un repertoire ";exit 3;}
i=0
# lecture du fichier ligne par ligne et
# chaque ligne est ajouté dans le tableau
cd $1
for var in *
do
tab[$i]=$var
i=$(($i+1))
done
# chaque cellule du tableau contient un élément du répertoire $1
# 1)avec la ligne suivante c'est l‘équivalent de ls
echo ${tab[*]}
# 2-avec affichage inverse du contenu du tableau(contenu du rep)
# c est l‘équivalent de ls -1r
for((i=${#tab[*]}-1;i>=0;i--))
do
echo ${tab[$i]}
done
60
Les fonctions

● Une fonction permet de regrouper des instructions fréquemment employées dans


un ensemble identifié par un nom.

Syntaxe :
nomFonction()
{
liste_de_commandes
}

● L’appel de la fonction se fait de la même façon que l’appel d’une commande. Il n'y a
aucune différence syntaxique entre l'utilisation d'une fonction ou d'une commande

Syntaxe d’appel :
nomFonction
ou
var ="`nomFonction`"
61
Les fonctions

Exemple : Une fonction qui affiche la date puis un "ls"


#!/bin/sh
# Fonction qui affiche la date puis fait un "ls"
fctls()
{
date
ls -l
}
# Utilisation de la fonction
fctls # Appel de la fonction
var1= " `fctls` " # Récupération de ce que la fonction affiche
ls –l # Appel de la commande classique "ls -l"
var2 = " `ls -l` " # Récupération de ce que la commande "ls -l" affiche

62
Les fonctions

● Passage de valeurs
Syntaxe :
nom_de_fonction()
{
comandes
}

nom_de_fonction param1 param2 … # appel de la fonction

63
Les fonctions

Remarque :
le contenu des variables $1, $2 etc dans le corps de la fonction et différent de celui
dans le programme principal :
- pour la fonction ces variables font références aux valeurs passées passés
depuis l'extérieur de la fonction vers la fonction
- Dans le programme principal ces variables font références aux valeurs passées
depuis l'extérieur du script vers le script

note : $0 reste invariante en conservant toujours le nom du script


Les fonctions

Exemple : Une fonction qui affiche, pour chacun des nombres passés en
argument, s’il est paire ou impaire

#!/bin/bash
pair_impair()
{
# let a=$1%2
a=$(($1%2))
test $a -eq 0 && echo "$1 est pair" || echo "$1 est impair"
}
# Pour chaque nombre passé au programme
for nb in $*
do
pair_impair $nb
done

65
Les fonctions

● Retour de fonction
Syntaxe :
nom_de_fonction(){
return n n de 0 à 255
}

nom_de_fonction
echo $? Valeur retournée par la fonction

66
Les fonctions
Exemple : Une fonction qui renvoie "vrai ou "faux" si la valeur qu'elle reçoit est
paire ou impaire
#!/bin/bash
# Fonction qui teste la parité d'une valeur
pair_impair()
{
# let a=$1%2 #en bash
a=$(($1%2)) # en bash et en sh
test $a -eq 0 && return 0 || return 1
}
# Pour chaque nombre passé au programme
for nb in $*
do
if pair_impair $nb
then
echo "$nb est pair"
else
echo "$nb est impair"
fi
done

67
Les fonctions

● Renvoi d'une valeur par une fonction


Syntaxe :
nom_de_fonction()
{
traitement
echo $valeur
}

var= " `nom_de_fonction` "
echo $var

68
Alt gr +7
Utilisation de bc : opération arithmétiques

69
Les fonctions

Ecrire une fonction qui calcule le carré d’un nombre saisi au clavier

#!/bin/bash
carre()
{

let racine=$1*$1
echo $racine
}
echo " saisir un nombre :"
read a
test $a -eq 3 2>/dev/null
if [ $? -le 1 ]
then
rac="`carre $a`"
echo "racine carré de $a=$rac "
else
echo "désolé $a n’est pas un nombre "
fi 70
Tester une variable numérique

2) Variable de type entier : à l'aide de


1) Test : la commande "typeset -i" ou "let".

var=$1
[ $var -eq 0 ] 2> /dev/null var=$1
if [ $? -eq 0 -o $? -eq 1 ]
then if let $var 2>/dev/null
echo "La chaîne est numérique" then
fi echo "$var numérique"
else
echo "$var non numérique"
fi

71

Vous aimerez peut-être aussi