Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

List of all users and groups

I'm trying to get a list of all users and all groups on Mac OS X 10.5+. How can I do this?

For example, the list of all users on my machine should return: _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 (that was painstakingly compiled manually).

How can I get that list (and the corresponding list of all groups) programmatically? I'm open to alternative (non-c based) solutions, such as Applescript, commandline, etc.


Update a long time later

TALlama's answer prompted me to investigate the API to Open Directory, and I found that this list can be easily acquired programmatically:

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

That will log the usernames of every user on the system. Substituting in kODRecordTypeGroups will get you the list of all the groups.

The -[ODQuery resultsAllowingPartial:error:] method is a blocking call, so you'd either want to execute this code on a background thread, or use an <ODQueryDelegate> to aggregate the results.

like image 621
Dave DeLong Avatar asked Aug 20 '09 01:08

Dave DeLong


People also ask

How do I see all users and groups in Linux?

Using getent As we know, the /etc/group file defines the groups on the Linux system, whereas the /etc/passwd file describes its user login accounts. Unlike the /etc/group file, which contains the user names for a given group, the /etc/passwd file only contains the associated group's GID.

How do I list all groups in Linux?

Use the most commonly used “cat” command to get the list of the groups available in the “/etc/group” file. When you run the command, you will get the list of the groups.

How do I list all groups in Ubuntu?

Open the Ubuntu Terminal through Ctrl+Alt+T or through the Dash or connect to the Ubuntu system by SSH. This command lists all the groups that you belong to.


1 Answers

The tool you want is almost certainly dscl. The shortest way to do it was already pointed out:

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

If you want to output information about each user, though, use readall:

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

And if you need to programatically parse said information, use -plist to make your life easier:

$ dscl -plist . readall /users $ dscl -plist . readall /groups 
like image 190
TALlama Avatar answered Oct 05 '22 10:10

TALlama