IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comment modifier un fichier dans plusieurs répertoires ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    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

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    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.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 389
    Points
    19 389
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    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

  9. #9
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 389
    Points
    19 389
    Par défaut


    corrigé!

    merci.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    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

  12. #12
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    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 ?

    - Comment je peux mettre un commentaire devant une ligne appelons là nnn de mon fichier httpd.conf ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Elles sont consécutives ou pas ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  17. #17
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ls /production/travail/*/apache/conf/httpd.conf /exploitation/*/apache/conf/httpd.conf | while read rep
    do
        ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    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.

  19. #19
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  20. #20
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/10/2008, 09h00
  2. Réponses: 3
    Dernier message: 30/05/2008, 10h39
  3. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  4. Réponses: 1
    Dernier message: 30/10/2007, 00h07
  5. Réponses: 1
    Dernier message: 27/08/2007, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo