如何在Linux(可能还有其他unix)中列出一个组的所有成员?


当前回答

getent group insert_group_name_here | awk -F ':' '{print $4}' | sed 's|,| |g'

这将返回一个空格分隔的用户列表,我曾在脚本中使用该列表填充数组。

for i in $(getent group ftp | awk -F ':' '{print $4}' | sed 's|,| |g')
    do
        userarray+=("$i")
    done

or

userarray+=("$(getent group GROUPNAME | awk -F ':' '{print $4}' | sed 's|,| |g')")

其他回答

getent group <groupname>;

它可以在Linux和Solaris上移植,并且可以使用本地组/密码文件、NIS和LDAP配置。

我已经尝试了grep 'sample-group-name' /etc/group,它将根据这里的示例列出您指定的组的所有成员

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

我认为最简单的方法是以下步骤,你不需要安装任何软件包或软件:

首先,你找出你想知道的用户组的GID,有很多方法: cat /etc/group(最后一列是GID) Id用户(用户是属于组的人) 现在,您将在文件/etc/passwd中列出所有用户,但是您将使用以下后续命令应用一些过滤器,以获得前一个组的成员。

cut -d: -f1,4 /etc/passwd |grep GID (GID是你从步骤1中得到的数字)

切命令将选择一些“列”的文件,参数d设置分隔符”:“在这种情况下,参数- f选择“字段”(或列)在案例1和4所示(在/ etc / passwd文件,1º列是用户的名称和4º是用户所属的组的GID),完成| grep GID将滤波器组(4º列),你选择了。

我所做的与上面的perl代码类似,但是用本地perl函数替换了getent和id。它要快得多,应该可以跨不同的*nix口味工作。

#!/usr/bin/env perl

use strict;
my $arg=shift;
my %groupMembers; # defining outside of function so that hash is only built once for multiple function calls

sub expandGroupMembers{
my $groupQuery=shift;
unless (%groupMembers){
    while (my($name,$pass,$uid,$gid,$quota,$comment,$gcos,$dir,$shell,$expire)=getpwent()) {
            my $primaryGroup=getgrgid($gid);
            $groupMembers{$primaryGroup}->{$name}=1;
    }
    while (my($gname,$gpasswd,$gid,$members)=getgrent()) {
            foreach my $member (split / /, $members){
                    $groupMembers{$gname}->{$member}=1;
            }
    }
}
my $membersConcat=join(",",sort keys %{$groupMembers{$groupQuery}});
return "$membersConcat" || "$groupQuery Does have any members";
}
print &expandGroupMembers($arg)."\n";