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


当前回答

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

其他回答

getent group <groupname>;

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

有一个方便的Debian和Ubuntu包叫做“members”,它提供了这个功能:

描述:显示一个组的成员;默认为所有成员 Members是groups的补充:groups表示指定用户所属的组,Members表示用户 属于特定群体的 ... 你可以请求主要成员,次要成员,都在 一行,每一行都在单独的行上。

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

下面是一个非常简单的awk脚本,它考虑了其他答案中列出的所有常见陷阱:

getent passwd | awk -F: -v group_name="wheel" '
  BEGIN {
    "getent group " group_name | getline groupline;
    if (!groupline) exit 1;
    split(groupline, groupdef, ":");
    guid = groupdef[3];
    split(groupdef[4], users, ",");
    for (k in users) print users[k]
  }
  $4 == guid {print $1}'

我将它用于支持ldap的设置,运行在任何具有符合标准的getent和awk的设备上,包括solaris 8+和hpux。

你可以在一个命令行中完成:

cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1

上面的命令列出了所有使用groupname作为主组的用户

如果还希望列出具有groupname的用户作为次要组,则使用以下命令

getent group <groupname> | cut -d: -f4 |  tr ',' '\n'