Vous êtes sur la page 1sur 38

10/12/2015

PLAN DU COURS:

Chapitre 1: SYSTÈME D'EXPLOITATION LINUX

Chapitre 2: COMMANDES DE BASE DE LINUX

Chapitre 3: PROTECTION DES FICHIERS SOUS


LINUX (ADMINISTRATION)

Chapitre 4: GESTION DES PROCESSUS SOUS


LINUX

Chapitre 5: PROGRAMMATION SHELL

Gestion des processus sous


UNIX

1
10/12/2015

LES PROCESSUS
programme3
programme1
programme2 programme4

RAM

Processus 1 Processus 2

Un processus représente à la fois un programme en


cours d ’exécution et tout son environnement
d’exécution (mémoire, état, identification, propriétaire,
père...).
3

LES PROCESSUS

Un processus est identifié par:


 Un numéro de processus unique PID;
 Un numéro de processus parent PPID (Parent Process ID);
 Un numéro d’utilisateur et un numéro de groupe;
 Durée de traitement et priorité;
 Répertoire de travail actif;
 Etc.

2
10/12/2015

LES PROCESSUS
Durant sa vie (temps entre le lancement et la sortie) un
processus peut passer par divers états (process state) :

Arrêté

Signal Signal
Fin
Création En
Prêt Ordonnancement exécution Zombie

Signal
Fin E/S reçu
Bloqué E/S
Suspendu Mort

LES PROCESSUS
La commande ps (process status) permet d’avoir
des informations sur les processus en cours.

$ ps

3
10/12/2015

LES PROCESSUS

$ ps
Pour avoir plus d’informations, utilisez le paramètre -f.

Le paramètre -e donne des informations sur tous les processus


en cours du système.

4
10/12/2015

LES PROCESSUS

Le paramètre -u permet de préciser une liste d’un ou plusieurs


utilisateurs séparés par une virgule.

-g pour les groupes de processus (généralement le groupe de


l’utilisateur)
-t pour les terminaux

-p pour des PID précis.

$ ps -u martin, dupont
9

LES PROCESSUS

Le paramètre –o permet de sélectionner le


format d’affichage dans l’ordre voulu selon
une liste de mots clés particulier.

$ ps -o user, group,uid, gid,


pid, ppid, command

10

5
10/12/2015

LES PROCESSUS
Le paramètre –o permet de sélectionner le format
d’affichage dans l’ordre voulu selon une liste de mots
clés particulier.

11

LA GESTION DES PROCESSUS

Pour arrêter un processus qui tourne, nous appelons la


commande

kill - Num_signal PID [PID2...]

Le signal est l’un des moyens de communication entre les


processus. Lorsqu’on envoie un signal à un processus,
celui doit l’intercepter et réagir en fonction de celui-ci.
12

6
10/12/2015

LA GESTION DES PROCESSUS


Par exemple:
Tuer un processus par son pid
 de manière "gentille" Remplacer PID par le
kill PID numéro du processus

 de manière "brutale"
kill -9 PID
Tuer un processus par son nom
killall NomProcess
Ou encore :
pkill NomProcess
13

LA GESTION DES PROCESSUS

14

7
10/12/2015

LA GESTION DES PROCESSUS

Commande pstree : affiche l’arborescence des processus

15

LA GESTION DES PROCESSUS

Commande nice: Changer la priorité d'un processus


19

nice valeur commande

Plus le nombre est grand, plus la priorité est 0


faible. Par exemple -2 est plus prioritaire que 0.

nice -5 xclock
-20
16

8
10/12/2015

LA GESTION DES PROCESSUS

Commande renice: permet de changer la priorité


d’un programme qui est déjà en exécution.

17

LA GESTION DES PROCESSUS

Lancer un processus en tâche de fond

Commande &

En tapant une commande en tâche de fond,


vous aurez à l'affichage :
xclock &
[1] 912
Lorsqu'on lance une commande en tâche de fond,
deux numéros apparaissent : le numéro de tâche de
fond et de processus.
18

9
10/12/2015

LA GESTION DES PROCESSUS

19

LA GESTION DES PROCESSUS

Commande bg :pour background, vous voyez s'afficher

Reprenons le cas de notre grosse copie de fichiers:


$ cp video.avi video_copie.avi
Tapez maintenant Ctrl + Z pendant l'exécution du programme.
[1]+ Stopped top

$ bg
[1]+ top &

20

10
10/12/2015

LA GESTION DES PROCESSUS

Commande fg: reprendre un processus au premier


plan (foreground)

fg
Si vous avez un seul processus listé dans les jobs, c'est ce
processus qui sera remis au premier plan. Si vous avez
plusieurs processus en arrière-plan, il faudra préciser lequel
vous voulez récupérer.
21

LA GESTION DES PROCESSUS

fg

22

11
10/12/2015

LA GESTION DES PROCESSUS


Commande jobs: pour énumérer les tâches exécutées à
l’arrière-plan et à l’avant-plan.
La syntaxe est

jobs

23

LA GESTION DES PROCESSUS


Par exemple:
 Tuer tous les processus de votre session
kill –kill 0

 Tuer tous les processus de toute vos sessions


kill –kill -1

24

12
10/12/2015

LA GESTION DES PROCESSUS

25

Programmation shell
sous Linux

26

13
10/12/2015

PROGRAMMATION SHELL

Utilisateur

GUI CLI

Ordinateur 27

PROGRAMMATION SHELL

Un shell est un interpréteur de commandes , Il ne fait


pas partie du système d'exploitation UNIX; Son rôle est
d'analyser la commande tapée afin de faire réagir le système
pour qu'il répond aux besoins de l'utilisateur. C'est le premier
langage de commandes développé sur UNIX par Steve Bourne.
Il se présente sous la forme d'une interface en ligne de
commande.

28

14
10/12/2015

PROGRAMMATION SHELL
En effet, rien n'empêche n'importe quel programmeur de
programmer une boucle qui attend une chaîne au clavier,
l'analyse et appelle ensuite le système pour exécuter la demande.
C'est la raison pour laquelle il existe plusieurs shells.
sh
Shell de Stephen Bourne

bash
Bourne-Again shell
CLI
C shell Csh

Shell de Kenneth Ash Shell de Stephen Bourne


Almquis ksh
29

PROGRAMMATION SHELL, POURQUOI ?

 Il est intégré au niveau de linux ;

 Personnaliser la manière d’exécution des programmes

 Automatisation des commandes ;

 Gagner le temps ;

 Etc.

30

15
10/12/2015

PROGRAMMATION SHELL, COMMENT ?

Le shell n’est pas qu’un simple interpréteur de


commandes, mais, il dispose d’un véritable
langage de programmation avec notamment:
 Une gestion des variables ;
 Des tests et des boucles ;
 Des opérations sur les variables ;
 Des fonctions, etc.
31

PROGRAMMATION SHELL, COMMENT ?

Il existe deux moyens de "programmer" en Shell :


Le premier, est dit en "direct" : L'utilisateur tape
"directement" la ou les commandes qu'il veut lancer. Si
cette commande a une syntaxe qui l'oblige à être
découpée en plusieurs lignes, le Shell indiquera par
l'affichage d'un "prompt secondaire" que la commande
attend une suite et n'exécutera réellement la commande
qu'à la fin de la dernière ligne.
32

16
10/12/2015

PROGRAMMATION SHELL, EN "DIRECT"?

C:> date
Tue Jan 16 17:26:50 NFT 2001
C:> pwd
/tmp
C:> if test 5 = 5
D:> then
D:> echo "oui"
D:> else
D:> echo "non"
D:> fi
oui
33

PROGRAMMATION SHELL, COMMENT ?

Il existe deux moyens de "programmer" en Shell :


Le second, est dit en "script" : appelé aussi "batch" ou
"source Shell". L'utilisateur crée un fichier texte par
l'éditeur de son choix (ex : "gedit"; "vi"). Il met dans ce
script toutes les commandes qu'il voudra lui faire
exécuter ; en respectant la règle de base de ne mettre
qu'une seule commande par ligne.

34

17
10/12/2015

PROGRAMMATION SHELL, ÉTAPE PAR ÉTAPE

Par convention, les noms des shell scripts se terminent


généralement (pas obligatoirement) par :
 .sh pour le Bourne et le Bourne Again Shell;
 .ksh pour le Korn Shell ;
 .csh pour le C Shell.

35

PROGRAMMATION SHELL, ÉTAPE PAR ÉTAPE

Pour rendre un script exécutable directement :

$ chmod u +x monscript

Pour l’exécuter :
$ ./monscript

Pour éviter le ./
$ PATH=$PATH:.
$ monscript
36

18
10/12/2015

PROGRAMMATION SHELL, ÉTAPE PAR ÉTAPE


Remarque :
L'adjonction du droit "x" n'est pas obligatoire, mais
l'utilisateur devra alors demander spécifiquement à un shell
quelconque d'interpréter le "source" écrit.
Exemple : L'utilisateur demande d'interpréter
le script par l'intermédiaire du "Bourne Shell"
C:> sh monscript
Tue Jan 16 17:26:50 NFT 2001
/tmp
oui
L'utilisateur peut visualiser le shell dans lequel il travaille en tapant la ligne
suivante: echo $0
37

NOTRE PREMIER SCRIPT

1
Création du fichier
Si test.sh n'existe pas, il
$ vi test.sh || gedit test.sh sera créé

Indiquer le nom du shell utilisé par le script

2 #!/bin/bash Le #! est appelé le shebang.


/bin/bash peut être remplacé
par /bin/sh si vous souhaitez
coder pour sh, /bin/ksh pour
3 Exécution de commandes ksh, etc.
ls
38

19
10/12/2015

NOTRE PREMIER SCRIPT

Les commentaires
#!/bin/bash
# Affichage de la liste des fichiers
ls

Un commentaire
39

NOTRE PREMIER SCRIPT


Pour exécuter un script, il faut que le fichier ait le droit
« exécutable ». Le plus simple pour donner ce droit est
d'écrire :
$ chmod u +x test.sh

Vous pouvez vérifier que le droit a bien été donné :


$ ls -l
-rwxr-xr-x 1 test test 17 2013-03-13 14:33

40

20
10/12/2015

NOTRE PREMIER SCRIPT

Le script s'exécute maintenant comme


n'importe quel programme, en tapant « ./ »
devant le nom du script :

$ ./test.sh

41

NOTRE PREMIER SCRIPT

Modifions le script pour donner également le nom


du répertoire courant:

#!/bin/bash
pwd
ls

42

21
10/12/2015

AFFICHER ET MANIPULER DES VARIABLES

Nous allons créer un nouveau script que nous


appellerons test.sh :
La valeur de
$ vi test.sh variable
#!/bin/bash
message='Bonjour tout le monde’
Le nom de
message='Bonjour c\'est moi' variable

Que fait le script, alors ?


43

AFFICHER ET MANIPULER DES VARIABLES

#!/bin/bash
message='Bonjour tout le monde'
echo $message

#!/bin/bash
message='Bonjour tout le monde'
echo 'Le message est : $message'

Le problème est que cela ne fonctionne pas comme


on le souhaite car cela affiche :
Le message est : $message
44

22
10/12/2015

DEMANDER UNE SAISIE

read nomvariable
#!/bin/bash
read nom
echo "Bonjour $nom !"

Les options :
-p : afficher un message de prompt
#!/bin/bash
read -p 'Entrez votre nom : ' nom
echo "Bonjour $nom !"
45

DEMANDER UNE SAISIE


-n : limiter le nombre de caractères
read -p 'Entrez votre login (5 ctrs max) : ' -n 5 nom
echo "Bonjour $nom ! "

-t : limiter le temps autorisé pour saisir un message

read -
p 'Entrez le code de désamorçage de la bombe (vous avez 5 seco
ndes) : ' -t 5 code
echo -e "\nBoum ! "

-s : ne pas afficher le texte saisi


read -p 'Entrez votre mot de passe : ' -s pass
46

23
10/12/2015

Lecture de l'Entrée Standard

-n : rester dans la même ligne

47

Les tableaux (Korn shell et Bourne Again Shell)


Syntaxe :
variable[n]=chaîne
variable=(chaîne1 chaîne2 …)
Le Korn shell et le Bourne Again Shell permettent de créer
des tableaux à une seule dimension.
Les tableaux n’existent plus en bourne shell.

48

24
10/12/2015

Exemple :
C:> nom[1]="Mr Pignon" # Affectation de "Mr Pignon" dans la variable "nom[1]"
C:> nom[2]="Mr Roue" # Affectation de "Mr Roue" dans la variable "nom[5]"
C:> nom="Mr Wolan" # Affectation de "Mr Wolan" dans la variable "nom[0]"
C:> i=2 # Affectation de "2" à la variable "i«

C:>prenom=(Pierre Paul Jacques) # Affectation de 3 prénoms dans un tableau

C:> echo "Voici mes 3 noms: ${nom[0]}, ${nom[1]} et ${nom[$i]}"

C:> echo "Mon tableau de prénoms contient ${prenom[@]} # le shell transformera chaque
élément du tableau en chaîne
et renverra ensuite l'ensemble
de toutes ces chaînes concaténées.

49

LA "SOUS-EXECUTION"

• La "sous exécution" de commande est un des mécanismes les plus


importants en Shell.
• permet de remplacer, lors de l'exécution du programme, une
partie du script par le texte qu'une commande affiche
normalement à l'écran.
Exemples utiles :
C:> var1=`echo Salut` # Le résultat de la commande "echo Salut" ira dans "var1"
C:> var2=`date` # Le résultat de la commande "date" ira dans "var2"
C:> var3=`ls –l` # Le résultat de la commande "ls -l" ira dans "var3"
C:> var4=`pwd` # Le résultat de la commande "pwd" ira dans "var4"

La sous-exécution peut-être aussi obtenue en "Korn Shell" et en "Bourne Again Shell" par la syntaxe
"$(commande)".
50

25
10/12/2015

Le shell - Paramètres
Variables concernant les paramètres
* liste des paramètres de la commande
# nombre de paramètres de la commande
0 nom de la commande
1, ... n valeur des paramètres 1, ... n

script shell testParam


echo "nombre de parametres $#"
echo "nom de la commande $0"
echo "valeur des parametres 1 et 2 $1 $2"
echo "fin du test"

$ ./testParam aa bbb cccc


nombre de parametres 3
nom de la commande ./testParam
valeur des parametres 1 et 2 aa bbb
fin du test
$

Structures de Contrôle - IF -
Tests sur les fichiers
– Existence : -e
– Répertoire : -d
– Fichier : -f
– Non vide : -s
– Lisible : -r
– Modifiable : -w
– Exécutable :-x

52

26
10/12/2015

Structures de Contrôle - IF -
Comparaison d'entiers
–Egalité : -eq
x = y : [ x -eq y ]
– Inégalité : -ne
x # y : [ x -ne y ]
– Supériorité : -gt
x > y : [ x -gt y ]
– Infériorité : -lt
x < y : [ x -lt y ]

53

Structures de Contrôle - IF -
Tester une chaîne

54

27
10/12/2015

Structures de Contrôle - IF -
Tester un nombre

55

Structures de Contrôle - IF -
Opérations dans une commande test

56

28
10/12/2015

Structures de Contrôle - IF -

57

Structures de Contrôle - IF et ELIF -

58

29
10/12/2015

Structures de contrôle - CASE -


Le choix
case chaine in
motif1) commande1;;
motif2) commande2;;
...
*) commanden;;
esac

script shell testCase


case Yes in
[aeiouy]*) echo "Commence par une voyelle";;
[A-Z]*) echo "Commence par une majuscule";;
???) echo "longueur 3"
ls;;
*) echo "Autres cas !!!";;
esac

$ testCase
Commence par une voyelle (l’ordre est important !!!)

Structures de Contrôle - CASE -

60

30
10/12/2015

Structures de Contrôle - FOR -


L’itérative bornée (première forme)
for variable in mot1 mot2 ... motn
do
commande
done

script shell testFor


for VAR in les sanglots longs
do
echo "Valeur de VAR : $VAR"
done

$testFor
Valeur de VAR : les
Valeur de VAR : sanglots
Valeur de VAR : longs
$

Structures de Contrôle - FOR -

62

31
10/12/2015

exercice - FOR -

Écrire un script permettant d’afficher le contenu du


fichier mots.txt en utilisant la boucle for.

63

Structures de Contrôle - FOR -

64

32
10/12/2015

Structures de Contrôle - FOR -

Écrire un script permettant d’afficher les noms des


fichiers lisibles.

65

Structures de Contrôle - FOR -

66

33
10/12/2015

Structures de Contrôle - WHILE -

while commande1

do
commande2
done

commande2 peut ne pas être effectuée.

Structures de Contrôle - WHILE -

68

34
10/12/2015

Structures de Contrôle - WHILE -

69

Arithmétique et Booléens -Opérateurs-

Opérateurs arithmétiques
– Addition : +
– Soustraction : –
– Multiplication : *
– Division : /
– Modulo : %
Opérateurs booléens
– Et : &&
– Ou : ||
– Non : !

70

35
10/12/2015

Exemple 2

71

Exemple 3

72

36
10/12/2015

exercice -

Réalisez un shell-script qui convertit la date courante en format


anglais (retournée par la commande date) en une date en format
français du type "jeudi 10 novembre 1994 14:04:45".
Indication : la commande set permet de décomposer une chaine
en sous chaines affectée successivement à des variables $1,
$2,….$n

73

exercice -

Réalisez un shell-script qui demande la saisie d’un nom

et un âge. Mais il contrôle que l'âge soit celui d'un majeur

et soit valide (entre 18 et 200 ans). Ensuite, il inscrit ces

informations dans un fichier.

74

37
10/12/2015

Pour continuer l’ aventure, consulter les sites suivants:


 http://doc.ubuntu-fr.org/tutoriel/script_shell#la_structureif

 http://www.freebsd.org/doc/fr/articles/linux-users/article.html

 http://linuxcommand.org/writing_shell_scripts.php

 http://www.linux-france.org/article/dalox/unix04.htm

75

Annexe

76

38