OSX 및 Linux에서 그룹 이름을 gid로 확인하는 방법은 무엇입니까?

OSX 및 Linux에서 그룹 이름을 gid로 확인하는 방법은 무엇입니까?

staff기호 그룹 이름(예: )을 숫자로 변환할 수 있는 [짧은] 코드 조각이 있습니까?그룹 번호(예를 들어 82)?

코드는 OS X 및 GNU/Linux에서 동일하게 실행되어야 합니다.

답변1

Python을 사용하는 모듈 grp충분히 간단하다. 초보자를 위한 핵심 아이디어:

import grp
print(grp.getgrnam("my_group_name").gr_gid)

그러나 보다 강력한 솔루션을 사용하려면 시간이 더 오래 걸렸습니다.

echo $MYGROUPNAME | python -c 'import grp,sys; gn=sys.stdin.readline().strip(); [gid]=[g.gr_gid for g in grp.getgrall() if g.gr_name==gn][:1]; print(gid)'

첫째, 두 가지 모두에서 작동하도록 작성되었습니다.아나콘다 2와 아나콘다 3.

둘째: 그것사용하지 마세요grp.getgrnam()이지만 모든 그룹을 가져오고 자체 필터링을 수행합니다. 왜? getgrnam()제가 테스트한 Mac 중 하나 이상에서는 전혀 작동하지 않기 때문입니다 .

세 번째: 그것여러 결과 자르기. 왜? grp.getgrall()제가 테스트한 적어도 하나의 Gentoo에서는 중복된 결과가 반환되었기 때문입니다 .

마지막으로, 그렇습니다. 존재하지 않는 그룹은 역추적을 발생시킵니다.자신의 필요에 맞게 조정하십시오.


알아채다 이 문제일부 비트가 제공되었지만 새로운 답변이 닫혀 마이그레이션할 수 없습니다. 그래서 여기에 자기 대답이 있습니다.

답변2

Teden의 의견에 대한 답변:

Linux(Debian 12, nerdy):

bookworm$ export mygroupname=staff
bookworm$ awk -F: -v group=${mygroupname} '$1==group{print $3}' /etc/group
50

맥OS 소노마 14.4:

sonoma$ export mygroupname=staff
sonoma$ awk -F: -v group=${mygroupname} '$1==group{print $3}' /etc/group
20

시스템 전체 식별자와의 잠재적인 충돌을 피하기 위해 일반적으로 대문자 변수 이름은 권장되지 않습니다.

또한 그룹이 존재하지 않는 경우에도 오류가 발생하지 않습니다.

관련 정보