GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo enumerar todos los usuarios en un grupo de Linux?

getent group <groupname>;

Es portátil tanto en Linux como en Solaris, y funciona con archivos de contraseña/grupo local, NIS y configuraciones LDAP.


Desafortunadamente, no existe una forma buena y portátil de hacer esto que yo sepa. Si intenta analizar /etc/group, como sugieren otros, perderá a los usuarios que tienen ese grupo como su grupo principal y a cualquiera que se haya agregado a ese grupo a través de un mecanismo que no sea archivos planos de UNIX (es decir, LDAP, NIS, pam-pgsql, etc.).

Si tuviera que hacer esto yo mismo, probablemente lo haría al revés:use id para obtener los grupos de cada usuario en el sistema (que extraerá todas las fuentes visibles para NSS), y use Perl o algo similar para mantener una tabla hash para cada grupo descubierto, anotando la membresía de ese usuario.

Editar:Por supuesto, esto te deja con un problema similar:cómo obtener una lista de todos los usuarios del sistema. Dado que mi ubicación solo usa archivos planos y LDAP, solo puedo obtener una lista de ambas ubicaciones, pero eso puede o no ser cierto para su entorno.

Edición 2:alguien de pasada me recordó que getent passwd devolverá una lista de todos los usuarios del sistema, incluidos los de LDAP/NIS/etc., pero getent group aún extrañaré a los usuarios que son miembros solo a través de la entrada de grupo predeterminada, por lo que me inspiró a escribir este truco rápido.


#!/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. Cómo encontrar todos los usuarios de Sudo en Linux

  2. Cómo enumerar todos los usuarios registrados

  3. Linux - Cómo enumerar todos los usuarios

  4. ¿Cómo enumero a todos los usuarios con root?

  5. ¿Cómo enumerar todos los archivos de una partición en Linux?

Cómo listar usuarios en Linux

Cómo encontrar todas las fuentes instaladas en Linux

Cómo enumerar usuarios y grupos en Linux

Cómo enumerar todos los usuarios de un grupo en Linux

¿Cómo enumerar todos los grupos en Linux?

¿Cómo enumerar todos los archivos ordenados por tamaño en Linux?