Solución 1:
Todos los usuarios:
$ getent passwd
Todos los grupos:
$ getent group
Todos los grupos con un usuario específico:
$ getent group | grep username
Solución 2:
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
Solución 3:
Si no le interesan los usuarios remotos, como LDAP o NIS, para enumerar los usuarios y sus grupos asociados de forma sencilla:
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
Solución 4:
Lista de todos los usuarios
cut -d':' -f 1 /etc/passwd
O
awk -F ':' '{print $1}' /etc/passwd
Mientras gato /etc/passwd muestra todos los usuarios (y un montón de otras cosas), cut -d ':' -f 1 es una forma sencilla 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.
Lista de 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, quizás más cercana a lo que quería OP, es compgen . Aunque no estoy seguro de los problemas de compatibilidad.
compgen -u
compgen -g