|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Bonjour,
D'avance je vous prie de m'excuser car je suis débutant ! Voilà mon problème : J'ai une action répétitive à effectuer sur mon fichier httpd.conf et ce pour plusieurs machines et pour plusieurs instances apche. Je souhaite avoir votre aide pour écrire un script shell qui automatise tout cela : - remplacer ServerRoot "xxxx" par ServerRoot "yyyy" du fichier httpd.conf dans tous les répértoires: " /production/travail/NOM_INSTANCE/apache/conf/httpd.conf " où NOM_INSTANCE est le nom (variable !) de l'instance apache. Dans mon répertoire /production/travail/, j'ai des dizaines de répertoires "NOM_INSTANCE"... Merci de votre aide... Bras |
|
|
10
|
|
|
#2 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
En gros, quelque chose comme ça :
Sur la liste des fichiers à modifier (avec find) Effectuer le remplacement de xxxx par yyyy (avec sed)
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
20
|
|
|
#3 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Au fait je n'ai pas une liste de fichers mais un seul fichier à modifier qui est httpd.conf. Par contre, je dois aller dans plusieurs répértoires "NOM_INSTANCE" pour y effectuer la même modification. Et c'est l'une de mes difficulté : comment automatiser le fait d'aller dans chaque NOM_INSTANCE séparément pour effectuer la modification, sauvegarder mon fichier et redemarrer apache.
|
|
|
10
|
|
|
#4 | |||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Code bash :
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
20
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Bonjour,
Code :
|
||
|
|
20
|
|
|
#6 | |||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Mes excuses, je ne vois pas le code à mettre dans la fonction modif_httpd(), est-ce ce code là : sed -i.bak '/ ServerRoot "xxxx"/ServerRoot "yyyy"/' /production/travail/{toto,titi,tata,tutu}/apache/conf/httpd.conf ou bien la seule liste des répertoires {toto, titi...}, un par ligne ? Par ailleurs, y a-t-il un moyen qui permet de ne pas écrire en vrac la liste des répértoires, car j'en ai vraiment beaucoup ? Une dernière question : si j'ai un autre répértoire /exploitation/NOM_INSTANCE/..../httpd.conf où je dois effectuer la même modif que dans /production/travail/NON_INSTANCE/.../httpd.conf, comment mettre tout cela dans un seul script qu'on lance en une seule fois au lieu de créer un second script /exploitation/NOM_INSTANCE/.../httpd.conf ? Merci |
|||
|
|
10
|
|
|
#7 | |||||||||||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Code bash :
Ou supprimer la fonction qui ne fait qu'une action et intégrer l'action directement dans le corps du for Code bash :
Mais je pense que la commande de N_Bah (qui m'impressionne généralement par ses raccourcis qu'il utilise) fait en une seule et unique ligne ce que fait tout mon script... Citation:
Code bash :
Ou alors, s'il s'agit de tous les répertoires situés dans /production/travail, passer par un ls (je sais que N_Bah adore )Code bash :
Citation:
Code bash :
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||||||||||||
|
|
10
|
|
|
#8 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Merci Sve@r pour tout !
Deux petites questions me viennent à l'esprit alors que je prépare le terrain pour tester : - Si je souhaite d'abord commencer par sauvegarder le fichier httpd.conf là où il est, c'est à dire dans son répértoire de chaque instance, comment je peux faire cela ? - Quid des droits des diffirents fichiers httpd.conf de chaque instance après le "sed -i.bak", sachant que mes repertoire ont pour user/group : web/prod ? A ce propos, à quoi sert le ".bak" ? Merci |
|
|
10
|
|
|
#9 | |||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Citation:
L'extension ".bak" permet de faire une sauvegarde du fichier modifié en le renommant avec l'extension ".bak" justement. A ce sujet, tu peux très bien renommer directement le fichier avec la date du jour sed -i.$(date '+%F') 's/xxx/yyy/' fich Juste un truc par rapport à la syntaxe de "sed" donnée plus haut, mes deux compères ont juste oublié de mettre la commande "s" (substitution) dans leur syntaxe : Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|||
|
|
20
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
corrigé! merci. |
|
|
10
|
|
|
#11 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Bonsoir,
Pouvez-vous SVP me dire pour ce même problème comment dans la foulée je peux faire ceci dans mon script : - Supprumer 2 lignes : xxx et yyy de mon fichier httpd.conf et les remplacer par une seule ligne zzz ? - Comment je peux mettre un commentaire devant une ligne appelons là nnn de mon fichier httpd.conf ? PS : j'ai toujours plusieurs INSTANCES dans /production/travail..., etc. Encore merci |
|
|
10
|
|
|
#12 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Citation:
Citation:
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
10
|
|
|
#13 | |||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Code bash :
Et que la ligne à mettre en commentaire était en 222 Donc te suffit d'adapter. Et si tu as d'autres trucs à faire et que tu sais le faire avec l'éditeur "vi" ben tu vois qu'on peut aussi l'automatiser dans un script donc tu rajoutes tes trucs avant ":wq!". Le caractère "^[" symbolise le "esc" qu'on tape dans "vi" pour quitter le mode insert. Il s'insère dans un script (édité lui-aussi avec "vi") en tapant "ctrl-m esc". Et s'il s'avérait qu'en fin de compte tous tes httpd.conf soient les mêmes, tu aurais alors tout avantage à n'en faire qu'un seul et créer des liens (réels ou symboliques peu importe) sur le httpd.conf de base. Ainsi un seul fichier donc une seule modif...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
10
|
|
|
#14 | |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Sve@r : après vérification, j'ai vu que d'une instance à l'autre, le contenu de mon fichier httpd.conf peut être différent, c'est à dire que la lignes n°100 et 101 par exemple de l'instanc X peuvent être 103 et 104 pour l'instance Y. Et c'est donc fastidieux de devoir ouvrir le fichier à chaque fois. Par contre, ce qui ne change pas, c'est le fait qu'une ligne donnée s'appelle bien et de fçon unique "XXX" (espace compris !). Comment je peux faire alors ? Merci |
|
|
|
10
|
|
|
#15 | |||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Code bash :
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
10
|
|
|
#16 | |||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
/xxx/ et /yyy/ représentent les lignes que je veux supprimer, et le :wq! on sort en sauvegardant. Mais que signifie : ozzz^[ /nnn/ I#^[ Une autre question : Est ce qu'on peut perfectionner le test : "ls /production/travail /exploitation | while read rep" de telle sorte qu'il se limite aux seules répértoires contenant contenant le fichier httpd.com ? Selon les machines, j'ai pas mal de répertoires qui n'ont rien à voir avec notre affaire... |
|||
|
|
10
|
|
|
#17 | |||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
zzz => c'est la ligne qu'on veut ajouter ^[ => je l'ai écrit hier à 19h54 => c'est "esc" (on tape "esc" sous "vi" pour quitter le mode insertion et repasser en mode commandes) Citation:
I => c'est insérer au début de la ligne # => c'est le caractère à insérer qui met la ligne en commentaire ^[ => comme tout à l'heure De plus, rien ne t'interdit de lancer toi-même "vi httpd.cond_de_test" et taper une à une toutes les commandes de ce script pour voir ce que ça fait... Citation:
Code bash :
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||||
|
|
10
|
|
|
#18 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Sve@r, grand Merci pour ton aide et surtout de ta patience!
Je vais mettre tout cela au propre, et le poster ici pour servir d'autres... S'il y a un truc qui cloche, je n'hésiterai pas à re-solliciter votre généreuse aide. |
|
|
01
|
|
|
#19 | ||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Bonjour,
Mon code ci-dessous marche très bien sur un Linux, mais ne marche pas sur Solaris 10 8/11 !! Sve@r : j'ai préféré finalement d'utiliser cette méthode qui fait la même chose que celle que t'as proposé avec "vi", mais en plus simple pour le débutant que je suis Code :
N.B.: je remettrai ici le script complet lorsqu'il sera entièrement terminé... Merci |
||
|
|
10
|
|
|
#20 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
En faisant un man sed sur Solaris, tu constateras sans doute que l'option -i n'est prise en charge.
Il ne reste plus qu'à rediriger la sortie de sed vers un fichier temporaire et remplacer le fichier d'origine par le temporaire pour la suite du traitement.
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com