Ich habe kürzlich neue Benutzer erstellt und sie bestimmten Gruppen zugewiesen. Ich habe mich gefragt, ob es einen Befehl gibt, der alle Benutzer anzeigt, die einer bestimmten Gruppe zugeordnet sind. Ich habe versucht, den Befehl 'groups' zu verwenden, aber wenn ich diesen Befehl verwende, heißt es: 'groups: not found'.
68
groups
Befehl. Es ist unwahrscheinlich, dass Sie es nicht unter Linux haben, da es Teil von coreutils ist.Antworten:
Sie können grep verwenden:
Hier werden nur zusätzliche Gruppenmitgliedschaften aufgeführt, nicht der Benutzer, der diese Gruppe als primäre Gruppe hat. Und es werden nur lokale Gruppen gefunden, keine Gruppen von einem Netzwerkdienst wie LDAP.
quelle
sudo lid -g {group}
Ich habe ein System, in dem diese Antwort 8 Benutzer in einer Gruppesudo lid -g {group}
auflistet, während Listen 10.getent
Antwort von @ Murray Jensen untenIch bevorzuge den Befehl getent ...
Für eine Gruppe sollten Sie also Folgendes verwenden ...
Dabei wird der Name_der_Gruppe durch die Gruppe ersetzt, nach der Sie suchen möchten. Beachten Sie, dass dies nur zusätzliche Gruppenmitgliedschaften zurückgibt, nicht jedoch die Benutzer, die diese Gruppe als primäre Gruppe haben.
Es gibt eine ganze Reihe weiterer Suchvorgänge, die Sie durchführen können ...
passwd
und die Sie benötigen, um Primärgruppen aufzulisten.quelle
sudo lid -g {group}
Ich habe ein System, in dem diese Antwort 8 Benutzer in einer Gruppesudo lid -g {group}
auflistet, während Listen 10.Einfacher zu machen
groups [username]
Wenn Sie alle lokalen Benutzer und ihre lokalen Gruppen auflisten möchten, können Sie dies tun
cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups
Wenn Sie "groups: command not found" erhalten, ist es wahrscheinlich, dass Sie Ihren Umgebungspfad zum Schlechten bearbeitet haben, um Ihren Pfad zurückzusetzen
PATH=$(getconf PATH)
quelle
| grep {group}
hinzugefügt wird, und gibt die richtige Antwort im Gegensatz zugetent group name_of_group
odergrep '^group_name_here:' /etc/group
cat /etc/passwd
sollten Sie verwenden,gentent passwd
damit Benutzer in nis / ldap weiterhin aufgelistet werden. Der einzige Nachteil ist, dass es eine ganze Weile dauern kann.listet alle Benutzer in der benannten Gruppe auf.
quelle
groupmems
Teil der Schatten-Utils ist, die in den meisten Linux-Distributionen verwendet werden,groupmems
derzeit jedoch in Debian und Derivaten nicht vorhanden ist (ein Fehler, der jetzt behoben, aber noch nicht in einer Veröffentlichung enthalten ist (Stand: November 2016))groupmems
nur Gruppen in/etc/group
(nicht die in LDAP oder einer anderen Benutzerdatenbank) behandelt werden und Superuser-Berechtigungen erforderlich sind, wenn versucht wird, / etc / gshadow zu öffnen.cut
und der Freunde) erforderlich ist .sudo lid -g {group}
. Ich habe ein System, in dem diese Antwort 8 Benutzer in einer Gruppesudo lid -g {group}
auflistet, während 10 auflistet.Ich bin überrascht, dass niemand etwas erwähnt hat
Dieser Befehl gibt eine Liste der Gruppen an, in denen sich der Benutzer befindet.
quelle
groups
Befehl druckt Gruppenmitgliedschaften für einen Benutzer. Sie können denlid
Befehl verwenden, um Benutzer in einer Gruppe aufzulisten, z.quelle
lid
ist Teil von libuser, das bei vielen Distributionen nicht standardmäßig installiert ist.OP formulierte die Frage, um die Verwendung des Befehls groups auszuschließen . Da dies Teil von coreutils unter Linux ist, wurde entweder (a) es entfernt oder (b) OP gibt den Namen falsch ein.
OP könnte
groups
zum Beispiel so verwendet werden:Eine vorgeschlagene Antwort ist nur grep's für den Gruppennamen in
/etc/group
. Manchmal funktioniert das wie vorgesehen.Eine etwas bessere Verwendung von grep berücksichtigt die Syntax von
/etc/group
:so dass nur der Teil vor dem ersten Doppelpunkt ein gültiger Gruppenname ist. Ein einfaches Greifen ohne Rücksicht auf die Syntax kann (und wird) irreführende Übereinstimmungen aus der Datei abrufen. Verwenden Sie reguläre Ausdrücke, damit grep genau den Anforderungen entspricht:
oder mit einer Shell-Variablen:
Hier werden jedoch nur diejenigen aufgelistet, die keiner Standardgruppe angehören . So fügen Sie diejenigen , müssen Sie die Kennwortdatei berücksichtigen, beispielsweise durch die Gruppen-ID - Nummer von Extrahieren
/etc/group
und Drucken der Benutzer , deren Standard - Gruppenspiele aus/etc/passwd
, zum Beispiel,Sie können dasselbe auch mit grep und sed machen, aber es ist mehr Arbeit als mit awk.
Eine andere vorgeschlagene Antwort schlug die Verwendung vor
getent
, die sich wahrscheinlich auch auf einem Linux-Rechner befindet (zusammen mit Debian ist sie Teil von GNU libc). Eine schnelle Überprüfung zeigt jedoch, dass nur der/etc/group
Inhalt bereitgestellt wird.Ich habe (wie die meisten) keine
libusers
oder keinelid
installiert, daher kann ich nicht beurteilen, ob sie die Bedingungen von OP erfüllen.Es gibt auch das
id
Programm, das Gruppeninformationen gibt. Jemand könnte darauf als mögliche Antwort eingehen.quelle
sed -n "s/^$groupname:.*://p" /etc/group
aber das könnte immer noch zu falschen Ergebnissen führen, wenn der Gruppenname RE-Operatoren enthält (.
zum Beispiel ist dies bei Gruppennamen nicht ungewöhnlich).getent
fragt auch LDAP / NIS ab, möglicherweise jedoch nicht, wenn die Enumeration für die Gruppendatenbank explizit deaktiviert ist.groups
dies nicht hilfreich ist, da hier die Gruppen aufgelistet werden, denen ein bestimmter Benutzer angehört, im Gegensatz zu der Liste der Mitglieder einer bestimmten Gruppe.Klappt wunderbar:
quelle
sudo lid -g
Listen 8. @Bhavik Die akzeptierte Antwort ist auch nicht korrekt.Einige werden Sie auffordern, libuser (für 'lid') oder members (für 'members') zu installieren. Aufbauend auf der Antwort https://unix.stackexchange.com/a/349648/77959, die dieses Problem mit der Mitgliedschaft in einer Anmeldegruppe behandelte, stellte ich fest, dass eine andere Gruppe nicht von diesem Skript abgedeckt wird. Also - hier ist das Beste aus beiden Ansätzen zusammen:
quelle
getent
oder grep'^group_name_here:' /etc/group
Diese Änderung des Ansatzes von user3717722 listet Gruppenmitglieder in einer NIS-Datenbank auf:
quelle