如何在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";
推荐文章
- 在Bash中检查变量是否存在于列表中
- 查看PS命令的全部输出
- Linux命令将域名转换为IP
- 如何从命令行通过mysql运行一个查询?
- 在创建守护进程时执行双fork的原因是什么?
- 如何从命令行在windows中找到mysql数据目录
- 有效地测试Linux上的端口是否打开?
- 如何从另一个文件A中删除文件B中出现的行?
- 对以制表符分隔的文件进行排序
- 使用sudo时未找到命令
- 当有命令行参数时,如何使用GDB分析程序的核心转储文件?
- 如何使用查找命令从列表中查找所有具有扩展名的文件?
- 如何强制从另一个SSH会话分离屏幕?
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- Linux Bash中双&和分号有什么区别?