[linux] Linux 그룹의 모든 사용자를 나열하는 방법은 무엇입니까?

Linux에서 그룹의 모든 구성원을 나열하려면 어떻게해야합니까?



답변

불행히도, 내가 아는 좋은 휴대용 방법은 없습니다. 다른 사람들이 제안한 것처럼 / etc / group을 구문 분석하려고하면 해당 그룹을 기본 그룹으로 사용하는 사용자와 UNIX 플랫 파일 이외의 메커니즘을 통해 해당 그룹에 추가 된 사용자 (예 : LDAP, NIS, pam-pgsql 등).

내가 이것을 직접해야한다면, 아마도 역순으로 할 것입니다 : id시스템의 모든 사용자 그룹을 가져 와서 (NSS에 모든 소스를 표시 할 것입니다) Perl 또는 비슷한 것을 사용하여 해시를 유지하십시오 각 그룹의 테이블은 해당 사용자의 멤버쉽을 발견했습니다.

편집 : 물론 이것은 시스템의 모든 사용자 목록을 얻는 방법과 비슷한 문제가 있습니다. 내 위치는 플랫 파일과 LDAP 만 사용하므로 두 위치 모두에서 목록을 얻을 수 있지만 사용자 환경에 맞지 않을 수도 있습니다.

편집 2 : 전달 중 누군가 getent passwdLDAP / NIS 등의 사용자를 포함하여 시스템의 모든 사용자 목록을 반환 하지만 getent group 여전히 기본 그룹 항목을 통해서만 구성원 인 사용자를 그리워한다는 사실을 상기시켜주었습니다. 이 빠른 해킹을 작성하십시오.


#!/usr/bin/perl -T
#
# Lists members of all groups, or optionally just the group
# specified on the command line
#
# Copyright © 2010-2013 by Zed Pobre (zed@debian.org or zed@resonant.org)
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#

use strict; use warnings;

$ENV{"PATH"} = "/usr/bin:/bin";

my $wantedgroup = shift;

my %groupmembers;
my $usertext = `getent passwd`;

my @users = $usertext =~ /^([a-zA-Z0-9_-]+):/gm;

foreach my $userid (@users)
{
    my $usergrouptext = `id -Gn $userid`;
    my @grouplist = split(' ',$usergrouptext);

    foreach my $group (@grouplist)
    {
        $groupmembers{$group}->{$userid} = 1;
    }
}

if($wantedgroup)
{
    print_group_members($wantedgroup);
}
else
{
    foreach my $group (sort keys %groupmembers)
    {
        print "Group ",$group," has the following members:\n";
        print_group_members($group);
        print "\n";
    }
}

sub print_group_members
{
    my ($group) = @_;
    return unless $group;

    foreach my $member (sort keys %{$groupmembers{$group}})
    {
        print $member,"\n";
    }
}


답변

getent group <groupname>;

Linux 및 Solaris 모두에서 이식 가능하며 로컬 그룹 / 암호 파일, NIS 및 LDAP 구성과 함께 작동합니다.


답변

Python을 사용하여 그룹 멤버를 나열하십시오.

python -c “import grp; print grp.getgrnam ( ‘GROUP_NAME’) [3]”

https://docs.python.org/2/library/grp.html을 참조 하십시오


답변

lid -g groupname | cut -f1 -d'('


답변

다음 명령은에 속하는 모든 사용자를 나열 <your_group_name>하지만 /etc/groupLDAP, NIS 등이 아닌 데이터베이스로 관리되는 사용자 만 나열합니다 . 또한 보조 그룹에 대해서만 작동 하며 기본 그룹이 기본 그룹으로 설정되어 있으므로 해당 그룹을 기본으로 설정 한 사용자는 나열하지 않습니다. GID파일에 (숫자 그룹 ID) 로 저장됩니다 /etc/passwd.

grep <your_group_name> /etc/group


답변

다음 명령은에 속하는 모든 사용자를 나열 <your_group_name>하지만 /etc/groupLDAP, NIS 등이 아닌 데이터베이스로 관리되는 사용자 만 나열합니다 . 또한 보조 그룹에 대해서만 작동 하며 기본 그룹이 기본 그룹으로 설정되어 있으므로 해당 그룹을 기본으로 설정 한 사용자는 나열하지 않습니다. GID파일에 (숫자 그룹 ID) 로 저장됩니다 /etc/passwd.

awk -F: '/^groupname/ {print $4;}' /etc/group


답변

다음 쉘 스크립트는 모든 사용자를 반복하고 지정된 그룹에 속하는 사용자 이름 만 인쇄합니다.

#!/usr/bin/env bash
getent passwd | while IFS=: read name trash
do
    groups $name 2>/dev/null | cut -f2 -d: | grep -i -q -w "$1" && echo $name
done
true

사용 예 :

./script 'DOMAIN+Group Name'

참고 : 사용자 및 그룹 (뿐만 아니라위한 NIS 및 LDAP을 확인합니다이 솔루션 passwdgroup파일). 또한 그룹에 추가되지 않고 그룹이 기본 그룹으로 설정된 사용자를 고려합니다.

편집 : 사용자가 같은 이름을 가진 그룹에 속하지 않는 드문 시나리오에 대한 수정 사항이 추가되었습니다.

편집 : 쉘 스크립트의 형태로 작성; @Max Chernyak aka hakunin이 제안한 상태로 true종료하도록 추가되었습니다 . 가끔 건너 뛰기 위해 버려졌습니다 .0stderrgroups: cannot find name for group ID xxxxxx