Ich habe es mit Googeln versucht, komme aber nicht weiter. Wie kann ich alle Mitglieder einer Gruppe auflisten, die mygroup
über die Befehlszeile in OS X aufgerufen wurde ?
$ dscl . list /groups
holt mir alle Gruppen ... aber wie kann ich die Mitglieder jeder Gruppe sehen?
macos
command-line
user-accounts
Meltemi
quelle
quelle
dscacheutil -q group -a name admin
gab mir nur 1 Ergebnis, während das Shell-Skript des akzeptierten Antworters mir 2 Ergebnisse lieferte.Es gibt keinen Standardbefehl, der alle Mitglieder einer Gruppe in OS X auflistet. Hier ist eine Shell-Funktion, die das macht:
Kopieren Sie die obige Befehlszeile in das Terminal, und geben Sie Folgendes ein (wobei mygroup der Name einer vorhandenen Gruppe ist).
members mygroup
Einige Erklärungen für diejenigen, die interessiert sind:
Es gibt fünf verschiedene Möglichkeiten (von denen ich weiß), wie ein Benutzer Mitglied einer Gruppe in OS X werden kann. Es ist nicht garantiert, dass der Befehl alle oder sogar alle Mitglieder meiner Gruppe ausgibt , da die Mitgliedschaft auch von Benutzern stammt ' primäre Gruppen-ID , Mitgliedschaft nach Benutzer- UUID , Vererbung der Mitgliedschaft von einer Gruppe zu einer anderen und vom System berechnete Mitgliedschaften, z. B. die Gruppe " Jeder" .
dscl . -read /Groups/mygroup GroupMembership
Anstatt zu versuchen, den Überblick zu behalten, scheint es eine bessere Idee zu sein, einfach die Mitgliedschaft jedes Benutzers im System zu überprüfen (mithilfe von dsmemberutil ), und genau das tun die Shell-Funktion und das folgende Skript.
Dieses Members- Skript entspricht der Shell-Funktion, hat jedoch eine bessere Behandlung ungültiger Eingaben:
Zusatzinfo:
Die fünf Möglichkeiten, ein Gruppenmitglied zu sein, sind:
Diese können mit Befehlen wie erforscht werden
dscl . -read /Groups/somegroup
Beispiel 4 : Mitgliedschaft in der Druckerbetreibergruppe __lpoperator_ wird von Mitgliedern der Druckadministratorgruppe __lpadmin_ übernommen, und die Mitgliedschaft in dieser Gruppe wird von Mitgliedern der Administratorgruppe übernommen .
Beispiel 5 :
SIEHE AUCH
id (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , uuid (3)
quelle
Hinweis: Dies war meine erste Antwort, die geschrieben wurde, bevor mir klar wurde, dass diese Antwort immer noch ein unvollständiges Ergebnis liefert . (Zum Beispiel findet es keine Mitglieder der Gruppe " Alle "!) Also schrieb ich eine bessere Antwort, die ein Skript enthält, das alle Mitglieder einer Gruppe in OS X auflistet .
Die GroupMembership -Eigenschaft von mygroup kann mit dscl wie folgt gedruckt werden :
Es ist jedoch nicht garantiert, dass alle (oder auch nur einige) Mitglieder der Gruppe ausgegeben werden. Was fehlt, sind die Benutzer, die nur dann Mitglied der Gruppe sind, wenn sie diese als primäre Gruppen-ID haben .
Ein häufiges Beispiel hierfür in OS X sind reguläre Anmeldekonten, deren primäre Gruppe Mitarbeiter (Gruppe 20) ist, die jedoch nicht in der GroupMembership-Eigenschaft der Mitarbeitergruppe aufgeführt sind.
Diese Benutzer können durch Suchen nach der numerischen Primärgruppen-ID (gid) wie im folgenden Beispiel für die Mitarbeitergruppe (gid 20) gefunden werden:
und die numerische gid (PrimaryGroupID) von mygroup wird gefunden von:
quelle
Um alle Gruppen abzurufen, denen ein Benutzer angehört , können Sie Folgendes verwenden:
Beispielausgabe:
Mit dem obigen Befehl können alle Benutzer abgerufen werden, die zu einer Gruppe gehören :
OSX :
Unix :
quelle
ACHTUNG: Der obige Befehl zeigt nicht immer eine vollständige Liste ALLER Gruppenmitglieder an. ZB für die Gruppe "staff" bekommt man als Gruppenmitglied nur "root", was unvollständig ist. Verwenden Sie zum Überprüfen einen der folgenden Befehle als Standardbenutzer (NICHT "root"):
id -Gn
ODERgroups
Als Ergebnis sehen Sie alle Gruppen, in denen Ihr standardmäßig angemeldeter Benutzer Mitglied ist. Einer von ihnen sollte "Mitarbeiter" sein. Somit gibt es neben "root" weitere Mitglieder der Gruppe "staff", die vom Befehl nicht aufgelistet werden
dscl . -read /Groups/[groupname] | grep GroupMembership
. Gleiches gilt für den Befehl,dscacheutil -q group -a name staff
der auch darauf hindeutet, dass nur "root" Mitglied der Gruppe "staff" ist, was offensichtlich unvollständig ist.Die einzig verlässliche Methode, um wirklich ALLE Mitglieder einer Gruppe in das Terminal auf OSX zu bekommen, bietet hier bereits Arne Stenström. Dies nutzt seine Shell-Funktion bzw. sein Shell-Skript. Beides funktioniert super!
quelle
Befehl
Ähnlich wie bei der Antwort von @ duperuser werden im Folgenden nur die Benutzer der Gruppe
admin
mit Leerzeichen dazwischen ausgedruckt :Ausgabe
Wenn Sie den obigen Befehl ausführen, erhalten Sie Folgendes:
Nervenzusammenbruch
Mit dem
dscacheutil
Befehl werden Informationen zu verschiedenen Kategorien des Verzeichnisdienst-Cache des Systems abgefragt. Mit dieser-q
Option können Sie die Kategorie angeben, die Sie abfragen möchten. Die verfügbaren Kategorien sind Gruppe, Host, Mount, Protokoll, RPC, Dienst und Benutzer. Wir fragen diese Kategorie weiter ab, indem wir ein Schlüsselwertpaar mit der-a
Option angeben. In diesem Fall möchten wir die Gruppe auflisten, deren Schlüsselname
dem Wert entsprichtadmin
. Derdscacheutil
obige Befehl erzeugt eine Ausgabe wie folgt:Als nächstes werden wir Rohr dieser Text in
grep
und die Zeile auswählen die Zeichenfolge enthält ,users:
am Anfang. Mit dieser-e
Option erkennt grep reguläre Ausdrücke . Das^
Zeichen gibt an, dass wirusers:
am Anfang der Zeile stehen möchten .Das gibt uns
Zum Schluss übergeben wir dies an sed und ersetzen den Text
users:
durch den leeren String. In seds
bedeutet der erste Buchstabe zu ersetzen. Der Text zwischen dem ersten Paar Schrägstriche (/users: /
) soll ersetzt werden, und das nächste Paar Schrägstriche (//
) soll ersetzt werden (in diesem Fall nichts).quelle
Hier ist eine Implementierung für dieses Problem , das wurde abgeleitet von einer Implementierung in einer ähnlichen Diskussion . Die Routine ist etwas allgemein gehalten und verfügt über einen Verzeichnisdienst-Lookup-Hook für eine bestimmte Plattform / Architektur, sodass sie in einem heterogenen Netzwerk ohne Änderungen verwendet werden kann. Wir haben einen symbolischen Link zu diesem Dienstprogramm namens installiert
zed
. Andere Ursprünge für diese Implementierung werden im Attributionsabschnitt des Skripts erwähnt. Dieses Tool soll unter mindestens OSX, HP-UX, Linux und SunOS ausgeführt werden, war es aber noch nichtGetestet unter SunOS und HP-UX. Das Skript wurde so weit wie möglich unter Ubuntu Linux 12.04 und Mavericks OSX 10.9.1 getestet. Die Ausgabe dieses Skripts stimmt mit der Ausgabe für die erste Shell-Skriptimplementierung für dieses Problem überein und wird daher als korrekt betrachtet.quelle