Řešení 1:
Všichni uživatelé:
$ getent passwd
Všechny skupiny:
$ getent group
Všechny skupiny s konkrétním uživatelem:
$ getent group | grep username
Řešení 2:
Seznam uživatelů a jejich skupin:
for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done
Seznam skupin a jejich uživatelů:
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
Řešení 3:
Pokud se nestaráte o vzdálené uživatele, jako je LDAP nebo NIS, vyjmenujte uživatele a jejich přidružené skupiny jednoduchým způsobem:
cut -d: -f1 /etc/passwd | xargs groups
Výstup;
root : root myuser : root www-data fuse anotheruser : anotheruser cdrom floppy audio dip video plugdev scanner bluetooth netdev
Řešení 4:
Seznam všech uživatelů
cut -d':' -f 1 /etc/passwd
Nebo
awk -F ':' '{print $1}' /etc/passwd
Zatímco cat /etc/passwd zobrazí všechny uživatele (a spoustu dalších věcí), cut -d ':' -f 1 je jednoduchý způsob, jak rozdělit každý řádek pomocí ':' jako oddělovače a extrahovat pouze první pole (uživatele). V podstatě stejné jako verze awk.
Vypsat všechny skupiny
cut -d':' -f 1 /etc/group
Nebo
awk -F ':' '{print $1}' /etc/group
Hádejte co, velmi podobné seznamování uživatelů. Stačí analyzovat /etc/group místo toho.
Další zajímavý způsob, možná bližší tomu, co chtěl OP, je compgen . Nejste si však jisti problémy s kompatibilitou.
compgen -u
compgen -g