Scripts Shell Sous L (Extrait Du Livre)
Transcript of Scripts Shell Sous L (Extrait Du Livre)
Editions ENI
Programmation shell sous Unix/Linux
sh (Bourne), ksh, bash [2ème edition]
CollectionRessources Informatiques
Extrait
Les thèmes abordés dans ce chapitre permettront à l'utilisateur de paramétrer sonenvironnement de travail en tenant compte du shell utilisé.
A.Variables d'environnement
Un certain nombre de variables sont définies dans l'environnement du shell. Ellescontiennent des informations nécessaires au fonctionnement de l'interpréteur et/oudes commandes lancées à partir de celui-ci.
1. Liste des variables
La commande set donne la liste des variables définies dans le shell courant.
Exemple
$ set
HOME=/home/christie
LOGNAME=christie
PATH=/usr/bin:/bin
PS1='$ '
PS2='> '
TERM=vt100
...
2. Affichage de la valeur d'une variable
Le caractère spécial $ du shell permet de récupérer le contenu d'une variable.
Exemple
$ echo $HOME
/home/christie
$
�Ed
itio
nsEN
I-
All
righ
tsre
serv
ed
Paramétrage de l'environnement de travail
sh (Bourne), ksh, bash 77
3. Modification de la valeur d'une variable
Le shell permet d'initialiser ou de modifier des variables.
Exemple
$ variable=valeur
$ echo $variable
valeur
$
Si la valeur contient des caractères spéciaux du shell ($, >, espace...), il fautempêcher le shell d'interpréter ceux-ci en entourant la valeur avec des simplesquotes.
Utiliser des simples quotes est l'une des trois manières de masquer descaractères en shell. Ce point sera détaillé ultérieurement.
Exemple
Le symbole ">" (redirection) doit être masqué, l'espace (séparateur de mots sur laligne de commande) également :
$ variable='mot1 mot2 =>'
$ echo $variable
mot1 mot2 =>
$
Il ne faut pas mettre d'espace autour du signe =. Le shell ne comprendrait pasqu'il s'agit d'une affectation.
Chapitre 3
78 Programmation shell sous Unix/Linux
4. Principales variables
Les variables présentées ci-dessous possèdent une valeur au niveau du shell deconnexion. D'autres variables peuvent être définies ultérieurement.
a. HOME
Cette variable contient la valeur du répertoire d'accueil de l'utilisateur. Elle ne doitpas être modifiée.
b. PATH
La variable PATH contient une liste de répertoires qui sont explorés par le shelllorsqu'une commande externe est lancée.
En aucun cas, une commande n'est recherchée dans le répertoire courant sicelui-ci ne figure pas dans la variable PATH.
Exemples
$ echo $PATH
/usr/bin:/bin
$
La commande date est trouvée :
$ date
Tue Jan 28 17:51:23 MET 2003
$
En effet, elle se situe dans le répertoire /usr/bin :
$ find / name date 2 > /dev/null
/usr/bin/date
$
�Ed
itio
nsEN
I-
All
righ
tsre
serv
ed
Paramétrage de l'environnement de travail
sh (Bourne), ksh, bash 79
La commande ping n'est pas trouvée :
$ ping localhost
ksh: ping: not found
$
La commande est située dans le répertoire /usr/sbin qui n'est pas cité dans lavariable PATH :
$ find / -name ping 2> /dev/null
/usr/sbin/ping
$
Le répertoire courant n'est pas exploré s'il n'est pas cité dans PATH :
$ cd /usr/sbin
$ ping localhost
ksh: ping: not found
$
Modifier le contenu de la variable PATH :
$ PATH=$PATH:/usr/sbin
$ echo $PATH
/usr/bin:/bin:/usr/sbin
$
La commande ping est trouvée :
$ ping localhost
localhost is alive
$
Chapitre 3
80 Programmation shell sous Unix/Linux
Rechercher une commande dans le répertoire courant
Pour qu'une commande soit recherchée dans le répertoire courant, il faut ajouteren fin de variable PATH la chaîne :. ou simplement le caractère :.
ExemplePATH=/usr/bin:/usr/local/bin:/home/christie/bin:.
Équivalent à :PATH=/usr/bin:/usr/local/bin:/home/christie/bin:
c. PWD
ksh bash
Cette variable contient la valeur du répertoire courant. Elle est mise à jour par leshell dès que l'utilisateur change de répertoire. Cette variable peut être utilisée enksh pour faire apparaître la valeur du répertoire courant dans le prompt.
d. PS1
Cette variable contient la chaîne de caractères représentant le prompt principal.
Exemple
$ echo $PS1
$
$ PS1='Entrez une commande => '
Entrez une commande => date
Thu Jan 30 17:27:51 MET 2003
Entrez une commande =>
Avec le ksh et le bash, il est possible de paramétrer son prompt de telle façon qu'ilcontienne en permanence la valeur du répertoire courant.
�Ed
itio
nsEN
I-
All
righ
tsre
serv
ed
Paramétrage de l'environnement de travail
sh (Bourne), ksh, bash 81
Faire apparaître le répertoire courant dans le prompt en ksh
Il faut se servir de la variable PWD.
Exemple
Ici, le prompt est composé de deux caractères : le symbole "$" suivi d'un espace(cf. Figure 1) :
Figure 1 : Initialisation de PS1 avec le répertoire courant (1)
$
$ echo -$PS1-
-$ -
$
Le répertoire courant est /home/christie :
$
$ pwd
/home/christie
$
Chapitre 3
82 Programmation shell sous Unix/Linux
Editions ENI
Scripts Shell sous Linux
Mise en œuvre de 5 projets
CollectionSolutions Informatiques
Extrait
1 Présentation
L’objectif est de concevoir un script qui est capable de surveiller différents paramètres dusystème d’exploitation.
Ce projet met en place une stratégie de contrôle et de surveillance avec une exécution enarrière-plan. Le paramétrage est facilité par la mise à jour d’un fichier unique de configurationde l’application. Le dépassement des seuils d’alarmes peut entraîner une action correctivegrâce à l’exécution d’un script approprié à l’anomalie. Un administrateur peut recevoir une-mail envoyé automatiquement pour l’informer de l’anomalie.
La solution proposée permet une évolution aisée du script pour l’adapter à vos besoinsspécifiques de contrôle et de surveillance.
2 Cahier des charges
2.1 Contexte et besoins
Le service informatique souhaite disposer d’un mécanisme de surveillance de plusieurséléments :
- l’activité CPU du système d’exploitation ;
- l’utilisation de la mémoire du système d’exploitation ;
- le contrôle de processus, par le nombre de processus actifs ;
- le contrôle de fichiers, par la présence et la taille du fichier ;
- le contrôle de l’activité de certains services.
Les critères de surveillance doivent être facilement paramétrables. Le choix est d’exploiter unfichier de configuration.
Une action doit pouvoir être exécutée lors du déclenchement d’une alarme.
Le service souhaite disposer de la possibilité de désactiver une surveillance au sein du fichierde configuration, sans supprimer complètement la section descriptive du fichier.
Projet 4 - Script de surveillance
© Editions ENI - Toute reproduction interdite 203
2.1.1 Le suivi
Un fichier de journalisation peut être utilisé pour enregistrer l’ensemble des actions enréussite et en échec. Il assurera un suivi de l’ensemble du contrôle. Le fichier de journalisa-tion peut être global et unique pour l’ensemble des éléments à surveiller ou spécifique à unélément donné.
Un mail peut être transmis à un destinataire, il assure la fonction de rapport de surveillance.
2.2 Descriptif du script
Type de système d’exploitation : Linux.
Nom du script : detection_alarme.bash.
Choix du shell : le script s’exécutera en Bourne Again Shell.
Ce script s’exécutera avec le compte root du système.
L’ensemble du code doit faire partie d’un seul fichier script.
Les fonctionnalités du script doivent être :
- Un fichier distinct doit définir la configuration des éléments à surveiller.
- La syntaxe du fichier de configuration doit être vérifiée avant son exploitation.
- Le contrôle doit pouvoir s’exécuter d’une manière complète ou d’une manière ciblée surquelques éléments.
- La surveillance doit prendre en compte l’activité CPU, l’utilisation de la mémoire, desprocessus, des fichiers et des services.
- Les actions en fonction d’une alarme doivent être l’envoi d’un e-mail, la mise à jour d’unfichier de journalisation et l’exécution d’un script.
- Le ou les fichiers de journalisation doivent pouvoir être exportés sur un serveur desauvegarde distant.
Scripts Shell sous Linux - Mise en œuvre de 5 projets
204 © Editions ENI - Toute reproduction interdite
2.3 Syntaxe d’exécution du script
Syntaxe :
# detection_alarme.bash -X"
Exécution pour la surveillance d’alarmes.
# detection_alarme.bash -x element1[,element2, ...]]
Exécution pour une liste ciblée d’éléments à surveiller.
# detection_alarme.bash -S
Arrête la surveillance.
# detection_alarme.bash -a"
Analyse de la syntaxe du fichier de configuration.
# detection_alarme.bash -t [element1[,element2, ...]]
Transfert sftp du fichier de suivi.
# detection_alarme.bash -T [element1[,element2, ...]]
Transfert sftp différé du fichier de suivi.
# detection_alarme.bash -h
Pour afficher l’aide d’utilisation de la commande.
Le principe du script est d’être exploité par des administrateurs systèmes qui devrontl’exécuter sur la ligne de commande ou le planifier par l’utilitaire « crontab ».
- Ce script est principalement conçu pour une exécution en arrière-plan. Ceci explique lenombre limité de messages envoyés vers les sorties standard du système.
- Le démarrage de la surveillance correspond aux options x ou X (Execute). L’option Xdémarre un contrôle de tous les paramètres, alors que l’option x permet de cibler quelquesparamètres.
- L’option S (Stop) sert à l’arrêt de la surveillance. En effet, la surveillance correspond àplusieurs processus qui fonctionnent en arrière-plan, alors que le script de démarrage estterminé. Il est donc nécessaire d’envoyer le signal adéquat pour arrêter ces processus.
- Le transfert des fichiers de journalisation correspond aux options t et T (Transfert).L’option T traite tous les fichiers de logs, alors que l’option t permet de cibler quelquesfichiers.
- L’option a sert à vérifier la cohérence du fichier de configuration. Elle est touteparticulièrement utile lorsque ce fichier a été modifié.
- L’option h affiche l’aide de la commande.
Projet 4 - Script de surveillance
© Editions ENI - Toute reproduction interdite 205
3 Le fichier de configuration
3.1 La structure
Le fichier de configuration de l’application est unique et il est nommé /etc/detect_salarme.conf. Une variable du script permet de modifier le nom de ce fichier.
Ce fichier est constitué de plusieurs sections :
- La section PRINCIPALE pour le paramétrage global et commun aux autres sections.
- La section CPU pour le paramétrage de la surveillance de l’activité cpu du systèmed’exploitation.
- La section MEMOIRE pour le paramétrage de la surveillance de l’utilisation de la mémoiredu système d’exploitation.
- La section PROCESSUS pour le paramétrage de la surveillance d’un processus. Il estpossible d’avoir plusieurs sections de ce type.
- La section SERVICE pour le paramétrage de la surveillance d’un service système. Il estpossible d’avoir plusieurs sections de ce type.
- La section FICHIER pour le paramétrage de la surveillance d’un fichier. Il est possibled’avoir plusieurs sections de ce type.
Chaque section doit être séparée de la suivante par une ligne vide (un retour chariot ou ligneblanche). La dernière section doit également être suivie par une ligne vide.
La syntaxe d’une ligne est : l’attribut de gauche est le mot-clé, l’attribut de droite est lavaleur, au centre le caractère =, avec le caractère espace comme caractère séparateur dechamps.
Exemple : destinataire_mail = root
Scripts Shell sous Linux - Mise en œuvre de 5 projets
206 © Editions ENI - Toute reproduction interdite
3.2 La section principale
Exemple de section principale :
PRINCIPAL
destinataire_mail = root
frequence = 600
log_commun = /var/log/detect_alarm/commun.log
transfert = oui
transfert_destination = 192.168.184.130
transfert_localisation = /tmp/rep
transfert_login = root
transfert_passwd = /root/.ssh/alarme
Cette section est obligatoire et unique. Elle débute avec le mot-clé PRINCIPAL. Elle définitles paramètres globaux de l’application.
- Le mot-clé destinataire_mail indique le destinataire des mails envoyés en casd’avertissement ou d’alertes. Le service de messagerie doit être activé et la valeur peutêtre un compte local au système d’exploitation ou une adresse e-mail valide. Une valeurest obligatoire.
- Le mot-clé frequence définit le délai entre deux séquences de contrôle. Cette valeurest exprimée en secondes. Une valeur numérique est obligatoire.
- Le mot-clé log_commun définit le fichier de journalisation de l’application. Un fichierexistant est obligatoire.
- Le mot-clé transfert indique si le fichier de journalisation global devra être envoyélors d’une procédure de transfert. Une valeur est obligatoire (oui ou non). Dans le cas de« oui », les quatre mots-clés suivants doivent être définis.
- Le mot-clé transfert_destination définit l’adresse IP ou le nom du serveurdistant sur lequel doivent être transférés le fichier de journalisation global ainsi qued’autres fichiers de logs.
- Le mot-clé transfert_localisation définit le répertoire du serveur distant oùseront localisés les fichiers après le transfert.
- Le mot-clé transfert_login définit le compte utilisateur du serveur distant utilisépour la connexion lors du transfert.
- Le mot-clé transfert_passwd définit le mot de passe du compte utilisateur duserveur distant utilisé pour la connexion lors du transfert. Ce mot-clé peut définir le nomde la clé pour une connexion sécurisée (scp ou sftp). Dans ce dernier cas, la valeur doitêtre un chemin absolu pour accéder au fichier de la clé.
Projet 4 - Script de surveillance
© Editions ENI - Toute reproduction interdite 207
3.3 La section cpu
Exemple de section CPU :
CPU
actif = oui
cpu_warning = 65
cpu_alert = 90
mail_warning = oui
mail_alert = oui
action_warning = /shell/alarme/script_action_cpu_warning
action_alert = /shell/alarme/script_action_cpu_alerte
transfert = specifique
transfert_destination = 192.168.184.130
transfert_localisation = /sauvegardes/serveur1
transfert_login = root
transfert_passwd = xxxxxxxxxx
log_choix = specifique
log_fichier = /var/log/detect_alarm/cpu.log
Cette section est optionnelle et unique. Elle débute avec le mot-clé CPU. Elle définit les para-mètres de surveillance de l’activité cpu du système d’exploitation.
- Le mot-clé actif indique si l’activation de la surveillance de cette section doit êtreeffectuée. Tout en conservant la section au sein du fichier de configuration, il est possibled’en interdire la prise en compte pour la surveillance. Dans tous les cas, cette section seraanalysée syntaxiquement lors de la phase d’initialisation. Une valeur est obligatoire (oui ounon).
- Le mot-clé cpu_warning indique le seuil d’avertissement d’activité cpu. Il correspond àun pourcentage. Lorsque ce seuil est dépassé, le mécanisme d’avertissement est activé.Une valeur numérique est obligatoire.
- Le mot-clé cpu_alert indique le seuil d’alerte d’activité cpu. Il correspond à unpourcentage. Lorsque ce seuil est dépassé, le mécanisme d’alerte est activé. Une valeurnumérique est obligatoire.
- Le mot-clé mail_warning indique si un mail doit être envoyé lorsque le mécanismed’avertissement est activé. Une valeur est obligatoire.
- Le mot-clé mail_alert indique si un mail doit être envoyé lorsque le mécanismed’alerte est activé. Une valeur est obligatoire.
- Le mot-clé action_warning indique le script à exécuter lorsque le mécanismed’avertissement est activé. Cette valeur est optionnelle ; lorsqu’elle est définie, elle doitcorrespondre à un script existant.
Scripts Shell sous Linux - Mise en œuvre de 5 projets
208 © Editions ENI - Toute reproduction interdite