모든 사용자 및 그룹 목록
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
(수작업으로 힘들게 컴파일되었습니다).
프로그래밍 방식으로 해당 목록 (및 모든 그룹의 해당 목록)을 얻으려면 어떻게해야합니까? Applescript, 명령 줄 등과 같은 대체 (비 c 기반) 솔루션에 열려 있습니다.
나중에 업데이트
TALlama의 답변 은 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
Open Directory 접근 방식 ( 출처 : http://rickcogley.blogspot.com/2008/11/listing-open-directory-users-on-os-x.html ) :
dscacheutil -q user
dscacheutil -q group
"name :"으로 시작하는 각 출력에서 각 줄을 가져 와서 "name :"을 제거하면 목록이 있습니다. dscacheutil이없는 경우 수동 명령을 사용할 수 있습니다.
root# dscl localhost list /Local/Default/Users
root# dscl localhost list /LDAPv3/127.0.0.1/Users
Open Directory 이전에 대한 구식 접근 방식 .... (한숨) : 사용자 목록 :
- 시스템에서 / etc / passwd 파일을 가져옵니다.
- 선으로 나누기
- ":"을 기준으로 각 줄을 나눕니다.
- 각 줄의 첫 번째 기호를 가져옵니다.
그룹 목록 :
- 시스템에서 / etc / group 파일을 가져옵니다.
- 선으로 나누기
- ":"을 기준으로 각 줄을 나눕니다.
- 각 줄의 첫 번째 기호를 가져옵니다.
Garbbled / no-tempfile 명령 :
# dscl . list /users
# dscl . list /groups
예를 들어 dsexport 를 확인하십시오 .
여기 예시들이 있습니다 :
dsexport /tmp/export.out /Local/Default dsRecTypeStandard:Groups
dsexport /tmp/export.out /Local/Default dsRecTypeStandard:Users
출력은 약간 쓰레기이지만 sed와 같은 것이 당신을 위해 정리할 수 있습니다.
예전에는 NetInfo Kit를 사용하여이 작업을 사소하게 수행했지만 오늘날에는 깔끔한 Objective-C 방법이 없습니다. OpenDirectory API를 파헤쳐 야합니다.
참조 URL : https://stackoverflow.com/questions/1303561/list-of-all-users-and-groups
'programing' 카테고리의 다른 글
.net으로 SMTP 테스트 (0) | 2021.01.18 |
---|---|
WCF 응용 프로그램 시작 이벤트 (0) | 2021.01.18 |
Django, ModelChoiceField () 및 초기 값 (0) | 2021.01.18 |
ASP.NET MVC 양식 인증 + 특성 권한 부여 + 단순 역할 (0) | 2021.01.18 |
JS : 문자열의 경로에서 파일 이름을 제거하는 가장 최적화 된 방법은 무엇입니까? (0) | 2021.01.18 |