Mostrar a todos los usuarios y sus grupos / viceversa


70

Sé que tengo grupos y usuarios existentes, pero no estoy seguro de su asociación. ¿Hay un comando de shell que pueda usar para enumerar todos los usuarios o todos los grupos y un comando para enumerar todos los grupos / usuarios para un usuario / grupo específico?

Entonces, algo así showusersenumeraría a todos los usuarios y showgroups -u thisusermostraría todos los grupos que tienen thisuseren él.


No hay tal comando. Necesita escribirlo usted mismo.
— Chris

¿qué talcat /etc/passwd
— Sudip Bhandari

Respuestas:


93

Todos los usuarios:

$ getent passwd

Todos los grupos:

$ getent group

Todos los grupos con un usuario específico:

$ getent group | grep username

Descubrí que hay un usuario llamado speech-dispatcherque pertenece al grupo de audio (según groups speech-dispatcher). ¡Pero no está en la lista bajo el getent groupcomando! ¿Cuál es el problema?
— PHP Learner

3
@PHPLearner Si tiene otra pregunta, publique una pregunta , no un comentario.
— EEAA

+1 ya que esto también incluirá una lista de usuarios / grupos que no se encuentran en los archivos convencionales /etc/passwd& /etc/groupes decir, cuando un sistema está configurado para usar directorios centrales como NIS y LDAP, o cualquier otra base de datos alternativa de usuarios / grupos, siempre que sea compatible con la enumeración de usuarios / grupos .
— HBruijn

Esto no devolverá todos los usuarios y grupos en una configuración ldap o sssd si la enumeración está desactivada.
— Jens Timmerman

16

Lista de usuarios y sus grupos:

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

Lista de grupos y sus usuarios:

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done

1
Si bien eso probablemente funcionaría, parece un poco demasiado complicado, ¿no es así, cuando hay comandos simples y perfectos para hacer esto?
— EEAA

Ciertamente no obtendría nada que viva en un repositorio centralizado. Y esa es definitivamente la información que te gustaría ver.
— Magellan

Excelente, muy útil, sería mejor mencionar que son comandos separados.
— Mian Asbat Ahmad

5

Si no le interesan los usuarios remotos como LDAP o NIS, enumere a los usuarios y sus grupos asociados de una manera simple:

cut -d: -f1 /etc/passwd | xargs groups

Salida;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev

1
Esto tiene el mismo problema que la respuesta de Chang en que ignora a los usuarios / grupos que se originan en bases de datos como LDAP, NIS, etc.
— MadHatter

Sin embargo, esto genera la información en un formato increíblemente claro, por lo que aún puede ser un primer paso útil. ¡Me ayudó a refrescar mi memoria con respecto a la sintaxis de / etc / group y / etc / passwd!
— Chris Woods

3

Listar todos los usuarios

cut -d':' -f 1 /etc/passwd

O

awk -F ':' '{print $1}' /etc/passwd

Mientras que cat / etc / passwd muestra todos los usuarios (y un montón de otras cosas), cortar -d ':' -f 1 es una forma simple de dividir cada línea con ':' como delimitador y extraer solo el primer campo (usuarios ) Más o menos lo mismo que la versión awk.

Listar todos los grupos

cut -d':' -f 1 /etc/group

O

awk -F ':' '{print $1}' /etc/group

Adivina qué, muy similar a la lista de usuarios. Simplemente analice / etc / group en su lugar.

Otra forma interesante, tal vez más cercana a lo que OP quería, es compgen . Sin embargo, no estoy seguro de los problemas de compatibilidad.

compgen -u
compgen -g

2
Hola Elliot Baily, ¡bienvenido a Server Fault! Tenga en cuenta que esta pregunta tiene más de 5 años y ya tiene una respuesta correcta y aceptada. También tenga en cuenta que su solución solo funciona si los usuarios están almacenados en / etc / passwd; la respuesta aceptada también funciona para otras bases de datos de usuarios (como NIS o LDAP). Si quieres responder preguntas antiguas (¡lo cual está perfectamente bien!), Quizás quieras echar un vistazo a la lista de preguntas sin respuesta : ¡muchas preguntas en busca de amor!
— marcelm

-1

para debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group

2
A diferencia de lo ya aceptado, esto no enumera los usuarios / grupos que se originan en una base de datos de usuarios remotos, como LDAP, NIS, etc ...
— HBruijn

-2

Me gusta esto:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username

1
No. /etc/gshadowno contiene miembros del grupo ( /etc/groupsí) y la respuesta aceptada de hace 4.5 años es mucho más general de todos modos, ya que también maneja grupos remotos.
— Sven

-2

Use este comando para obtener todo el grupo y los usuarios en ese grupo en particular.

grep '
> ' /etc/group
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.