Recientemente he estado creando nuevos usuarios y asignándolos a ciertos grupos. Me preguntaba si hay un comando que muestra todos los usuarios asignados a un determinado grupo. He intentado usar el comando 'grupos', sin embargo, cada vez que lo uso, dice 'grupos: no encontrado'
68
groups
comando. Es poco probable que no lo tenga en Linux, ya que es parte de coreutils.Respuestas:
Puedes usar grep:
Esto solo enumera las membresías de grupo suplementarias, no el usuario que tiene este grupo como su grupo principal. Y solo encuentra grupos locales, no grupos de un servicio de red como LDAP.
fuente
sudo lid -g {group}
. Tengo un sistema donde esta respuesta enumera 8 usuarios en un grupo mientras quesudo lid -g {group}
enumera 10.getent
respuesta de @Murray Jensen a continuaciónPrefiero usar el comando getent ...
Entonces, para un grupo, debe usar lo siguiente ...
donde nombre_de_grupo se reemplaza con el grupo que desea buscar. Tenga en cuenta que esto solo devuelve membresías de grupo suplementarias, no incluye a los usuarios que tienen este grupo como su grupo principal.
Hay muchas otras búsquedas que puede hacer ...
passwd
siendo otra útil, que necesitará para enumerar los grupos principales.fuente
sudo lid -g {group}
. Tengo un sistema donde esta respuesta enumera 8 usuarios en un grupo mientras quesudo lid -g {group}
enumera 10.Más fácil de hacer
groups [username]
Si desea enumerar todos los usuarios locales y sus grupos locales, puede hacerlo
cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups
Si obtiene "grupos: comando no encontrado", es probable que haya editado su ruta ambiental para peor, para restablecer su ruta
PATH=$(getconf PATH)
fuente
| grep {group}
se agrega y da la respuesta correcta a diferencia degetent group name_of_group
ogrep '^group_name_here:' /etc/group
cat /etc/passwd
, debe usarlogentent passwd
para que los usuarios en nis / ldap aún estén en la lista. El único inconveniente es que puede llevar bastante tiempo.enumera todos los usuarios en el grupo nombrado.
fuente
groupmems
es parte de las utilidades ocultas utilizadas en la mayoría de las distribuciones de Linux, sin embargo,groupmems
actualmente está ausente de Debian y sus derivados (un error ahora corregido pero no incluido en ninguna versión todavía (a partir de noviembre de 2016))groupmems
solo trata con grupos/etc/group
(no los que están en LDAP u otra base de datos de usuarios) y requiere privilegios de superusuario cuando intenta abrir / etc / gshadow.cut
y amigos).sudo lid -g {group}
. Tengo un sistema donde esta respuesta enumera 8 usuarios en un grupo mientras quesudo lid -g {group}
enumera 10.Me sorprende que nadie haya mencionado
Este comando le dará una lista de grupos en los que se encuentra el usuario.
fuente
groups
El comando imprime membresías de grupo para un usuario. Puede usar ellid
comando para enumerar usuarios en un grupo como:fuente
lid
es parte de libuser, que no está instalado de manera predeterminada en muchas distribuciones.OP formuló la pregunta para excluir la posibilidad de usar el comando de grupos . Como eso es parte de coreutils en Linux, (a) se eliminó o (b) OP está escribiendo mal el nombre.
OP podría haber usado
groups
así, por ejemplo:Una respuesta sugerida es solo grep para el nombre del grupo
/etc/group
. A veces eso funciona según lo previsto.Un uso ligeramente mejor de grep tiene en cuenta la sintaxis de
/etc/group
:para que solo la parte anterior al primer colon sea un nombre de grupo válido. Un grep simple sin tener en cuenta la sintaxis puede (y lo hará) recoger coincidencias engañosas del archivo. Use expresiones regulares para hacer que grep coincida exactamente con lo que se necesita:
o usando una variable de shell:
Sin embargo, eso solo enumera aquellos que no están en un grupo predeterminado . Para añadir aquellos , es necesario tener en cuenta el archivo de contraseñas, por ejemplo, mediante la extracción del número de grupo-id de
/etc/group
, y la impresión de los usuarios cuyo grupo predeterminado de partidos/etc/passwd
, por ejemplo,Podría hacer lo mismo usando solo grep y sed, pero es más trabajo que usar awk.
Otra respuesta sugerida propuso usar
getent
, que también es probable que esté en una máquina Linux (con Debian, es parte de GNU libc). Sin embargo, una comprobación rápida de eso muestra que solo proporciona el/etc/group
contenido.Yo (como la mayoría) no tengo
libusers
nilid
estoy instalado, por lo que no puedo comentar si cumple con las condiciones de OP.También está el
id
programa, que brinda información grupal. Alguien podría ampliar eso como una posible respuesta.fuente
sed -n "s/^$groupname:.*://p" /etc/group
pero eso podría informar resultados incorrectos si el nombre del grupo contiene operadores RE (.
por ejemplo, no es raro en los nombres de grupo).getent
también consultará LDAP / NIS ... aunque posiblemente no cuando la enumeración esté explícitamente deshabilitada para la base de datos del grupo.groups
no ayudaría, ya que enumera los grupos de los que un usuario determinado es miembro en oposición a la lista de miembros de un grupo determinado.Funciona de maravilla:
fuente
sudo lid -g
lista es 8. @Bhavik La respuesta aceptada tampoco es correcta.Algunos le dirán que instale libuser (para 'lid') o miembros (para 'miembros'). Pero aprovechando la respuesta https://unix.stackexchange.com/a/349648/77959 que manejó este problema con la membresía del grupo de inicio de sesión , encontré que otro grupo no estaba cubierto por ese script. Entonces, aquí está lo mejor de ambos enfoques combinados:
fuente
getent
o grep'^group_name_here:' /etc/group
Esta modificación del enfoque user3717722 enumerará los miembros del grupo en una base de datos NIS:
fuente