GNU/Linux >> Linux Esercitazione >  >> Linux

Come elencare tutti gli utenti in un gruppo Linux?

getent group <groupname>;

È portabile su Linux e Solaris e funziona con file di gruppo/password locali, configurazioni NIS e LDAP.


Sfortunatamente, non esiste un modo valido e portatile per farlo che io sappia. Se tenti di analizzare /etc/group, come suggerito da altri, mancheranno gli utenti che hanno quel gruppo come gruppo principale e chiunque sia stato aggiunto a quel gruppo tramite un meccanismo diverso dai file flat UNIX (ad es. LDAP, NIS, pam-pgsql, ecc.).

Se dovessi assolutamente farlo da solo, probabilmente lo farei al contrario:usa id per ottenere i gruppi di ogni utente sul sistema (che estrarrà tutte le fonti visibili a NSS) e utilizzare Perl o qualcosa di simile per mantenere una tabella hash per ogni gruppo scoperto annotando l'appartenenza di quell'utente.

Modifica:ovviamente, questo ti lascia con un problema simile:come ottenere un elenco di tutti gli utenti sul sistema. Poiché la mia posizione utilizza solo file flat e LDAP, posso semplicemente ottenere un elenco da entrambe le posizioni, ma ciò potrebbe essere vero o meno per il tuo ambiente.

Modifica 2:qualcuno di sfuggita mi ha ricordato che getent passwd restituirà un elenco di tutti gli utenti sul sistema inclusi quelli da LDAP/NIS/ecc., ma getent group mancheranno ancora gli utenti che sono membri solo tramite la voce di gruppo predefinita, quindi questo mi ha ispirato a scrivere questo rapido hack.


#!/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. Come trovare tutti gli utenti Sudo in Linux

  2. Come elencare tutti i pacchetti installati in Linux

  3. Come elencare tutti gli utenti che hanno effettuato l'accesso

  4. Linux - Come elencare tutti gli utenti

  5. Come posso elencare tutti gli utenti bloccati in Linux?

Come elencare gli utenti in Linux

Come trovare tutti i caratteri installati in Linux

Come elencare utenti e gruppi su Linux

Come elencare tutti gli utenti di un gruppo in Linux

Come elencare tutti i gruppi in Linux?

Come elencare tutti i file ordinati per dimensione in Linux?