GNU/Linux >> Znalost Linux >  >> Linux

Jak vypsat všechny uživatele ve skupině Linuxu?

getent group <groupname>;

Je přenosný v Linuxu i Solarisu a funguje s místními soubory skupin/hesel, konfiguracemi NIS a LDAP.


Bohužel neexistuje žádný dobrý, přenosný způsob, jak to udělat, o kterém vím. Pokud se pokusíte analyzovat /etc/group, jak navrhují ostatní, zmeškáte uživatele, kteří mají tuto skupinu jako svou primární skupinu, a každého, kdo byl do této skupiny přidán jiným mechanismem než plochými soubory UNIX (tj. LDAP, NIS, pam-pgsql atd.).

Pokud bych to musel udělat sám, pravděpodobně bych to udělal obráceně:použijte id získat skupiny každého uživatele v systému (což stáhne všechny zdroje viditelné pro NSS) a použít Perl nebo něco podobného k udržování hashovací tabulky pro každou objevenou skupinu s uvedením členství daného uživatele.

Edit:Samozřejmě, že máte podobný problém:jak získat seznam všech uživatelů v systému. Vzhledem k tomu, že moje umístění používá pouze ploché soubory a LDAP, mohu získat pouze seznam z obou umístění, ale to může, ale nemusí platit pro vaše prostředí.

Edit 2:Někdo mi mimochodem připomněl, že getent passwd vrátí seznam všech uživatelů v systému včetně uživatelů z LDAP/NIS/atd., ale getent group stále budou chybět uživatelé, kteří jsou členy pouze prostřednictvím výchozí položky skupiny, takže to mě inspirovalo k napsání tohoto rychlého hacku.


#!/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 ([email protected] or [email protected])
#
# 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";
    }
}

Linux
  1. Jak vypsat všechny nainstalované balíčky v Linuxu

  2. Jak vypsat všechny přihlášené uživatele

  3. Jak mohu uvést seznam všech zamčených uživatelů v Linuxu?

  1. Jak najít všechny uživatele Sudo v Linuxu

  2. Linux - Jak vypsat všechny uživatele

  3. Jak vypsat všechny soubory oddílu na linuxu?

  1. Jak přidat uživatele do skupiny v Linuxu

  2. Jak zobrazit seznam uživatelů v Linuxu, příkaz Seznam všech uživatelů

  3. Jak vypíšu všechny uživatele s rootem?