Quel est l'ID de groupe de ce nom de groupe?

27

Comment obtenir l'ID de groupe GID en donnant le nom du groupe.

La sortie serait par exemple:

Group adm with GID=4
Maythux
la source

Réponses:

41

Utilisez la getentcommande pour traiter les groupes et les informations utilisateur, au lieu de les lire manuellement /etc/passwd, /etc/groupsetc. Le système lui-même utilise /etc/nsswitch.confpour décider d'où il obtient ses informations et les paramètres des fichiers peuvent être remplacés par d'autres sources. getentobéit à cette configuration. getentimprime les données, quelle que soit la source, dans le même format que les fichiers, afin que vous puissiez ensuite analyser la sortie de la même manière que vous le feriez /etc/passwd:

getent group sudo | awk -F: '{printf "Group %s with GID=%d\n", $1, $3}'

Notez que, pour un nom d'utilisateur, c'est beaucoup plus facile. Utilisation id:

$ id -u lightdm
105
muru
la source
Ok, awkest plus court que perl=)
AB
20

Cela peut être fait simplement avec cut:

$ cut -d: -f3 < <(getent group sudo)
27

getent group sudoobtiendra la ligne concernant le sudogroupe du /etc/groupfichier:

$ getent group sudo
sudo:x:27:foobar

Ensuite, nous pouvons simplement prendre le troisième champ délimité par :.

Si vous voulez la chaîne de sortie en conséquence, utilisez la substitution de commandes dans echo:

$ echo "Group sudo with GID="$(cut -d: -f3 < <(getent group sudo))""
Group sudo with GID=27
heemayl
la source
% echo "Group cdrom with GID="$(cut -d: -f3 < <(getent group sudo))"" Group cdrom with GID=27, s'il vous plaît un peu plus générique =)
AB
1
Pourquoi la substitution de processus? Qu'est-ce qui ne va pas GID="$(getent group cdrom | cut -d: -f3)"?
kos
@kos Je n'aime pas faire tourner les choses en sous-shell sauf si c'est un must .....
heemayl
@AB Modifié ...
heemayl
Mais c'est POSIX ...: '(Non, je plaisante, je ne savais vraiment pas la différence. +1
kos
1

des réponses plus compliquées sont toujours appréciées - j'apprends tellement en les lisant très honnêtement.

Je suis tombé sur cette page parce que je cherchais l'identifiant de groupe de mon groupe de messagerie et je ne savais pas où ces informations étaient stockées.

vos réponses sont excellentes - voici la réponse simple que j'ai trouvée

def @ fourof4: / home $ cat / etc / group | courrier grep

courrier: x: 8:

Je sais que cela ne trie pas la pièce d'identité, mais cela a servi mon objectif.

Blockquote Essayez ceci: awk -F: '/ sudo / {print "Group" $ 1 "avec GID =" $ 3}' / etc / group - AB 23 juin 15 à 15:51 Blockquote

je vois cela aussi mentionné en plus de celui que j'ai cité .... tout le monde obtient mon amour - désolé si vous m'avez manqué

c'est ce qui m'a guidé vers ce dossier.
Merci et continuez à me nourrir de l'excellent sous toutes les formes que vous souhaitez! def

def
la source
0

Utilisation d' perlune doublure:

% perl -ne '@elements=(split /:/); printf "Group %s with GID=%s\n",$elements[0],$elements[2]' <<< $(getent group sudo)
Group sudo with GID=27

ou plus court (et mieux)

% perl -F/:/ -ane 'printf "Group %s with GID=%s\n",$F[0],$F[2]' <<< $(getent group sudo)
Group sudo with GID=27
UN B
la source
2
Je suis sûr que Perl peut faire le fractionnement pour vous, je pense que l' option -Fou -lfait ça.
muru
0

Un hack pour le nécessaire: (peut-être qu'il y a peut-être une bien meilleure réponse)

awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep "group-name"

Version plus simple (Merci à @AB):

awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group 

Exemple:

$ awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep sudo 
Group sudo with GID=27
Maythux
la source
1
Essayez ceci:awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group
AB
Voir UUOC
kos