• Publicidad

Consulta sobre usuarios en Linux

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Consulta sobre usuarios en Linux

Notapor situ » 2008-11-02 16:52 @745

Los molesto porque en este caso tengo un script en bash el cual me da como resultado los usuarios de mi sistema asociados a los grupos creados en el mismo, me gustaría migrarlo a Perl.
¿Alguien me puede ayudar? o tienen alguna web donde pueda leer sobre esto.

Mi script:
http://pastebin.com/m4088c7ff

Saludos
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Notapor explorer » 2008-11-02 17:12 @758

En Perl no te hace falta diseccionar el fichero passwd.

Te vale con usar las funciones get*.

Por ejemplo:
Código: Seleccionar todo
perl -le 'print scalar getgrgid(100);'
users
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2008-11-02 19:30 @854

Gracias,
Capaz que suena medio vago de mi parte, pero no tenés algún ejemplo o no sabes dónde puedo conseguir alguno sobre lo que hago buscado.
Saludosl
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2008-11-03 04:23 @224

Aquí tienes uno:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

### Leemos todos los usuarios
my %usuarios;
setpwent();                                                 ## Inicio de acceso al fichero passwd
while ( my($nombre,$passwd,$uid,$gid) = getpwent() ) {      ## Bucle por todos los usuarios
    $usuarios{$uid} = [ $nombre, $passwd, $gid ];
}
endpwent();                                                 ## Fin de acceso al fichero passwd

### Leemos todos los grupos
my %grupos;
setgrent();                                                 ## Inicio de acceso al fichero /etc/group
while ( my($nombre,$passwd,$gid,$miembros) = getgrent() ) { ## Bucle para todos los grupos
    $grupos{$gid} = [ $nombre, $passwd, $miembros ];
}
endgrent();                                                 ## Fin de acceso al fichero /etc/group

## Los usuarios pertenecen a un grupo (el grupo por defecto). La relación con ese grupo no
## suele estar reflejada en el fichero /etc/group.
## Aquí añadimos el usuario al conjunto de usuarios de su grupo por defecto.
## El efecto es igual que llamar al programa 'groups', que devuelve todos los grupos a los que
## pertenece el usuario
for my $uid ( keys %usuarios ) {
    my $gid = $usuarios{$uid}->[2];
    my $miembros_del_grupo = $grupos{$gid}->[2];
    if (!$miembros_del_grupo) {
        $grupos{$gid}->[2] = $usuarios{$uid}->[0];
    }
    elsif ($gid !~ /\b$miembros_del_grupo\b/) {
        $grupos{$gid}->[2] = join " ", $miembros_del_grupo, $usuarios{$uid}->[0];
    }
}

#use Data::Dumper;
#print Dumper \%usuarios;
#print Dumper \%grupos;

## Para cada usuario
for my $uid ( keys %usuarios ) {
    my $nombre = $usuarios{$uid}->[0];
    #print "Usuario: $nombre\n";

    ## Para todos los grupos de ese usuario
    for my $gid ( keys %grupos ) {
        next if $grupos{$gid}->[2] !~ /\b$nombre\b/;
        #print "\tGrupo: $gid, $grupos{$gid}->[0]\n";

        if ($gid < 500) {
            print "$nombre pertenece al grupo $grupos{$gid}->[0] ($gid)\n";
        }
    }
}

__END__
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2008-11-03 07:33 @356

Como siempre un lujo pertenecer al foro y que halla gente como explorer.
Gracias.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados