Liste aller Benutzer und Gruppen
-
19-09-2019 - |
Frage
Ich versuche, eine Liste von bekommen alle Benutzer und alle Gruppen auf Mac OS X 10.5 und höher. Wie kann ich das tun?
Zum Beispiel sollte die Liste aller Benutzer auf meiner Maschine zurück:
_amavisd, _appowner, _appserver, _ard, _atsserver, _calendar, _carddav, _clamav, _coreaudiod, _cvmsroot, _cvs, _cyrus, _devdocs, _dovecot, _eppc, _installer, _jabber, _lda, _locationd, _lp, _mailman, _mcxalr, _mdnsresponder, _mysql, _pcastagent, _pcastserver, _postfix, _qtss, _sandbox, _screensaver, _securityagent, _serialnumberd, _softwareupdate, _spotlight, _sshd, _svn, _teamsserver, _timezone, _tokend, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _windowserver, _www, _xgridagent, _xgridcontroller, daemon, dave, nobody, root
(das wurde sorgfältig zusammengestellt manuell).
Wie kann ich die Liste (und die entsprechende Liste aller Gruppen) programmatisch? Ich bin offen für alternative (nicht-c basiert) Lösungen, wie Applescript, Commandline, etc.
Aktualisieren Sie eine lange Zeit später
TALlama Antwort mich dazu veranlasst, die API zu untersuchen Open Directory, und ich fand, dass diese Liste leicht programmatisch erworben werden :
#import <OpenDirectory/OpenDirectory.h>
ODSession *s = [ODSession defaultSession];
ODNode *root = [ODNode nodeWithSession:s name:@"/Local/Default" error:nil];
ODQuery *q = [ODQuery queryWithNode:root forRecordTypes:kODRecordTypeUsers attribute:nil matchType:0 queryValues:nil returnAttributes:nil maximumResults:0 error:nil];
NSArray *results = [q resultsAllowingPartial:NO error:nil];
for (ODRecord *r in results) {
NSLog(@"%@", [r recordName]);
}
Das wird die Benutzernamen der einzelnen Benutzer auf dem System anmelden. Setzt man in kODRecordTypeGroups
erhalten Sie die Liste aller Gruppen.
Die -[ODQuery resultsAllowingPartial:error:]
Methode ist ein Sperrung Anruf, so dass Sie entweder wollen würden auf einem Hintergrund-Thread diesen Code auszuführen, oder eine <ODQueryDelegate>
verwenden, um die Ergebnisse zu aggregieren.
Lösung
Das Werkzeug, das Sie wollen, ist mit ziemlicher Sicherheit dscl. Der kürzeste Weg, es zu tun, wurde bereits darauf hingewiesen:
$ dscl . list /users
$ dscl . list /groups
Wenn Sie zur Ausgabe von Informationen über jeden Benutzer wollen, obwohl, verwendet readall
:
$ dscl . readall /users
$ dscl . readall /groups
Und wenn Sie brauchen, um programmatisch die Informationen zu analysieren, verwenden -plist Sie das Leben leichter zu machen:
$ dscl -plist . readall /users
$ dscl -plist . readall /groups
Andere Tipps
Open Directory Ansatz (aus: http://rickcogley.blogspot.com/2008/11/listing-open-directory-users-on-os-x.html ):
dscacheutil -q user
dscacheutil -q group
Nehmen Sie jede Zeile von dem jeweiligen Ausgang, die mit „Name:“ Streifen aus dem „Name:“ und Sie haben Ihre Liste. Wenn Sie nicht dscacheutil haben, können Sie die manuellen Befehle zur Verfügung:
root# dscl localhost list /Local/Default/Users
root# dscl localhost list /LDAPv3/127.0.0.1/Users
Alte Schule Ansatz für vor Open Directory .... (seufz): Für Liste der Benutzer:
- Besorgen Sie sich die Datei / etc / passwd-Datei aus dem System.
- Es spaltete sich aus durch Linien
- Split aus jeder Zeile auf ":"
- Nehmen Sie das erste Symbol für jede Zeile
Für Liste der Gruppen:
- Besorgen Sie sich die / etc / group-Datei aus dem System.
- Es spaltete sich aus durch Linien
- Split aus jeder Zeile auf ":"
- Nehmen Sie das erste Symbol für jede Zeile
Nicht-garbbled / Nein-tempfile Befehle:
# dscl . list /users
# dscl . list /groups