Scripts Shell Sous L (Extrait Du Livre)

14
Editions ENI Programmation shell sous Unix/Linux sh (Bourne), ksh, bash [2ème edition] Collection Ressources Informatiques Extrait

Transcript of Scripts Shell Sous L (Extrait Du Livre)

Page 1: Scripts Shell Sous L (Extrait Du Livre)

Editions ENI

Programmation shell sous Unix/Linux

sh (Bourne), ksh, bash [2ème edition]

CollectionRessources Informatiques

Extrait

Page 2: Scripts Shell Sous L (Extrait Du Livre)

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

Page 3: Scripts Shell Sous L (Extrait Du Livre)

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

Page 4: Scripts Shell Sous L (Extrait Du Livre)

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

Page 5: Scripts Shell Sous L (Extrait Du Livre)

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

Page 6: Scripts Shell Sous L (Extrait Du Livre)

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

Page 7: Scripts Shell Sous L (Extrait Du Livre)

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

Page 8: Scripts Shell Sous L (Extrait Du Livre)

Editions ENI

Scripts Shell sous Linux

Mise en œuvre de 5 projets

CollectionSolutions Informatiques

Extrait

Page 9: Scripts Shell Sous L (Extrait Du Livre)

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

Page 10: Scripts Shell Sous L (Extrait Du Livre)

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

Page 11: Scripts Shell Sous L (Extrait Du Livre)

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

Page 12: Scripts Shell Sous L (Extrait Du Livre)

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

Page 13: Scripts Shell Sous L (Extrait Du Livre)

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

Page 14: Scripts Shell Sous L (Extrait Du Livre)

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