#1 Le 26/09/2013, à 00:34
- l.mery
[Résolu] Comparaison entre deux paragraphes
Salut,
Je suis débutante en Shell, j'aimerais bien votre aide.
Je dois faire un script qui va parcourir un fichier de configuration et voir si mes paramètres sont corrects en se basant sur un ensemble de préconisations.
exemple :
pour mon fichier de configuration dns named.conf
le script doit aller lire la configuration de la zone "home4" et confirmer qu'elle est correcte en faisant la comparaison avec la directive suivante :
#configuration home4 :
zone "home4.fr" {
type master;
file "/etc/bind/zones/db.home4.fr";
allow-transfer {213.186.3.120;};
};
avez- vous une idée sur la commande que je peux utiliser pour cette comparaison ?
merci par avance pour votre aide
Mer
edit modo : suppression de la mention « Urgent » du titre.
Dernière modification par l.mery (Le 28/09/2013, à 19:00)
Hors ligne
#2 Le 26/09/2013, à 01:44
- nesthib
Re : [Résolu] Comparaison entre deux paragraphes
Puisqu'il s'agit de parser un fichier de configuration (c'est une opération complexe), je te conseille d'utiliser python et la bibliothèque iscpy.
Tu peux installer iscpy via PIP :
sudo apt-get install python-pip
sudo pip install iscpy
Ensuite iscpy fait (presque) tout le travail :
with open('/…/named.conf') as f:
conf = iscpy.ParseISCString(f.read())
default_values = {'allow-transfer': {'213.186.3.120': True},
'file': '"/etc/bind/zones/db.home4.fr"',
'type': 'master'}
ok = False
if conf.has_key('zone "home4.fr"'):
ok = True
for key, value in default_values.iteritems():
if not (conf['zone "home4.fr"'].has_key(key) and conf['zone "home4.fr"'][key] == value):
ok = False ; break
print('fichier de configuration %s' % ('correct' if ok else 'incorrect'))
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 26/09/2013, à 04:11
- nesthib
Re : [Résolu] Comparaison entre deux paragraphes
Oui, tu peux très bien faire ça avec awk, mais à moins d'y passer beaucoup de temps, tu n'auras pas un vrai parseur (ce qui est requis pour réellement vérifier que la syntaxe est correcte). La comparaison sera donc limitée. Si tu dois juste vérifier que le bloc est présent tel quel dans le fichier de conf, la solution est triviale
Pour utiliser awk, il te faudra jouer avec les séparateurs d'enregistrements.
Puisqu'il semble que ta demande soit pour répondre à un exercice, je ne te donnerai pas de solution toute faite et je t'invite plutôt à essayer par toi même et à proposer ici une solution.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#4 Le 26/09/2013, à 04:38
- l.mery
Re : [Résolu] Comparaison entre deux paragraphes
Ok Merci, je travaillerai dessus et je le posterai ici une fois terminée
[Pour précision , ce n'est pas un exercice, c'est plutôt un projet/besoin interne dont l'objectif est de parcourir/vérifier non seulement les fichiers de conf dns mais aussi ceux d'un grand nombre de serveurs Postfix , dhcpd, NFS , squid...et voir si c'est conforme aux préconisations (je viens d'intégrer le service, du coup on me donne pas tous les droits sur les machines ) ]
Hors ligne
#5 Le 27/09/2013, à 04:08
- nesthib
Re : [Résolu] Comparaison entre deux paragraphes
Je réitère ma suggestion d'utiliser python. La plupart des distribution GNU/Linux ont python d'installé car ce langage fait partie intégrante du système, es-tu sûre que python n'est pas installé ? En ce qui concerne la bibliothèque que je te suggérait, elle n'est pas installée par défaut mais ça n 'est pas un problème, tu peux soit l'installer en tant qu'utilisateur, soit mettre le module dans le dossier de ton script. Tout ceci ne requiert pas les droits admin.
Pourquoi est-ce que j'insiste sur python ? Parce qu'il y a une différence énorme entre vérifier qu'un bloc fixe de texte est présent et vérifier que sémantiquement des instructions sont présentes. Avec un simple grep/awk/… tu pourras vérifier le premier cas, mais s'il y a de légères variations (commentaires, espaces, tabulations, ordre des lignes…) tu pourras te retrouver avec des faux négatifs. À l'inverse, un parseur analyse la « grammaire » de ton fichier de configuration et ne se souciera pas de ces variations. La question est donc d'avoir à disposition un parseur qui va analyser ton fichier de conf. Tu as plusieurs langages de haut niveau qui possèdent des bibliothèque effectuant ce travail, par exemple perl et python. Je pense que python est le plus simple d'accès si tu est débutante.
Si ton script doit être utilisé dans un véritable environnement de production, je t'assure que la méthode consistant à chercher le bloc tel quel n'est pas propre.
En ce qui concerne les autres fichiers de configuration, il te faudra vérifier le type de fichier de config et adapter en conséquence.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#6 Le 27/09/2013, à 19:01
- l.mery
Re : [Résolu] Comparaison entre deux paragraphes
Merci beaucoup pour toutes ces informations
Hors ligne