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.