usuarios usuario quitar locales grupos grupo crear como agregar c objective-c cocoa macos carbon

c - quitar - Lista de todos los usuarios y grupos



usuarios y grupos locales windows 10 (5)

Comandos non-garbbled / no-tempfile:

# dscl . list /users # dscl . list /groups

Estoy tratando de obtener una lista de todos los usuarios y todos los grupos en Mac OS X 10.5+. ¿Cómo puedo hacer esto?

Por ejemplo, la lista de todos los usuarios en mi máquina debería devolver: _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 (que fue cuidadosamente compilado manualmente).

¿Cómo puedo obtener esa lista (y la lista correspondiente de todos los grupos) programáticamente? Estoy abierto a soluciones alternativas (no basadas en c), como Applescript, Commandline, etc.

Actualizar mucho tiempo después

La respuesta de TALlama me llevó a investigar la API para abrir el directorio, y encontré que esta lista se puede adquirir fácilmente mediante programación:

#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]); }

Eso registrará los nombres de usuario de cada usuario en el sistema. Sustituyendo en kODRecordTypeGroups obtendrá la lista de todos los grupos.

El -[ODQuery resultsAllowingPartial:error:] es una llamada de bloqueo , por lo que querrá ejecutar este código en una <ODQueryDelegate> fondo o utilizar un <ODQueryDelegate> para agregar los resultados.


En los viejos tiempos, haríamos esto trivialmente con el NetInfo Kit, pero hoy no hay una forma ordenada de Objective-C para hacerlo. Tendrás que profundizar en la API de OpenDirectory.


Enfoque de Open Directory (desde: http://rickcogley.blogspot.com/2008/11/listing-open-directory-users-on-os-x.html ):

dscacheutil -q user dscacheutil -q group

Tome cada línea de la salida respectiva que comienza con "nombre:" quítele el "nombre:" y tiene su lista. Si no tiene dscacheutil, puede usar los comandos manuales:

root# dscl localhost list /Local/Default/Users root# dscl localhost list /LDAPv3/127.0.0.1/Users

Enfoque de la vieja escuela para antes de Open Directory .... (suspiro): Para la lista de usuarios:

  • Toma el archivo / etc / passwd del sistema.
  • Dividirlo por líneas
  • Dividir cada línea en función de ":"
  • Toma el primer símbolo para cada línea

Para la lista de grupos:

  • Toma el archivo / etc / group del sistema.
  • Dividirlo por líneas
  • Dividir cada línea en función de ":"
  • Toma el primer símbolo para cada línea

La herramienta que desea es casi con seguridad dscl. La forma más rápida de hacerlo ya fue señalada:

$ dscl . list /users $ dscl . list /groups

Si desea generar información sobre cada usuario, use readall :

$ dscl . readall /users $ dscl . readall /groups

Y si necesita analizar programáticamente dicha información, use -plist para hacer su vida más fácil:

$ dscl -plist . readall /users $ dscl -plist . readall /groups


echa un vistazo, por ejemplo, dsexport .

Aquí hay unos ejemplos:

dsexport /tmp/export.out /Local/Default dsRecTypeStandard:Groups dsexport /tmp/export.out /Local/Default dsRecTypeStandard:Users

las salidas son un poco basura, pero algo como sed podría limpiarlas por ti.