Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2011, 16h51   #1
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
Par défaut Comment modifier un fichier dans plusieurs répertoires ?

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
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 16h58   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 545
Points : 7 545
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
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours 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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 28/09/2011, 17h12   #3
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
Citation:
Envoyé par al1_24 Voir le message
En gros, quelque chose comme ça :

Sur la liste des fichiers à modifier (avec find)
Effectuer le remplacement de xxxx par yyyy (avec sed)
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.
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 22h36   #4
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par bras39 Voir le message
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.
Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
modif_httpd()
{
    # La fonction reçoit le nom complet à modifier en $1
    # Donc ici il faut écrire le code qui modifie $1 selon ce que tu dois faire
}
 
for rep in toto titi tata tutu
do
    modif_httpd "/production/travail/$rep/apache/conf/httpd.conf"
done
 
/etc/init.d/apache2 restart
__________________
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/09/2011, 04h21   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

Code :
1
2
3
sed -i.bak 's/ancien/nouveau/' /production/travail/{toto,titi,tata,tutu}/apache/conf/httpd.conf
 
/etc/init.d/apache2 restart
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/09/2011, 07h57   #6
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
Citation:
Envoyé par Sve@r Voir le message
Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
modif_httpd()
{
    # La fonction reçoit le nom complet à modifier en $1
    # Donc ici il faut écrire le code qui modifie $1 selon ce que tu dois faire
}
 
for rep in toto titi tata tutu
do
    modif_httpd "/production/travail/$rep/apache/conf/httpd.conf"
done
 
/etc/init.d/apache2 restart

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
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 08h55   #7
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par bras39 Voir le message
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
En fait j'avais pas bien lu et j'avais pas vu que la modif était juste de remplacer "ServerRoot xxxx" par "ServerRoot yyyy" mais on peut effectivement intégrer la ligne de commande de N_Bah dans mon script
Code bash :
1
2
3
4
5
6
7
8
9
10
11
modif_httpd()
{
    sed -i.bak 's/ServerRoot "xxxx"/ServerRoot "yyyy"/' "$1"
}
 
for rep in toto titi tata tutu
do
    modif_httpd "/production/travail/$rep/apache/conf/httpd.conf"
done
 
/etc/init.d/apache2 restart


Ou supprimer la fonction qui ne fait qu'une action et intégrer l'action directement dans le corps du for
Code bash :
1
2
3
4
5
6
for rep in toto titi tata tutu
do
    sed -i.bak 's/ServerRoot "xxxx"/ServerRoot "yyyy"/' "/production/travail/$rep/apache/conf/httpd.conf"
done
 
/etc/init.d/apache2 restart

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:
Envoyé par bras39 Voir le message
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 ?
Tu peux mettre la liste de tes répertoires dans un fichier qui se nommerait par exemple "listeRep". Le script donnerait alors ceci

Code bash :
1
2
3
4
5
6
cat listeRep | while read rep
do
    sed -i.bak 's/ServerRoot "xxxx"/ServerRoot "yyyy"/' "$rep/apache/conf/httpd.conf"
done
 
/etc/init.d/apache2 restart

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 :
1
2
3
4
5
6
ls /production/travail | while read rep
do
    sed -i.bak 's/ServerRoot "xxxx"/ServerRoot "yyyy"/' "$rep/apache/conf/httpd.conf"
done
 
/etc/init.d/apache2 restart


Citation:
Envoyé par bras39 Voir le message
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 ?
Pas de pb

Code bash :
1
2
3
4
5
6
ls /production/travail /exploitation | while read rep
do
    sed -i.bak 's/ServerRoot "xxxx"/ServerRoot "yyyy"/' "$rep/apache/conf/httpd.conf"
done
 
/etc/init.d/apache2 restart
__________________
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 09h12   #8
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
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
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 12h20   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Citation:
Envoyé par bras39 Voir le message
- 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 ?

A ce propos, à quoi sert le ".bak" ?
Le paramètre "-i" (--in-place) permet de modifier le fichier directement sans passer par un fichier temporaire (enfin si mais c'est transparent pour l'utilisateur).

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 :
1
2
3
4
modif_httpd()
{
    sed -i.bak 's/ ServerRoot "xxxx"/ServerRoot "yyyy"/' "$1"
}
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/09/2011, 13h20   #10
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154


corrigé!

merci.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 19h11   #11
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
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
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 19h26   #12
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par bras39 Voir le message
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 ?
Elles sont consécutives ou pas ?

Citation:
- Comment je peux mettre un commentaire devant une ligne appelons là nnn de mon fichier httpd.conf ?
Code :
sed 's/nnn/#&/' fichier
Mais bon ça reste de l'approximatif, il y a plein de critères à prendre en compte
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 19h54   #13
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par bras39 Voir le message
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 ?
Ben comme ça commence à devenir plus complexe, on peut quitter sed et passer direct à "vi"
Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ls /production/travail /exploitation | while read rep
do
    vi "$rep/apache/conf/httpd.conf" <<_EOT_ 1>/dev/null
:153
dd
:172
dd
ozzz^[
:222
I#^[
:wq!
_EOT_
done
 
/etc/init.d/apache2 restart
J'ai considéré que les lignes xxx et yyy étaient placées en ligne 153 et 172 et que la ligne zzz devait se mettre à la place de la ligne 172
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 23h40   #14
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
Citation:
Envoyé par zipe31 Voir le message
Elles sont consécutives ou pas ?



Code :
sed 's/nnn/#&/' fichier
Mais bon ça reste de l'approximatif, il y a plein de critères à prendre en compte
Oui, mes lignes sont consécutifs.

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
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/09/2011, 00h20   #15
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par bras39 Voir le message
Oui, mes lignes sont consécutifs.

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
Si tu sais le faire avec "vi" alors tu peux intégrer vi dans un script
Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ls /production/travail /exploitation | while read rep
do
    vi "$rep/apache/conf/httpd.conf" <<_EOT_ 1>/dev/null
/xxx/
dd
/yyy/
dd
ozzz^[
/nnn/
I#^[
:wq!
_EOT_
done
 
/etc/init.d/apache2 restart
__________________
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/09/2011, 02h10   #16
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
Citation:
Envoyé par Sve@r Voir le message
Si tu sais le faire avec "vi" alors tu peux intégrer vi dans un script
Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ls /production/travail /exploitation | while read rep
do
    vi "$rep/apache/conf/httpd.conf" <<_EOT_ 1>/dev/null
/xxx/
dd
/yyy/
dd
ozzz^[
/nnn/
I#^[
:wq!
_EOT_
done
 
/etc/init.d/apache2 restart
Désolé, je n'ai pas tout compris, merci de me corriger :
/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...
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/09/2011, 07h50   #17
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par bras39 Voir le message
Désolé, je n'ai pas tout compris, merci de me corriger :
/xxx/ et /yyy/ représentent les lignes que je veux supprimer, et le :wq! on sort en sauvegardant. Mais que signifie :
ozzz^[
o => ouvre une nouvelle ligne
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:
Envoyé par bras39 Voir le message
Citation:
Envoyé par bras39 Voir le message
- Comment je peux mettre un commentaire devant une ligne appelons là nnn de mon fichier httpd.conf ?
Mais que signifie :
/nnn/
I#^[
/nnn/ => tu deviens un poil boulet là
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:
Envoyé par bras39 Voir le message
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...
Code bash :
1
2
3
ls /production/travail/*/apache/conf/httpd.conf /exploitation/*/apache/conf/httpd.conf | while read rep
do
    ...
__________________
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/09/2011, 22h13   #18
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
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.
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/10/2011, 13h05   #19
Membre du Club
 
Femme
Inscription : septembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 54
Points : 52
Points : 52
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 Il s'agit de remplacer en une seule fois une ligne et de supprimer 2 autres dans mon fichier httpd.conf qui se trouve dans plusieurs répértoires différents...

Code :
1
2
3
4
for rep in /production/travail/*/apache2/
do
    sed -i.$(date '+%F%H%M') -e 's/^ServerRoot.*"xxxx"$/ServerRoot "yyyy"/' -e '/^MaxClients.*50$/d' -e '^ServerTokens.*production$/d' "$rep/conf/httpd.conf"
done
Comment puis-je le faire marcher sur un Solaris 8 et 10 ?

N.B.: je remettrai ici le script complet lorsqu'il sera entièrement terminé...

Merci
bras39 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 15h31   #20
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 545
Points : 7 545
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
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours 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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h17.


 
 
 
 
Partenaires

Hébergement Web