当前位置: 首页 > 面试题库 >

如何列出Linux组中的所有用户?

金烨华
2023-03-14
问题内容

如何列出Linux中某个组的所有成员(可能还包括其他unice)?


问题答案:

不幸的是,据我所知,没有很好的便携式方法可以做到这一点。如果您尝试解析/ etc /
group(如其他人所建议的那样),则会错过以该组为主要组的用户以及通过UNIX平面文件(例如LDAP,NIS, pam-pgsql等)。

如果我绝对必须自己做,则可能相反:使用id来获取系统上每个用户的组(这将使NSS看到所有源),并使用Perl或类似的方法来维护哈希发现的每个组的表,注意该用户的成员资格。

编辑:当然,这给您留下了类似的问题:如何获取系统上每个用户的列表。由于我的位置仅使用平面文件和LDAP,因此我只能从这两个位置获取列表,但这可能对您的环境不适用。

编辑2:有人提醒我,getent passwd它将返回系统上所有用户的列表,包括来自LDAP / NIS / etc。的用户, 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";
    }
}


 类似资料:
  • 问题内容: 我想建立一个基于php的站点,该站点在我的Ubuntu服务器上(自动)执行一些命令 我要做的第一件事是转到文件(sudoers)并添加用户www-data,以便我可以以root权限执行php命令! 然后我的PHP代码是 它仅返回一个用户(最后一个用户)!如何使其返回所有用户? 谢谢 问题答案: 从exec的PHP手册中: 返回值 命令结果的最后一行。如果您需要执行命令并直接将命令中的所

  • 问题内容: 我在Debian OS中配置了多个Python环境。有没有办法列出Linux中所有已配置的环境? 这与以下评论中指出的可能重复项不同。我的意思是仅使用创建的虚拟环境。 问题答案: 如果仅使用低级程序创建一个virtualenv,则该目录中只有某个目录,其中包含该特定环境。您只能通过在您的目录(或您可能用于创建virtualenvs的任何其他目录列表)上运行来“列出”这些文件,以查找py

  • 我需要在Active Directory中找到特定组中的所有用户。我可以查询AD的特定组,我想得到用户,但我无法查询用户的特定组。 以下工作: 上面的查询返回所有类似“test”的广告组。但我该如何从广告群中获取用户列表呢?我特别想列出像“test”这样的所有组中的用户。

  • 问题内容: 有没有一种方法可以获取实例中所有数据库中所有存储过程中引用的所有列和表?输出应为: 问题答案: 这将得到您想要的列表,但是,如果您在动态SQL中嵌入了此类列引用(并且可能找不到依赖于延迟名称解析的引用),则将无济于事。SQL Server不会解析存储过程的文本以提供DMV输出。 现在尝试使用子句来处理在同一服务器上具有不同归类的数据库的情况。 如果您的数据库处于80兼容模式,那么该语法

  • 问题内容: 我的系统上安装了python模块,我希望能够看到其中提供了哪些函数/类/方法。 我想在每个函数上调用doc函数。在ruby中,我可以执行类似ClassName.methods之类的操作来获取该类上所有可用方法的列表。python中是否有类似的东西? 例如。就像是: 问题答案: 该模块。另请参阅模块,交互式解释器中的功能以及生成所需文档的命令行工具。你可以为他们提供希望查看其文档的课程。

  • 基本上,我在寻找的“反面”或者这个问题。 更具体地说: 我希望清理文件夹中列出的所有包在我的root文件中。一种新的开始之前。 我不想简单地的原因是因为我有一些本地模块不想被删除。