Zeige alle Benutzer und ihre Gruppen / umgekehrt

70

Ich weiß, dass ich bereits Gruppen und Benutzer habe, bin mir jedoch nicht sicher, in welcher Zuordnung sie sich befinden. Gibt es einen Shell-Befehl, mit dem ich alle Benutzer oder alle Gruppen und einen Befehl zum Auflisten aller Gruppen / Benutzer für einen bestimmten Benutzer / eine bestimmte Gruppe auflisten kann?

So showuserswürde so etwas wie alle Benutzer auflisten und showgroups -u thisuseralle Gruppen anzeigen, die thisuserdarin enthalten sind.

Steve Robbins
quelle
Es gibt keinen solchen Befehl. Sie müssen es selbst schreiben.
Chris
wie wäre escat /etc/passwd
Sudip Bhandari

Antworten:

93

Alle Nutzer:

$ getent passwd

Alle Gruppen:

$ getent group

Alle Gruppen mit einem bestimmten Benutzer:

$ getent group | grep username
EEAA
quelle
Ich habe festgestellt, dass es einen Benutzer gibt speech-dispatcher, der zur Gruppe Audio gehört (basierend auf groups speech-dispatcher). Es steht aber nicht unter getent groupKommando! Worin besteht das Problem?
PHP Learner
3
@PHPLearner Wenn Sie eine andere Frage haben, posten Sie bitte eine Frage , keinen Kommentar.
EEAA
+1, da hiermit auch Benutzer / Gruppen aufgelistet werden, die in den herkömmlichen /etc/passwd& /etc/group-Dateien nicht enthalten sind, dh wenn ein System für die Verwendung zentraler Verzeichnisse wie NIS und LDAP oder einer anderen alternativen Benutzer- / Gruppendatenbank konfiguriert ist, sofern dies die Aufzählung von Benutzern / Gruppen unterstützt .
HBruijn
Dies gibt nicht alle Benutzer und Gruppen in einer ldap- oder sssd-Konfiguration zurück, wenn die Enumeration deaktiviert ist.
Jens Timmerman
16

Benutzer und ihre Gruppen auflisten:

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

Listen Sie Gruppen und deren Benutzer auf:

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
Nohup
quelle
1
Während das wahrscheinlich funktionieren würde, scheint es ein bisschen zu kompliziert zu sein, nicht wahr?
EEAA
Es würde bestimmt nichts geben, was in einem zentralen Repository lebt. Und das sind definitiv Informationen, die Sie sehen möchten.
Magellan
Hervorragend sehr hilfreich, es wäre besser zu erwähnen, dass es sich um separate Befehle handelt.
Mian Asbat Ahmad
5

Wenn Sie sich nicht für Remotebenutzer wie LDAP oder NIS interessieren, können Sie Benutzer und ihre zugeordneten Gruppen auf einfache Weise auflisten:

cut -d: -f1 /etc/passwd | xargs groups

Ausgabe;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev
Fredrick Gauss
quelle
1
Dies hat das gleiche Problem wie die Antwort von Chang, da Benutzer / Gruppen, die aus Datenbanken wie LDAP, NIS usw. stammen, ignoriert werden.
MadHatter
Dies gibt die Informationen in einem unglaublich übersichtlichen Format aus, sodass dies immer noch ein nützlicher erster Schritt sein kann. Es hat mir geholfen, mich an die Syntax von / etc / group und / etc / passwd zu erinnern!
Chris Woods
3

Alle Benutzer auflisten

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

Oder

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

Während cat / etc / passwd alle Benutzer (und eine Reihe anderer Dinge) anzeigt, ist cut -d ':' -f 1 eine einfache Möglichkeit, jede Zeile mit ':' als Trennzeichen zu teilen und nur das erste Feld (Benutzer) zu extrahieren ). So ziemlich das gleiche wie awk-Version.

Alle Gruppen auflisten

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

Oder

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

Ratet mal, sehr ähnlich wie bei der Auflistung von Benutzern. Analysieren Sie stattdessen einfach / etc / group .

Ein anderer interessanter Weg, vielleicht näher an dem, was OP wollte, ist compgen . Nicht sicher über Kompatibilitätsprobleme.

compgen -u
compgen -g
Marcos Valle
quelle
2
Hallo Elliot Baily, willkommen bei Server Fault! Bitte beachten Sie, dass diese Frage älter als 5 Jahre ist und bereits eine korrekte und akzeptierte Antwort hat. Beachten Sie auch, dass Ihre Lösung nur funktioniert, wenn Benutzer in / etc / passwd gespeichert sind. Die akzeptierte Antwort funktioniert auch für andere Benutzerdatenbanken (z. B. NIS oder LDAP). Wenn Sie alte Fragen beantworten möchten (was völlig in Ordnung ist!), Sollten Sie sich die Liste der unbeantworteten Fragen ansehen - viele Fragen, die nach etwas Liebe suchen!
März
-1

für debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group
Chang
quelle
2
Im Gegensatz zu den bereits akzeptierten werden hier keine Benutzer / Gruppen
aufgelistet
-2

So was:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username
Rui Monteiro
quelle
1
Nein. /etc/gshadowEnthält keine Gruppenmitglieder ( /etc/grouptut) und die akzeptierte Antwort von vor 4,5 Jahren ist ohnehin viel allgemeiner, da sie auch entfernte Gruppen behandelt.
Sven
-2

Verwenden Sie diesen Befehl, um alle Gruppen und Benutzer in dieser bestimmten Gruppe abzurufen.

grep '
> ' /etc/group
Ayaz Hussain
quelle