2. The Power of PowerPoint | thepopp.com 2
Dispensé par :
Jacques Polombwe
• Master in Computer Systems Security (Cyber-security and Cyber-defense)
from the International University of Tunis
• Dev’Ops Infrastructure Engineer
• Cisco Network Engineer
https://www.linkedin.com/in/jacques-
polombwe-3ab69b152/
LinkedIn
jacquespolombwe@gmail.com
Gmail
tumblr.com/bruce_beresford
tumblr
5. Pourquoi les scripts ?
Les scripts jouent un rôle important dans
l'administration système car ils permettent aux
administrateurs d'automatiser les tâches
répétitives, de gérer un grand nombre de
systèmes à grande échelle et d'assurer une
configuration cohérente sur différents
systèmes .
8. Le Shell
8
Le shell est l’interpreteur de commandes de Linux. C’est un
programme qui prend les commandes du clavier et les donne
au système d'exploitation pour qu'il les exécute. Autrefois,
c'était la seule interface utilisateur disponible sur un système
de type Unix tel que Linux. De nos jours, nous avons des
interfaces utilisateur graphiques (GUI) en plus des interfaces
de ligne de commande (CLI) telles que le shell.
Il existe plusieurs shells, tous partageant des points communs.
L’utilisateur est libre d’utiliser celui
qui lui convient le mieux parmi (entre autres) :
• le Bourne-Again shell (bash),
• le Korn shell (ksh),
• le C shell (csh),
• etc.
9. Le Shell
9
Le shell est aussi un langage de programmation qui comprend
non seulement les commandes, mais aussi des structures de
contrôle (constructions conditionnelles et boucles)
On peut stocker un ensemble de lignes de commandes dans un
fichier texte pour en faire un script shell exécutable, les commandes
sont exécutées de manière séquentielle.
Pour pouvoir être lancé, le fichier créé doit avoir le droit d’exécution
(chmod +x) ou le lancer en faisant bash nom_du_script.
Si la première ligne du fichier débute par #! (Shebang), elle doit être
suivie du chemin du shell à lancer. Si ce n’est pas le cas, le shell
courant l’exécutera.
10. Les permissions des scripts
10
Les permissions déterminent le niveau d'accès d'un
utilisateur à un fichier. Lorsqu'un utilisateur exécute un
programme et que celui-ci accède à un fichier, les
autorisations sont vérifiées pour déterminer si
l'utilisateur dispose des droits d'accès corrects au fichier.
Il existe trois types de permissions : lecture, écriture et
exécution. Chacune a une signification différente selon
qu'elle est appliquée à un fichier ou à un répertoire.
4 = r (lire)
2 = w (écrire)
1 = x (exécuter)
11. Le chemin
The Power of PowerPoint | thepopp.com 11
Lors de l’utilisation d’un programme, le shell utilise la
variable d’environnement PATH pour retrouver le
chemin d’accès à ce programme. quand vous tapez
une commande ("ls" par exemple), le shell regarde
dans le PATH qui lui indique où chercher le code de la
commande.
# echo $PATH
Par défaut
Parfois, vous souhaiterez peut-être installer des
programmes dans d'autres emplacements de votre
ordinateur, mais être en mesure de les exécuter
facilement sans spécifier leur emplacement exact.
# export PATH=$PATH:File/Place
Personnaliser
12. 12
Les variables
Une variable est une zone mémoire à laquelle
nous attribuons une valeur. La valeur assignée
peut être un nombre, du texte, un nom de
fichier, un périphérique ou tout autre type de
données. Une variable n'est rien d'autre qu'un
pointeur vers les données réelles
Pas besoin de déclarer les variables comme
en langage C, par exemple. On peut
directement affecter une valeur à une variable
de cette façon :
variable=valeur
13. Les variables
13
En début de script, on peut définir la valeur de départ des
variables utilisées dans le script.
VARIABLE="valeur"
Variable interne
Les variables d'environnement sont les variables spécifiques
à un certain environnement. Par exemple, chaque utilisateur
d'un système d'exploitation a son propre environnement.
Variable d’environnement
14. Les variables (suite)
14
Elles s'appellent comme ceci dans le script :
echo$VARIABLE
Il peut être utile de marquer les limites d'une variable avec
les accolades. echo${VARIABLE}
Par exemple :
#!/bin/bash
# script2.sh
PRENOM="esis"
echo"dossier personnel /home/$PRENOM"
exit
Variables internes
Vous pouvez déclarer une variable d'environnement requise
uniquement par votre utilisateur (par exemple, un jeton
secret) qui n'a pas besoin d'être exposée aux autres
utilisateurs.
Voici quelques exemples de variables d'environnement sous
Linux :
$USER: Utilisateur actuel
$HOME: Répertoire personnel de l’utilisateur actuel
$PATH: Chemin d’accès au programme shell
Variables d’environnement
15. Les variables spéciales
15
$0: nom du script. Plus précisément, il s'agit du paramètre 0
de la ligne de commande
$1,$2, ...,$9: respectivement premier, deuxième, ..., neuvième
paramètre de la ligne de commande
$*: tous les paramètres vus comme un seul mot
$@: tous les paramètres vus comme des mots séparés :
"@"équivaut à "$1" "$2" ...
$#: nombre de paramètres sur la ligne de commande
$-: options du shell
$?: code de retour de la dernière commande
$$: PID du shell
$!: PID du dernier processus lancé en arrière-plan
$_: dernier argument de la commande précédente
16. Substitution des commandes
16
Une fonctionnalité du shell très utile lors de la création de
scripts s'appelle la substitution de commandes. Cela permet
au script d'exécuter une commande shell et de rediriger la
sortie de la commande vers une variable au lieu d'afficher la
sortie sur le terminal.
sysadmin@localhost:~$ start=$(date)
sysadmin@localhost:~$ end=$(date)
sysadmin@localhost:~$ echo $start $end
Fri Sep 18 03:58:34 UTC 2020 Fri Sep 18 03:59:22 UTC 2020
17. 17
Interaction utilisateur
La commande echo pose une question à l’utilisateur
La commande read lit les valeurs entrées au clavier
et les stocke dans une variable à réutiliser.
echo"question"
read reponse
echo $response
On peut aller plus vite avec read-p:
read-p "question" reponse
echo $reponse
18. Fonctions
18
Pour structurer et réutiliser son code comme dans tout langage, on peut utiliser des
fonctions.
Pour déclarer une fonction, on utilise la syntaxe suivante :
maFonction() { instructions }
Ou de manière plus ancienne :
Function ma_fonction{ instructions }
La déclaration d'une fonction doit toujours se situer avant son appel. On les mettra donc
également en début de script.
Par exemple :
#!/bin/bash
# script3.sh
read-p"quel est votre prénom ?" prenom
reponse()
{
echo$0
echo"merci $prenom"
exit
}
reponse
exit
19. 19
Structure conditionnelle
et tests
Lors de l'écriture de scripts shell, il y aura des moments où un
administrateur voudra exécuter certaines commandes en
fonction des conditions . Une instruction conditionnelle peut
être utilisée pour déterminer les éléments suivants :
● Si deux variables de chaîne ou valeurs correspondent (ou
ne correspondent pas)
● Si deux variables ou valeurs numériques correspondent (ou
ne correspondent pas)
● L'état des fichiers (si le fichier existe, si le fichier est un
répertoire, etc.)
● Si une commande se termine avec succès
La commande test peut effectuer des comparaisons
numériques, des comparaisons de chaînes et des opérations
de test de fichiers.
21. Structure conditionnelle (suite)
21
Pour vérifier qu'une ou plusieurs
conditions sont remplies avant
d'effectuer un
traitement, on utilise souvent le if,
par exemple :
if [ $age -ge 18 ];
then echo Vous etes majeur(e)
fi
If
Le else (sinon) permet de compléter
le if pour effectuer un traitement
dans le cas ou la condition n'est pas
remplie. Exemple :
if [ $age -ge 18 ];
then echo Vous etes majeur(e)
else echo Vous etes mineur(e)
fi
Else
Le elif (else if) permet d'imbriquer
plusieurs if les uns dans les autres pour
pouvoir traiter tous les cas possibles :
if [ $feu = «rouge» ];
then echo N'avancez pas
elif [ $feu = «orange» ];
then echo Ralentissez
else echo Allez-y
fi
Elif
23. Exercices
The Power of PowerPoint | thepopp.com 23
Ecrivez un script qui indique le type de système d'exploitation.
Écrivez un script qui dit si le premier paramètre passé en ligne
de commande est un nom de fichier ou un nom de répertoire,
ou de type inconnu.
24. 24
Plusieurs conditions
Vous pouvez aussi combiner un certain nombre de conditions
les unes après les autres,
par exemple pour vérifier que l'àge entré par l'utilisateur est
situé entre 0 et 100 :
if [ $age -le 0 ] || [ $age -ge 100 ];
then echo l'age entré n'est pas correct
fi
Pour combiner plusieurs conditions, vous pouvez utiliser soit
OU ( || ), soit ET ( && ). Il s'agit
des opérateurs logiques :
OU signifie soit l'un, soit l'autre, soit les deux.
ET signifie l'un et l'autre obligatoirement.
25. 25
Case
La structure case permet de faire un traitement différent en
fonction de la valeur d'une
variable, par exemple :
#!/bin/bash
echo Quel est votre OS préféré ?
echo 1- Windows 2- Linux 3- Mac OS 4- Autre
read choix
case $choix in
1) echo " Vous préférez Windows " ;;
2) echo " Vous préférez Linux ";;
3) echo " Vous préférez Mac OS ";;
4) echo " Vous préférez un autre OS ";;
else ) echo « Vous devez taper un nombre entre 1 et 4 ! »;;
esac
26. 26
Les boucles
Les boucles servent en général à deux choses :
– Vérifier qu'une information saisie par l'utilisateur est
correcte et lui faire recommencer la saisie tant que ce
n'est pas correct
– Recommencer un certain nombre de fois la même
suite de commandes, d'autre part elles fonctionnent
toujours avec ces trois critères :
– Une valeur de départ
– Une condition d'entrée ou de sortie
– Une incrémentation
Les boucles While et Until testent une condition avant
d'effectuer le traitement, ce qui veut dire qu'il se peut
qu'on n'entre jamais dans la boucle.
28. 28
Boucle while
While signifie tant que, ce qui veut dire que la boucle sera
exécutée tant que la condition est respectée.
Exemples :
#!/bin/bash
i=1 # Valeur de départ 1
while [ $i -le 5 ]; do # Condition de sortie : i > 5
echo tour de boucle n° $i
i=$((i+1)) # Incrément de 1 par tour de boucle
done
continuer=o # Valeur de départ «o»
while [ $continuer = «o» ]; do # condition de sortie : pas o
echo Voulez-vous recommencer ? o/n
read continuer # Nouvelle valeur de continuer
done # (qui remplace l'incrément)
29. 29
Boucle for
A priori, la boucle for est utilisée quand on veut
exécuter un ensemble de commandes un nombre
précis de fois.
Exemple :
echo Combien voulez-vous d'étoiles ?
read nombre
for i in `seq $nombre`
do
echo -n *
done
30. Exercices
The Power of PowerPoint | thepopp.com 30
Ecrivez un script qui demande une valeur à l’entrée et affiche sa table de multiplication
jusqu’à la dixième itération.
Ecrivez un script qui demande une valeur à l’entrée et calcule sa factorielle.
Ecrivez un script shell qui ira dans tous les fichiers stockés dans le répertoire /etc et
affichera combien de fois le mot nameserver est repris dans le fichier resolv.conf
32. 32
Manipulation des
fichiers
Sous linux, la plupart des opérations sont effectuées sur des
fichiers. Et pour gérer ces fichiers, Linux a des répertoires
également appelés dossiers qui sont maintenus dans une
structure arborescente. Cependant, ces répertoires sont
également un type de fichier eux-mêmes. Linux a 3 types de
fichiers :
• Fichiers réguliers
• Répertoires
• Fichiers spéciaux : Pour les E/S
Chaque fois qu'un individu exécute une commande, il peut
prendre une entrée, donner une sortie ou faire les deux.
Ls, mkdir, cat, tail, head, less, touch, cp, rm, mv
33. stdin, stdout et stderr
33
Entrée standard Sortie standard Sortie d’erreur standard
Les entrées peuvent provenir soit
du clavier soit d’un fichier.
La sortie standard d’un
programme, que l’on
nomme stdout, est un flux qui va
contenir tout ce qui est affiché à
l'écran par la commande.
La sortie d'erreurs, est similaire à
la sortie standard à la différence
que ce flux est destiné aux erreurs
renvoyés par la commande. Par
défaut cette sortie est dirigée vers
le terminal, et s'affiche donc en
même temps que la sortie
standard.
34. Redirection
34
La redirection nous aide à rediriger ces fonctionnalités d'entrée et de sortie vers les fichiers ou dossiers
que nous voulons, et nous pouvons utiliser des commandes ou des caractères spéciaux pour le faire.
Par exemple, si nous exécutons la commande "date", cela nous donne une sortie à l'écran. Cependant, si
nous voulons enregistrer le résultat dans un fichier à la place, nous pouvons utiliser la redirection de
sortie.
35. 35
Redirection (suite)
$ cat ESIS_as_gars.txt
• Josué
• Ben
• David
$ cat ESIS_as_filles.txt
• Esther
• Consolate
• Sarah
$ cat ESIS_as_gars.txt ESIS_as_filles.txt >
ESIS_as.txt
$ cat ESIS_as.txt
• Josué
• Ben
• David
• Esther
• Consolate
• Sarah
36. 01 02 03
Types de redirection
36
Écraser la redirection Ajouter la redirection Redirection de fusion
« > » Sortie standard
cat > Esis_as.txt
« < » Entrée standard
cat < Esis_as.txt
« >> » Sortie standard
cat >> ESIS_as.tx
« << » Entrée standard
cat << EOF
jacques
EOF
"p>& q" Fusionne la sortie du flux
p avec le flux q
"p <& q" Fusionne l'entrée du flux
p avec le flux q
37. 37
Redirection (suite)
On pourrait souhaiter enregistrer les erreurs dans un
fichier à part pour ne pas les oublier et pour pouvoir les
analyser ensuite.
Pour cela, on utilise l'opérateur 2>( le chiffre 2 collé au
chevron).
$ cat ESIS_as_gars.txt ESIS_as_fillesz.txt >
ESIS_as.txt 2> ESIS_asz.txt
38. 38
Redirection de fusion
Parfois, on n'a pas envie de séparer les informations
dans deux fichiers différents. Heureusement, il est
possible de fusionner les sorties dans un seul et même
fichier. Comment ? Il faut utiliser la syntaxe suivante :
2>&1.
Cela a pour effet de rediriger toute la sortie d'erreurs
dans la sortie standard. Traduction pour l'ordinateur : «
envoie les erreurs au même endroit que le reste ».
Ici, 2>&1 signifie que STDERR redirige vers la cible
de STDOUT. Plus formellement, le message d'erreur
généré par « 2 » est fusionné avec la sortie actuelle
« 1 »
$ cat ESIS_as_gars.txt ESIS_as_fillesz.txt >
ESIS_as.txt 2>&1
39. Exercices
The Power of PowerPoint | thepopp.com 39
Créez un fichier contenant les noms de cinq personnes. Utilisez cat et la redirection de
sortie pour créer le fichier et utilisez un document ici pour terminer l'entrée.
41. 41
Find
La commande find sous UNIX est un utilitaire de ligne
de commande permettant de parcourir une hiérarchie
de fichiers. Il peut être utilisé pour rechercher des
fichiers et des répertoires et effectuer des opérations
ultérieures sur ceux-ci. Il prend en charge la recherche
par fichier, dossier, nom, date de création, date de
modification, propriétaire et autorisations. En utilisant '-
exec', d'autres commandes UNIX peuvent être
exécutées sur les fichiers ou dossiers trouvés.
42. Syntaxe:
The Power of PowerPoint | thepopp.com 42
find [d'où commencer la recherche] [l'expression détermine ce qu'il faut trouver] [-
options] [ce qu'il faut trouver]
Quelques options :
•-name esis : recherche les fichiers spécifiés par ‘esis'.
•-newer file : recherche les fichiers qui ont été modifiés/créés après 'file'.
•-perm octale : Recherche le fichier si la permission est 'octal'.
•-print : Affiche le nom du chemin des fichiers trouvés en utilisant le reste des
critères.
•-empty : recherche les fichiers et répertoires vides.
•-user nom: vrai si le fichier appartient à l’utilisateur nom.
43. Exemples
The Power of PowerPoint | thepopp.com 43
$ find ./for -name for.sh
$ find . -mtime+20 -print
$ find /home/jacques -type f -amin -40
$ find ./while -perm 764
$ find . -size +50k
$ find ./ -type f -name "*.txt" -exec grep ‘esis' {} ;
44. Exercices
The Power of PowerPoint | thepopp.com 44
Recherchez, dans toute l’arborescence, tous les fichiers de taille supérieure à
300 000 caractères. Puis affichez à l’écran de la liste de ces fichiers.
Recherchez tous les fichiers créés entre les 5 et 10 derniers jours
45. 45
Grep
Dans les systèmes Linux et Unix, Grep, abréviation de
« global regular expression print », est une commande
utilisée pour rechercher et faire correspondre les
fichiers texte contenus dans les expressions régulières.
46. Grep (suite)
46
grep [options] pattern [files]
Description des options
-c: Ceci n'imprime qu'un nombre de lignes qui correspondent à un motif
-h: affiche les lignes correspondantes, mais n'affiche pas les noms de fichiers.
-i: Ignore, la casse
-l: affiche uniquement la liste des noms de fichiers.
-n: affiche les lignes correspondantes et leurs numéros de ligne.
-v: Ceci imprime toutes les lignes qui ne correspondent pas au motif
-e exp: spécifie l'expression avec cette option. Peut utiliser plusieurs fois.
-f fichier: Prend des motifs du fichier, un par ligne.
-E: traite le modèle comme une expression régulière étendue (ERE)
-w: correspond au mot entier
-o: n'imprime que les parties correspondantes d'une ligne correspondante,
avec chacune de ces parties sur une ligne de sortie distincte.
47. Grep(suite)
The Power of PowerPoint | thepopp.com 47
$ grep “[^aeiou]” file1 #Match all lines that do not contain a vowel
$ $ grep -i “hello”
$ grep “done$” file1 #Match all lines that end with ‘done’. E.g: “well done”
48. 48
Expressions régulières
Les expressions régulières permettent de décrire des
motifs formés de caractères
Les caractères spéciaux pour les expressions
régulières sont les suivants :
| . * + ? ^ $ ( ) [ ] { }
Exemples
a : le caractère a
[i n] : un caractère appartenant à l'ensemble ijklmn
. : un caractère quelconque
. : le caractère .
[^0 9] : tout caractère autre qu'un chiffre
^linux$ : une ligne ne contenant que linux
^$ : une ligne vide
[A Z]{8} | [0 9]{4} : 8 lettres majuscules ou 4 chiffres
49. Expressions régulières (suite)
The Power of PowerPoint | thepopp.com 49
esis{2} : esis et aucune autre chaîne : Le quantifieur {2} n’est appliqué qu’au dernier s
(esis){2} : esisesis et aucune autre chaîne :Le quantifieur {2} est appliqué à
l’expression esis