Mostra tutti gli utenti e i loro gruppi / viceversa


70

So di avere gruppi e utenti esistenti ma non sono sicuro della loro associazione. Esiste un comando shell che posso usare per elencare tutti gli utenti o tutti i gruppi e un comando per elencare tutti i gruppi / utenti per un utente / gruppo specificato?

Quindi qualcosa del genere showusersdovrebbe elencare tutti gli utenti e showgroups -u thisusermostrare tutti i gruppi che hanno thisuserin esso.


non esiste tale comando. Devi scriverlo da solo.
Chris,

che ne dicicat /etc/passwd
Sudip Bhandari il

Risposte:


93

Tutti gli utenti:

$ getent passwd

Tutti i gruppi:

$ getent group

Tutti i gruppi con un utente specifico:

$ getent group | grep username

Ho scoperto che esiste un utente di nome speech-dispatcherche appartiene al gruppo audio (basato su groups speech-dispatcher). Ma non è elencato sotto getent groupcomando! Qual è il problema?
PHP Learner,

3
@PHPLearner Se hai un'altra domanda, per favore pubblica una domanda , non un commento.
EEAA,

+1 poiché questo elencherà anche utenti / gruppi non presenti nei file convenzionali /etc/passwde /etc/groupcioè quando un sistema è configurato per utilizzare directory centrali come NIS e LDAP, o qualsiasi altro database utente / gruppo alternativo, purché supporti l'enumerazione utente / gruppo .
HBruijn,

Ciò non restituirà tutti gli utenti e i gruppi in una configurazione ldap o sssd se l'enumerazione è disattivata.
Jens Timmerman,

16

Elenca gli utenti e i loro gruppi:

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

Elenco dei gruppi e dei loro 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

1
Anche se probabilmente funzionerebbe, sembra un po 'troppo complicato, non è vero, quando ci sono perfettamente semplici comandi one-shot per farlo?
EEAA

Certamente non otterrebbe nulla che viva in un repository centralizzato. E queste sono sicuramente informazioni che vorresti vedere.
Magellan,

Eccellente, molto utile, sarebbe meglio ricordare che sono comandi separati.
Mian Asbat Ahmad,

5

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

Produzione;

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

1
Questo ha lo stesso problema della risposta di Chang in quanto ignora gli utenti / i gruppi che hanno origine in database come LDAP, NIS, ecc.
MadHatter

Questo però genera le informazioni in modo molto chiaro in un formato incredibilmente chiaro, quindi può ancora essere un utile primo passo. Mi ha aiutato a fare jogging sulla mia memoria per quanto riguarda la sintassi di / etc / group e / etc / passwd!
Chris Woods,

3

Elenca tutti gli utenti

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

O

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

Mentre cat / etc / passwd mostra tutti gli utenti (e un sacco di altre cose), tagliare -d ':' -f 1 è un modo semplice per dividere ogni riga con ':' come delimitatore ed estrarre solo il primo campo (utenti ). Praticamente lo stesso della versione awk.

Elenca tutti i gruppi

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

O

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

Indovina un po ', molto simile a elencare gli utenti. Basta analizzare / etc / group invece.

Un altro modo interessante, forse più vicino a ciò che OP voleva, è compgen . Non sono sicuro di problemi di compatibilità però.

compgen -u
compgen -g

2
Ciao Elliot Baily, benvenuto in Server Fault! Questa domanda ha più di 5 anni e ha già una risposta corretta e accettata. Nota anche che la tua soluzione funziona solo se gli utenti sono archiviati in / etc / passwd; la risposta accettata funziona anche per altri database di utenti (come NIS o LDAP). Se vuoi rispondere a vecchie domande (il che è assolutamente perfetto!) Potresti voler dare un'occhiata all'elenco delle domande senza risposta - molte domande in cerca di amore!
marzo

-1

per 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
Contrariamente a quanto già accettato, questo non elenca utenti / gruppi che provengono da un database di utenti remoti come LDAP, NIS ecc ....
HBruijn

-2

Come questo:

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

1
No. /etc/gshadownon contiene membri del gruppo (lo /etc/groupfa) e la risposta accettata da 4,5 anni fa è comunque molto più generale, poiché gestisce anche gruppi remoti.
Sven

-2

Utilizzare questo comando per ottenere tutto il gruppo e gli utenti in quel particolare gruppo.

grep '
> ' /etc/group
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.