답변:
grep을 사용할 수 있습니다 :
grep '^group_name_here:' /etc/group
여기에는이 그룹을 기본 그룹으로 사용하는 사용자가 아닌 보충 그룹 구성원 만 표시됩니다. 그리고 LDAP와 같은 네트워크 서비스의 그룹이 아닌 로컬 그룹 만 찾습니다.
sudo lid -g {group}
이 답변이 그룹에 8 명의 사용자를 sudo lid -g {group}
나열하고 10을 나열하는 시스템을 가지고 있다고 생각한다 .
getent
아래에서 @Murray Jensen의 답변 보기
getent 명령 을 사용하는 것을 선호합니다 ...
getent는 시스템과 동일한 이름 서비스를 사용하므로 getent는 LDAP와 같은 네트워크 정보 소스에서 얻은 정보를 포함하여 모든 정보를 표시합니다.
따라서 그룹의 경우 다음을 사용해야합니다 ...
getent group name_of_group
여기서 name_of_group 은 조회하려는 그룹으로 바뀝니다. 이는 보조 그룹 멤버쉽 만 리턴하며이 그룹을 기본 그룹으로 사용하는 사용자는 포함하지 않습니다.
당신이 할 수있는 다른 많은 룩업이 있습니다 ... passwd
또 다른 유용한 것입니다.
sudo lid -g {group}
이 답변이 그룹에 8 명의 사용자를 sudo lid -g {group}
나열하고 10을 나열하는 시스템을 가지고 있다고 생각한다 .
보다 쉬운 groups [username]
모든 로컬 사용자 및 해당 로컬 그룹을 나열하려면 다음을 수행하십시오.
cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups
"그룹 : 명령을 찾을 수 없음"이 표시되면 경로를 재설정하기 위해 환경 경로를 더 나쁘게 편집했을 수 있습니다. PATH=$(getconf PATH)
| grep {group}
추가되고는 달리 정답을 제공 getent group name_of_group
또는grep '^group_name_here:' /etc/group
cat /etc/passwd
사용해야합니다 gentent passwd
. 유일한 단점은 꽤 오랜 시간이 걸릴 수 있다는 것입니다.
groupmems -g 그룹 이름 -l
명명 된 그룹의 모든 사용자를 나열합니다.
groupmems
그러나, 대부분의 리눅스 배포판에 사용되는 그림자 유틸의 일부입니다 groupmems
현재 (데비안 결석 및 파생 버그 2016년 11월)의 등 (현재 고정하지만 아직 릴리스에 포함되지 않음)
groupmems
그룹이 /etc/group
아닌 그룹 만 처리하며 / etc / gshadow를 열려고 할 때 수퍼 유저 권한이 필요합니다.
cut
, 친구) 의 추가 구문 분석이 필요하지 않으므로 특정 상황에 이상적입니다 .
sudo lid -g {group}
. 이 답변에 그룹에 8 명의 사용자를 sudo lid -g {group}
나열하고 10을 나열하는 시스템이 있습니다 .
groups
명령은 사용자의 그룹 멤버쉽을 인쇄합니다. lid
명령을 사용 하여 다음과 같은 그룹의 사용자를 나열 할 수 있습니다 .
# lid -g <groupname>
lid
libuser의 일부이며 많은 배포판에서 기본적으로 설치되지 않습니다.
OP는 groups 명령 을 사용할 가능성을 배제하기 위해 질문을 표현했습니다 . Linux에서 coreutils의 일부이므로 (a) 제거되었거나 (b) OP가 이름을 잘못 입력했습니다.
groups
예를 들어 OP는 다음 과 같이 사용할 수 있습니다 .
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done
하나의 제안 답변은에서 그룹 이름에 대한 grep입니다 /etc/group
. 때로는 의도 한대로 작동합니다.
grep을 약간 더 잘 사용하려면 다음 구문을 고려하십시오 /etc/group
.
group_name:password:GID:user_list
첫 번째 콜론 앞 부분 만 유효한 그룹 이름이되도록합니다. 구문에 관계없이 일반 grep은 파일에서 잘못된 결과를 가져올 수 있습니다. 정규 표현식을 사용하여 grep이 필요한 것을 정확하게 일치 시키십시오.
grep -E '^users:' /etc/group |sed -e 's/^.*://'
또는 쉘 변수를 사용하는 경우 :
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
그러나 기본 그룹에 없는 항목 만 나열합니다 . 추가하려면 사람들을 , 당신은에서 그룹 ID 번호를 추출하여, 고려 예를 들어, 암호 파일을 취할 필요 /etc/group
하고, 그 기본 그룹에서 일치하는 사용자를 인쇄 /etc/passwd
예를 들면,
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd
grep과 sed를 사용하여 동일한 작업을 수행 할 수 있지만 awk를 사용하는 것보다 더 효과적입니다.
또 다른 제안 답변은을 사용하여 제안 getent
했으며 Linux 시스템에도있을 수 있습니다 (Debian에서는 GNU libc의 일부입니다). 그러나 빠른 확인은 /etc/group
내용 만 제공한다는 것을 보여줍니다 .
나는 (대부분의 경우처럼) 설치 하지 않았 libusers
거나 lid
설치되어 있지 않으므로 OP의 조건을 충족시키는 지 여부에 대해서는 언급 할 수 없습니다.
id
그룹 정보를 제공 하는 프로그램 도 있습니다 . 누군가가 가능한 대답으로 그것을 확장 할 수 있습니다.
sed -n "s/^$groupname:.*://p" /etc/group
그룹 이름에 RE 연산자가 포함 된 경우 (예 .
를 들어 그룹 이름에서 일반적이지 않은 경우) 여전히 잘못된 결과를보고 할 수 있습니다 .
getent
는 LDAP / NIS도 쿼리하지만 그룹 데이터베이스에 대해 열거가 명시 적으로 비활성화되어있는 경우에는 가능하지 않습니다.
groups
는 특정 사용자가 특정 그룹의 구성원 목록에 반대의 구성원 인 그룹이 나열으로 도움이되지 것입니다.
매력처럼 작동합니다.
cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
sudo lid -g
8에 반면에 8 명 그룹에 4 명의 회원 이 있습니다. @Bhavik 허용되는 답변도 정확하지 않습니다.
일부는 libuser ( 'lid') 또는 멤버 ( 'members')를 설치하라는 메시지를 표시합니다. 그러나 로그인 그룹 회원 자격 으로이 문제 를 처리 한 https://unix.stackexchange.com/a/349648/77959 답변을 기반으로 다른 그룹이 해당 스크립트에 포함되지 않는 것으로 나타났습니다. 그래서-두 가지 방법 중 가장 좋은 방법은 다음과 같습니다.
#!/bin/bash
if [ $# -eq 1 ]; then
list_a=`cut -d: -f1,4 /etc/passwd | grep $(getent group "$1"| cut -d: -f3) | cut -d: -f1`
list_b=`getent group "$1"|cut -d: -f4|sed 's/,/\n/g'`
echo -e "$list_a\n$list_b"|grep -v "^$"|sort|uniq
else
echo "pass me a group to find the members of"
fi
getent
이나 grep 과는 달리 내 시스템에서 올바르게 작동했습니다.'^group_name_here:' /etc/group
groups
명령입니다. coreutils의 일부이기 때문에 Linux에는 없을 것입니다.