gpt4 book ai didi

c - 所有用户和组的列表

转载 作者:IT老高 更新时间:2023-10-28 11:33:15 28 4
gpt4 key购买 nike

我正在尝试获取 Mac OS X 10.5+ 上的所有用户和所有组的列表。我该怎么做?

例如,我机器上所有用户的列表应该返回: _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 (那是手工精心编译的)。

如何以编程方式获取该列表(以及所有组的相应列表)?我对替代(非基于 c 的)解决方案持开放态度,例如 Applescript、命令行等。


很久以后更新

TALlama's answer提示我调查 Open Directory 的 API,我发现可以通过编程轻松获取此列表:

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

这将记录系统上每个用户的用户名。代入kODRecordTypeGroups将为您提供所有组的列表。

-[ODQuery resultsAllowingPartial:error:]方法是一个阻塞调用,所以你要么想在后台线程上执行这段代码,要么使用<ODQueryDelegate>汇总结果。

最佳答案

您想要的工具几乎肯定是 dscl。已经指出了最短的方法:

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

如果您想输出每个用户的信息,请使用 readall:

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

如果您需要以编程方式解析所述信息,请使用 -plist 让您的生活更轻松:

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

关于c - 所有用户和组的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303561/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com