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 :

Lister et utiliser les utilisateurs d'un groupe


Sujet :

Shell et commandes GNU

  1. #21
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jlliagre 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
     
    #!/bin/bash
    for group
    do
        g=$(getent group $group)
        gid=$(echo "$g" | awk -F : '{print $3;exit}')
        (
            echo "$g" | awk -F : '{gsub(",","\n",$4);print $4}'
            getent passwd | awk -F : '$4=='$gid' {print $1}'
        ) | sort -u
    done
    Comme indiqué, j'ai utilisé GNU awk. C'est une extension de gawk, attention, "asorti" avec un seul "s".
    Ok fonctionne avec gawk... mais ne fonctionne pas
    Quand je mets mon groupe ainsi
    Il me répond rien

    Quand je mets mon groupe ainsi
    Il me répond "moi" (mon utilisateur qui a 2000 en gid)

    Quand je mets mon groupe ainsi
    Il me répond "moi" et "x"

    Il shunte donc le dernier élément de la ligne...
    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]

  2. #22
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Il shunte donc le dernier élément de la ligne...
    Je ne reproduit pas ce problème. Tous les membres y compris le dernier sont biens affichés ici, sous Gnu/Linux.

    Il se produit sous quel OS ?

    Qu'affichent grep :2000: /etc/group | od -c et getent group | grep :2000: | od -c ?
    ɹǝsn *sıɹɐlos*

  3. #23
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Je ne reproduit pas ce problème. Tous les membres y compris le dernier sont biens affichés ici, sous Gnu/Linux.

    Il se produit sous quel OS ?
    Je suis sur une Debian squeeze 32 bits

    Citation Envoyé par jlliagre Voir le message
    Qu'affichent grep :2000: /etc/group | od -c et getent group | grep :2000: | od -c ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    moi@virtualux:~/Projets$ grep :2000: /etc/group 
    utilisateur:x:2000:
     
    moi@virtualux:~/Projets$ grep :2000: /etc/group |od -c
    0000000   u   t   i   l   i   s   a   t   e   u   r   :   x   :   2   0
    0000020   0   0   :  \n
    0000024
     
    moi@virtualux:~/Projets$ getent group |grep :2000:
    utilisateur:x:2000:
     
    moi@virtualux:~/Projets$ getent group |grep :2000: |od -c
    0000000   u   t   i   l   i   s   a   t   e   u   r   :   x   :   2   0
    0000020   0   0   :  \n
    0000024
     
    moi@virtualux:~/Projets$ grep moi /etc/passwd
    moi:x:2001:2000:moi,,,:/home/moi:/bin/bash
     
    moi@virtualux:~/Projets$ ./a.sh utilisateur
    moi
     
    moi@virtualux:~/Projets$ ./c.sh utilisateur
     
    moi@virtualux:~/Projets$ cat c.sh
    #!/bin/bash
    for group
    do
      gawk -F: '
      FNR==NR&&$1==g{gid=$3;c=split($4,u,",");for(i in u)v[u[i]]=1;nextfile;next}
      gid&&$4==gid{v[$1]=1}
      END{m=asorti(v,w);for(i=1;i<m;i++)print w[i]}
      ' g=$group <(getent group) <(getent passwd)
    done
     
    moi@virtualux:~/Projets$ bash --version
    GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
     
    moi@virtualux:~/Projets$ gawk --version
    GNU Awk 3.1.7
    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]

  4. #24
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Compris, il n'était pas évident qu'il s'agissait de mon dernier script vu que tu avais inclus le précédent avant ton commentaire au lieu de celui qui posait problème.

    Voici la version corrigée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    for group
    do
      awk -F: '
      FNR==NR&&$1==g{gid=$3;c=split($4,u,",");for(i in u)v[u[i]]=1;nextfile;next}
      gid&&$4==gid{v[$1]=1}
      END{m=asorti(v,w);for(i=1;i<=m;i++)print w[i]}
      ' g=$group <(getent group) <(getent passwd)
    done
    ɹǝsn *sıɹɐlos*

  5. #25
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    C'est ce que faisait ma boucle. Sauf que elle, elle traitait n groupes l'un après l'autre alors que toi tu n'en traites qu'un seul !!!
    Faudrait quand-même que tu apprennes les bases des structures shell...
    Je connais les bases du shelle merci! sauf que dans mon cas je ne veux traiter qu'un seul et unique groupe d'où le fait que je supprime la première boucle for et que je remplace le $group pas $1 ou même carément le nom du groupe sans le passer en paramètre.

    Je confirme que suite à mes tests en condition réelles, le code suivant me renvoie bien ce que je souhaite!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    info=$(getent group $1)
    gid=$(echo $info |cut -f3 -d:)
     
    for user in $(cut -f1,4 -d: /etc/passwd |grep ":$gid$" |cut -f1 -d:)
    do
    	echo "$user"
    done
    Sujet résolu! Merci pour votre aide!

  6. #26
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mistertiger29 Voir le message
    Citation Envoyé par mistertiger29 Voir le message
    J'ai juste enlevé la première boucle for et remplacé le $group par $1 car le groupe dont je souhaite récupérer les utilisateurs sera passé en paramètre.
    Je connais les bases du shelle merci!
    Pourtant savoir écrire correctement son nom est une des bases à connaitre. Et (j'ai reparcouru tout le topic) avec le peu de code que tu nous as montrés; et surtout cette phrase où tu dis que tu as supprimé ma boucle parce que tu voulais faire ce qu'elle faisait déjà ; ben ce n'était pas vraiment probant...

    Citation Envoyé par mistertiger29 Voir le message
    sauf que dans mon cas je ne veux traiter qu'un seul et unique groupe
    Qui peut le plus, peut le moins. C'est bien quand un script fonctionne aujourd'hui mais si les modifs à faire pour l'améliorer demain sont minimes c'est encore mieux...

    Citation Envoyé par mistertiger29 Voir le message
    d'où le fait que je supprime la première boucle for et que je remplace le $group pas $1 ou même carément le nom du groupe sans le passer en paramètre.
    Mouais. Donc d'un code généraliste tu en fais un code restrictif. Ce n'est pas ce qu'on peut appeler une "évolution"...

    Citation Envoyé par mistertiger29 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    info=$(getent group $1)
    gid=$(echo $info |cut -f3 -d:)
     
    for user in $(cut -f1,4 -d: /etc/passwd |grep ":$gid$" |cut -f1 -d:)
    do
    	echo "$user"
    done
    Je confirme que suite à mes tests en condition réelles, le code suivant me renvoie bien ce que je souhaite!
    T'es sûr ? Parce que si moi si j'ai
    /etc/group
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    admin:x:1000:moi
    user:x:2000:
    et
    /etc/passwd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moi:x:2001:2000:...:/home/moi:/bin/bash
    ... bref des conditions réellement réelles où l'utilisateur "moi" est à la fois membre du groupe "user" et du groupe "admin" ben chez-moi, ça ne me renvoie que "user". Peut-être que c'est ce que tu souhaites mais cela ne correspond pas à ta demande d'origine. Ou alors t'as pas que enlevé ma boucle à mon script originel...
    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]

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Lister les utilisateurs d'un groupe AD
    Par Represente37 dans le forum VBScript
    Réponses: 0
    Dernier message: 17/02/2012, 14h17
  2. [Débutant] Lister les utilisateur d'un groupe ACTIVE DIRECTORY
    Par FromHell04 dans le forum VB.NET
    Réponses: 0
    Dernier message: 01/02/2012, 18h23
  3. LDAP Active directory récupérer les utilisateurs d'un groupe
    Par *alexandre* dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 19/01/2012, 09h58
  4. recherche code pour limiter une lister et utiliser les bouton suivant precedent
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/09/2006, 17h43

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