Il n'y a pas de commande standard qui répertorie tous les membres d'un groupe dans OS X, alors voici une fonction shell qui le fait:
members () { dscl . -list /Users | while read user; do printf "$user "; dsmemberutil checkmembership -U "$user" -G "$*"; done | grep "is a member" | cut -d " " -f 1; };
Copiez la ligne de commande ci-dessus sur le terminal, puis tapez (où groupe est le nom d'un groupe existant).members mygroup
Quelques explications pour ceux qui sont intéressés:
À ma connaissance, un utilisateur peut appartenir à un groupe sous OS X de cinq manières différentes. La commande ne permet pas de générer tous les membres, ni même aucun des membres de mon groupe, car leur appartenance provient également d'utilisateurs. ' ID de groupe principal , appartenance par UUID de l'utilisateur , héritage de l'appartenance d'un groupe à un autre et appartenances calculées par le système, telles que le groupe tout le monde .dscl . -read /Groups/mygroup GroupMembership
Donc, plutôt que d'essayer de garder une trace de tous ceux-ci, il semble être une meilleure idée de simplement vérifier l'adhésion de chaque utilisateur du système (en utilisant dsmemberutil ), et c'est ce que font la fonction shell et le script ci-dessous.
Ce script de membres est équivalent à la fonction shell, mais permet une gestion plus agréable des entrées non valides:
#!/bin/bash
# members -- list all members of a group
#
# SYNOPSIS
# members groupname
#
# http://superuser.com/questions/279891/list-all-members-of-a-group-mac-os-x
# by Arne
# Expected to work on Mac OS 10.5 and newer, tested on 10.6 and 10.7.
# It could be rewritten to work on 10.4 by using "dseditgroup -o checkmember"
# instead of "dsmemberutil checkmembership".
# By using dseditgroup, the script could also be extended to handle
# other Directory Service nodes than the default local node.
#
the_group="$1"
# Input check and usage
if [[ $# != 1 || $1 == -* || $1 =~ [[:space:]] ]]; then
echo "Usage: ${0##*/} groupname" >&2
echo "Lists all members of the group." >&2
exit 64
elif (dsmemberutil checkmembership -U root -G "$the_group" 2>&1 \
| grep "group .* cannot be found") >&2; then
exit 1
fi
# Check every user
exec dscl . -list /Users \
| while read each_username
do
printf "$each_username "
dsmemberutil checkmembership -U "$each_username" -G "$the_group"
done \
| grep "is a member" | cut -d " " -f 1
# eof
Informations complémentaires:
Les cinq façons d'être membre du groupe sont:
- PrimaryGroupID de l'utilisateur
- Listé dans le GroupMembership du groupe
- UUID listé dans le groupe de groupmembers
- Appartenance héritée du groupe X en tant que membre du groupe Y, répertorié dans les groupes imbriqués du groupe X
- Adhésion calculée par le système
Ceux-ci peuvent être explorés avec des commandes comme dscl . -read /Groups/somegroup
Exemple 4 : les membres du groupe Print Administrator __lpoperator_ héritent de l'appartenance au groupe d'opérateurs d'impression, tandis que les membres du groupe admin héritent de l'appartenance à ce groupe.
Exemple de 5 :
$ dscl . -read /Groups/netaccounts Comment
Comment:
Group membership calculated by system
Accounts from a remote directory server
$
VOIR AUSSI
id (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , uuid (3)