Intenté buscar en Google pero no llegué a ninguna parte. ¿Cómo puedo enumerar a todos los miembros de un grupo llamado mygroup
desde la línea de comandos en OS X?
$ dscl . list /groups
me conseguirá todos los grupos ... pero ¿cómo puedo ver los miembros de cada grupo?
macos
command-line
user-accounts
Meltemi
fuente
fuente
dscacheutil -q group -a name admin
solo me dio 1 resultado, mientras que el script de shell de la respuesta aceptada me dio 2 resultados.No hay un comando estándar que enumere todos los miembros de un grupo en OS X, así que aquí hay una función de shell que hace eso:
Copie la línea de comandos anterior en la Terminal y luego escriba (donde mygroup es el nombre de un grupo existente).
members mygroup
Alguna explicación para los interesados:
Hay cinco maneras diferentes (que yo sepa) de que un usuario puede ser miembro de un grupo en OS X. No se garantiza que el comando genere todos, o incluso ninguno, de los miembros de mygroup , porque la membresía también proviene de los usuarios ' ID de grupo principal , membresía por UUID del usuario , herencia de membresía de un grupo a otro y membresías calculadas por el sistema, como el grupo todos .
dscl . -read /Groups/mygroup GroupMembership
Entonces, en lugar de tratar de hacer un seguimiento de todo eso, parece una mejor idea simplemente verificar la membresía de cada usuario en el sistema (usando dsmemberutil ), y eso es lo que hacen la función de shell y el script a continuación.
Este script de miembros es equivalente a la función de shell, pero tiene un mejor manejo de la entrada no válida:
Información suplementaria:
Las cinco formas de ser miembro del grupo son:
Estos se pueden explorar con comandos como
dscl . -read /Groups/somegroup
Ejemplo de 4 : Composición de la impresión __lpoperator_ grupo de operadores se hereda por miembros del grupo de impresión __lpadmin_ administrador, y la pertenencia a ese grupo es heredado por los miembros del administrador de grupo.
Ejemplo de 5 :
VEA TAMBIÉN
id (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , uuid (3)
fuente
Nota: Esta fue mi respuesta inicial, escrita antes de darme cuenta de que esta respuesta todavía da un resultado incompleto . (Por ejemplo, se encuentra ningún miembro de la todos grupo!) Así que escribí una mejor respuesta, que consta de una secuencia de comandos que enumera todos los miembros de un grupo en OS X .
mygroup 's propiedad GroupMembership se puede imprimir con dscl como esto:
Pero no se garantiza que esto genere todos (o incluso ninguno) de los miembros del grupo. Lo que falta son los usuarios que son miembros del grupo solo al tenerlo como su ID de grupo principal .
Un ejemplo común de esto en OS X son las cuentas de inicio de sesión regulares, que tienen al personal (grupo 20) como su grupo principal, pero no figuran en la propiedad GroupMembership del grupo de personal .
Esos usuarios se pueden encontrar buscando el ID numérico del grupo primario (gid) como este ejemplo para el grupo de personal (gid 20):
y el gid numérico (PrimaryGroupID) de mygroup se encuentra por:
fuente
Para obtener todos los grupos en los que se encuentra un usuario , puede usar lo siguiente:
Salida de ejemplo:
Utilizando el comando anterior, es posible obtener todos los usuarios que pertenecen a un grupo :
OSX :
Unix :
fuente
TENGA CUIDADO: El comando anterior no siempre muestra una lista completa de TODOS los miembros del grupo. Por ejemplo, para el grupo "personal" solo se obtiene "raíz" como miembro del grupo que está incompleto. Para verificarlo, use uno de los siguientes comandos como usuario predeterminado (NO "root"):
id -Gn
Ogroups
Como resultado, verá todos los grupos a los que pertenece su usuario predeterminado. Uno de ellos debería ser "personal". Por lo tanto, además de "root" hay más miembros del grupo "staff", que no están listados por el comando
dscl . -read /Groups/[groupname] | grep GroupMembership
. Lo mismo ocurre con el comandodscacheutil -q group -a name staff
que también sugiere que solo "root" es un miembro del grupo "staff", que obviamente está incompleto.Arne Stenström ya proporciona aquí el único método confiable para obtener TODOS los miembros de un grupo en el terminal en OSX. Esto está usando su función de shell resp. Su guión de shell. ¡Ambos funcionan muy bien!
fuente
Mando
Similar a la respuesta de @ duperuser, lo siguiente imprimirá solo a los usuarios del grupo
admin
con espacios intermedios:Salida
Ejecutar el comando anterior producirá algo como esto:
Descompostura
El
dscacheutil
comando se utiliza para consultar información sobre varias categorías de la memoria caché del servicio de directorio del sistema. La-q
opción le permite especificar la categoría que desea consultar. Las categorías disponibles son grupo, host, montaje, protocolo, rpc, servicio y usuario. Además, consultamos esa categoría especificando un par de valores clave con la-a
opción. En este caso, queremos enumerar el grupo que tiene la clavename
igual al valoradmin
. Eldscacheutil
comando anterior produce resultados como este:A continuación, canalizamos este texto
grep
y seleccionamos la línea que contiene la cadenausers:
al principio. La-e
opción hace que grep reconozca expresiones regulares . El^
carácter especifica que queremosusers:
estar al comienzo de la línea.Esto nos da
Finalmente, pasamos esto a sed y reemplazamos el texto
users:
con la cadena vacía. En sed , la primera letras
significa sustituir. El texto entre el primer par de barras (/users: /
) es lo que queremos reemplazar, y el siguiente par de barras (//
) es lo que queremos sustituir (en este caso, nada).fuente
Aquí hay una implementación para este problema que se derivó de una implementación en una discusión relacionada . La rutina es algo genérica, con un enlace de búsqueda de servicio de directorio para cualquier plataforma / arquitectura específica, por lo que puede usarse sin modificación en una red heterogénea. Hemos instalado un enlace simbólico a esta utilidad llamada
zed
. Otros orígenes para esta implementación se mencionan en la sección de atribución del script. Esta herramienta está diseñada para ejecutarse al menos en OSX, HP-UX, Linux y SunOS, pero no ha sidoprobado en SunOS y HP-UX. La secuencia de comandos se probó en la medida de lo posible en Ubuntu Linux 12.04 y Mavericks OSX 10.9.1. El resultado de este script coincide con el resultado de la primera implementación del script de shell para este problema, y por lo tanto se considera correcto.fuente