Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/02/2014, à 19:40

casperfr

[résolu]Script pour suppression d'une section

Bonjour a toutes et a tous,
je suis nouveau dans la communauté ubuntu (serveur uniquement)
et donc tout aussi nouveau dans la création de script.

dans mes projets j'apprend a créé des sites sous wordpress, d'ou l'usage d'un serveur web local (ubuntu server 12.04)
je fais des réinstallations sans arret je suis donc passé a l'automatisation de ces différentes tache par des scripts.
je créé donc un dossier correspondant au nom de domaine,
dans ce dossier je créé le dossier www contenant le site web,
je télécharge et décompresse wordpress,
je donne les droits approprié au dossier et fichier qui en n'ont besoin,
je créé ensuite une entré dans le hosts de la machine correspondant au nom de domaine,
je créé le fichier conf correspondant a ces informations pour apache2
je redémarre apache2,
je créé ensuite un utilisateur portant le nom du domaine (pour des raisons de simplification) avec comme home celui correspondant au site,
puisque qu'avec proftpd quand je me connecte avec ce nom d'utilisateur il pointe sur le home quand je me connecte,
pour la création de l'environnement web je créé une base de donnée mysql du nom du domaine,
et pour terminer, je créés une entré dans le fichier conf de samba me permettant d'accédé a ce dossier via un windows pour me facilité l'accès aux fichiers du site depuis mon poste de travaille.

le script fonctionne parfaitement, ayant meme réussit a concevoir des menus pour que l'usage en soit facilité,

mon problème est le suivant,
ce serveur ne me sert que pour faire des essais et j'aimerais donc pouvoir revenir en arrière quand je le souhaite,
je peux donc supprimer sans problème le fichier conf correspondant a apache, je peux aussi supprimer l'utilisateur pour le ftp correspondant a ce domaine,
concernant le hosts, je fait une recherche grep sur le nom du domaine concerné et je peux donc supprimer la ligne sans problème puisque justement, il n'y a qu'une seule ligne,
pour ce qui est du samba, c'est plus problématique par ce que supprimer une ligne ne suffit pas, c'est plus une section a supprimer qu'une ligne,
je veux dire que quand je créé l'accès, le nom du partage, est écrit [nom_du_partage] donc j'ai compris comment le cherché via grep, je peux donc trouvé le numéro de la ligne et supprimer celle-ci,
le problème est toutes les informations qui son dedans je ne sais pas comment les détecters automatiquement pour permettre leur suppression,
sachant que via mon script je peux créé autant de domaine que je souhaite, il y a donc autant de section qui sont créé dans samba, il faut donc que je supprime la section correspondante a mon domaine jusqu'a la section suivante ou la fin du fichier, et sa je ne sais pas comment faire
j'arrive a lister les sections avec
grep -e "\[.*\]" /etc/samba/smb.conf
j'ai leur numéro de ligne
grep -n -e "\[.*\]" /etc/samba/smb.conf | cut -d: -f1
j'arrive aussi a ne pas prendre les sections qui sont en commentaire
grep -n -e "\[.*\]" /etc/samba/smb.conf | sed -e '/[ ]*#/d' -e '/[ ]*;/d' -e '/^$/d'
et leur numéro de ligne
grep -n -e "\[.*\]" /etc/samba/smb.conf | sed -e '/[ ]*#/d' -e '/[ ]*;/d' -e '/^$/d' | cut -d: -f1
mais je ne sais pas comment via ces techniques jeux peux en connaissant le numéro de ligne d'une section faire en sorte que je puisse prendre le numéro de ligne de la section suivante -1 ou la fin du fichier,
biensure a faire a la main c'est tout simple, mais je voudrais pouvoir le faire automatiquement via un script puisque celui ci m'affiche tous les partages je sélectionne celui que je veux effacé et le script fait le reste,
je présises quand meme que le nombre de ligne de la section est variable puisqu'elle dépendant des données qui ont été indiqué dans ce même script lors de la création,
peut etre que cela n'est pas possible via une "simple" ligne de commande sachant que je ne maitrise ni la création de script ni les expressions régulière,

je vous remercis par avance de toute l'aide que vous pourriez m'apporté ou si vous avez des idées pour permettre de m'aiguiller dans ce que j'aimerais faire.

Dernière modification par casperfr (Le 19/02/2014, à 11:03)

Hors ligne

#2 Le 18/02/2014, à 22:45

pires57

Re : [résolu]Script pour suppression d'une section

bonsoir, pourrais tu montrer un exemple de ton fichier samba et nous dire ce que tu veut supprimer? ce serais plus simple de voir par un exemple...


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#3 Le 18/02/2014, à 23:27

casperfr

Re : [résolu]Script pour suppression d'une section

Bonsoir et merci des conseil que tu pourrais m'apporter,
le fichier smb.conf évolue en fonction du script que j'ai créé,
celui ci a donc des tailles variables,
voila la fin de mon fichier /etc/samba/smb.conf

[1.site.local]
        path = /home/vhosts/1.site.local/www
        force user = 1.site.local
        force group = www-data
        comment = site www - 1.site.local
        public = yes
        security = share
        writable = yes
        browseable = yes
        read only = no
[site.local]
        force user = site.local
        force group = www-data
        comment = site www - site.local
        path = /home/vhosts/site.local/www
        public = yes
        security = share
        browseable = yes
[beta.site.local]
        force user = beta.site.local
        force group = www-data
        comment = site www - beta.site.local
        path = /home/vhosts/beta.site.local/www
        public = yes
        security = share
        writable = yes
        browseable = yes
        read only = no

a chaque fois que je créé un nouveau domaine mon scripte rajoute les informations au bout du fichier smb.conf
mais ces données rajouter sont variable en fonction des droit d'accès en écriture dans ce dossier.
comme je les créé via le script j'aimerais aussi pouvoir les supprimer via ce meme script,
je peux donc lister mes rajout en affichant que ce qui est entre crochés [.....] j'ai donc le numéro de ligne correspondant
j'arrive donc a obtenir les informations suivante

Server-Web : grep -n -e "\[.*\]" /etc/samba/smb.conf | sed -e '/[ ]*#/d' -e '/[ ]*;/d' -e '/^$/d'
33:[global]
292:[printers]
303:[print$]
340:[1.site.local]
350:[site.local]
358:[beta.site.local]

si je veux pouvoir éffacer toute la section 1.site.local je sais par exemple que je supprimer dans le fichier smb.conf de la ligne 340 a 350-1
donc :

sed '340,349d' /etc/samba/smb.conf

si je veux effacer la section beta.site.local je supprimer dans le fichier smb.conf de la ligne 358 a la fin du fichier,

dans mon script pour permettre l'effacement, je selectione le domaine a effacer par exemple je selectionne 1.site.local et le script me supprime automatiquement le fichier conf dans apache, l'utilisateur du ftp l'entré dans le hosts mais pour automatisé la suppression dans samba j'aimerais pouvoir trouvé le début et la fin de la section 1.site.local automatiquement, le début c'est simple mais la fin c'est un casse tête pour moi.
surtout que comme j'apprend un peux sur le tas je ne suis meme pas sur d'utilisé la bonne méthode et que peut etre que quelque chose est déja prévu pour ce cas.

Hors ligne

#4 Le 18/02/2014, à 23:56

pires57

Re : [résolu]Script pour suppression d'une section

au lieu de définir les numéros d'intervalle a sed, tu peut lui passer des variables en paramètre a la place mais il faudra que ton script aille chercher les bonnes variables sinon tu auras un probleme, tu devras donc allez chercher non plus tout ce qui est entre crochet pour tes lignes mais explicitement la chaine (le nom entre crochet qui précede le paragraphe que tu souhaite supprimer). Actuellement je ne peut pas le faire, d'autre le ferons peut être, sinon j'essayerais de faire quelques choses demain.


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#5 Le 19/02/2014, à 00:50

Postmortem

Re : [résolu]Script pour suppression d'une section

Salut,

section=site.local # à ajuster en fonction de la section à supprimer
sed -i '/^\['"$section"'\]$/{:a;N;$d;/\n\[.*\]$/!ba;s/.*\n\(.*\)/\1/}' /etc/samba/smb.conf

Pour que ça fonctionne, il faut que dans ton fichier de conf, les noms de section soient seuls sur leur ligne, qu'il n'y ait pas d'espaces avant ou après (quoique s'il y en a, on peut légèrement retoucher la commande pour que ça fonctionne)

Edit :
Pour être exact, il faudrait protéger les caractères qui sont spéciaux dans une expression rationnelle quand on initialise la variable section.
En initialisant section comme je l'ai fait, ça supprime bien la section site.local mais ça supprimerait aussi une section qui s'appellerait sitealocal ou site1local.
Le mieux serait donc d'initialiser la variable ainsi :

section="site\.local"
# ou
section=site\\.local

Dernière modification par Postmortem (Le 19/02/2014, à 00:59)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 19/02/2014, à 09:44

pingouinux

Re : [résolu]Script pour suppression d'une section

Bonjour,
@Postmortem : Belle utilisation de sed, mais je ne comprends pas l'utilité de la partie en rouge

sed -i '/^\['"$section"'\]$/{:a;N;$d;/\n\[.*\]$/!ba;s/.*\n\(.*\)/\1/}' /etc/samba/smb.conf

Hors ligne

#7 Le 19/02/2014, à 09:49

Postmortem

Re : [résolu]Script pour suppression d'une section

Salut,

pingouinux a écrit :

Bonjour,
@Postmortem : Belle utilisation de sed, mais je ne comprends pas l'utilité de la partie en rouge

sed -i '/^\['"$section"'\]$/{:a;N;$d;/\n\[.*\]$/!ba;s/.*\n\(.*\)/\1/}' /etc/samba/smb.conf

C'est si la section à supprimer est la dernière. Vu que je me base sur le prochain nom de section pour en supprimer une, si la section à supprimer était la dernière, ça n'aurait pas fonctionné sans ça.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 19/02/2014, à 09:56

pingouinux

Re : [résolu]Script pour suppression d'une section

Ah oui, très juste ! Merci pour l'explication. smile

Hors ligne

#9 Le 19/02/2014, à 10:35

casperfr

Re : [résolu]Script pour suppression d'une section

Bonjour a tous,

Merci pour votre aide,
la commande

sed -i '/^\['"$section"'\]$/{:a;N;$d;/\n\[.*\]$/!ba;s/.*\n\(.*\)/\1/}' /etc/samba/smb.conf

fonctionne parfaitement,

vous êtes vraiment géniaux,

Merci encore pour votre aide,

ps: désolé, je suis nouveau, comment puis je changé le titre pour marqué [résolu] merci

Dernière modification par casperfr (Le 19/02/2014, à 10:38)

Hors ligne

#10 Le 19/02/2014, à 11:01

pires57

Re : [résolu]Script pour suppression d'une section

Edites ton premier post pour changer le script
Bien joué postmortem


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#11 Le 19/02/2014, à 11:06

Postmortem

Re : [résolu]Script pour suppression d'une section

Je viens de penser à un souci avec ma commande : s'il y a des sections commentées juste après la section à supprimer, elles seront supprimées.
Voilà qui corrige le souci (et ça permet aussi de supprimer une section commentée si tu le souhaites) :

sed -i '/^ *#* *\['"$section"'\] *$/{:a;N;$d;/\n *#* *\[.*\] *$/!ba;s/.*\n\(.*\)/\1/}' /etc/samba/smb.conf

Dernière modification par Postmortem (Le 19/02/2014, à 11:35)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 19/02/2014, à 11:15

casperfr

Re : [résolu]Script pour suppression d'une section

Merci a toi Postmortem
c'est vraiment génial des personnes aussi compétente que vous,

vu que les insertions dans le fichier sont automatique via un script il n'y a logiquement pas lieu d'y avoir des commentaires, a moins effectivement d'une modification hors script,
je vais d'ailleur essayé de le faire plus propre pour le proposé dans la section script utiles,

si mes souvenirs sont bon, dans samba les commentaire sont avec des # mes peuvent aussi etre avec des ; mais je me trompe peut etre.

d'ailleur, j'ai vu qu'il y avait une section "Terminal, scripts et ligne de commande" peut etre que ce poste serais plus a sa place a cet endroit il faudrait qu'un modérateur le déplace.

Merci encore pour vos compétences.

Hors ligne