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.

Steve Robbins
fuente
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
EEAA
fuente
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
nohup
fuente
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
Fredrick Gauss
fuente
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
Marcos Valle
fuente
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
Chang
fuente
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
Rui Monteiro
fuente
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
Ayaz Hussain
fuente