정확히 일치하는 특정 사용자 그룹 멤버십 검색

정확히 일치하는 특정 사용자 그룹 멤버십 검색

사용자에게 공백이 포함된 여러 그룹 멤버십이 있습니다. 예:

  • 내도메인\직원
  • 내도메인\직원 관리자
  • 내도메인\스태프 슈퍼

사용자 그룹은 다음을 사용하여 반환될 수 있습니다.

id -Gn username | grep -i -o '\bstaff\b'

안타깝게도 사용자가 "mydomain\staff admin" 또는 "mydomain\staff super"의 구성원이지만 "mydomain\staff"가 아닌 경우 조회가 반환됩니다. "mydomain\staff" 그룹 멤버십만 검색하는 방법은 무엇입니까?


요청에 따라 샘플 출력은 다음과 같습니다.

id -Gn username

다음과 같이(모두 한 줄에):

mydomain\staff mydomain\staff 관리자 mydomain\staff super mydomain\다른 그룹

답변1

출력은 공백으로 구분 되므로 id -Gn사용할 수 없습니다.

idcoreutils 8.22부터 GNU 구현에는 -z공백으로 구분된 목록 대신 nul로 구분된 목록을 출력하는 옵션이 있으므로 이 작업을 수행할 수 있습니다( grep이미 사용 중인 것으로 보이는 GNU를 사용하여).

id -Gzn username | grep -Fxz 'mydomain\staff'

또는:

id -Gzn username | grep -z '\\staff$'

staff누구 에게나필드(그게 무엇이든).

그렇지 않은 경우 다음 명령이 있으면 getent문제를 리버스 엔지니어링할 수 있습니다.

staff_members=$(getent group 'mydomain\staff' | cut -d : -f 4-)
case ",$staff_members," in
  (*,username,*) printf '%s\n' 'username is member of mydomain\staff'
esac

관련 정보