Soluzione 1:
Tutti gli utenti:
$ getent passwd
Tutti i gruppi:
$ getent group
Tutti i gruppi con un utente specifico:
$ getent group | grep username
Soluzione 2:
Elenca gli utenti ei loro gruppi:
for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done
Elenca gruppi e relativi utenti:
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
Soluzione 3:
Se non ti interessano gli utenti remoti come LDAP o NIS, per elencare gli utenti e i loro gruppi associati in modo semplice:
cut -d: -f1 /etc/passwd | xargs groups
Uscita;
root : root myuser : root www-data fuse anotheruser : anotheruser cdrom floppy audio dip video plugdev scanner bluetooth netdev
Soluzione 4:
Elenca tutti gli utenti
cut -d':' -f 1 /etc/passwd
Oppure
awk -F ':' '{print $1}' /etc/passwd
Mentre cat /etc/passwd mostra tutti gli utenti (e un sacco di altre cose), cut -d ':' -f 1 è un modo semplice per dividere ogni riga con ':' come delimitatore ed estrarre solo il primo campo (utenti). Praticamente uguale alla versione awk.
Elenca tutti i gruppi
cut -d':' -f 1 /etc/group
Oppure
awk -F ':' '{print $1}' /etc/group
Indovina un po', molto simile all'elenco degli utenti. Basta analizzare /etc/group invece.
Un altro modo interessante, forse più vicino a ciò che voleva OP, è compgen . Non sono sicuro dei problemi di compatibilità però.
compgen -u
compgen -g