scrip de perl

Iniciado por stres, 26 Mayo 2004, 07:22 AM

0 Miembros y 1 Visitante están viendo este tema.

stres

Estoy empezando con perl y me piden el siguiente ejercicio, tengo que escribir un scrip de perl pensado para administrador, que produzca el siguiente resultado:

usuario       (UID)              directorio home              espacio            seguridad
------------------------------------------------------------------------------------------------
alberto (464)                           /home/alberto             845495K 

el apartado seguridad estará en blanco, salvo si se da alguno de estos casos:

el user id es cero (mensaje: UID=0)
la información sobre password en /etc/passwd es "!" o "*" (mensaje:PASSWD)

A ver si me podeis orientar.

_XuRRo_

#1
Pues no parece complicado,mira:  yo llamaria a otros programas tipicos de linux, como 'whois' ,  'du'  y trabajaria con el fichero /etc/passwd. Con esas tres cosas ya puedes extraer toda la informacion q necesitas mostrar.

t doy mas pistas ;) utilizaria 'whoami' para saber q usuario soy, buscaria la linea correspondiente en el /etc/passw. De ahi saco el directorio home, el uid, y poco mas.... ves por donde va la cosa?? :)

salu2



stres


De momento leo el /etc/passwd
#!/usr/bin/perl

$file = "etc/passwd"; #abro el fichero
open (INFO, $file); # lo abre
@lines = <INFO>; # lo lee en un vector
close (INFO); #cierra el fichero
print @lines; #imprime el vector

Esto es lo que llevo echo ahora el problema que me surge es como ponerlo con el formato que indique en el primer post creo que hay que utilizar el split y el espacio el du.

voy bien encaminado.

Un saludo de stres

byebye

bueno pues para sacarlo en el formato ese, te pongo un ejemplo cutre pero puede que te de alguna idea:
foreach $a (@lines) {
@datos=split(":",$a);
print "$datos[0] $datos[2] $datos[5]\n";
}


eso te lo muestra en formato usuario/uid/home.

stres

Un saludo Mr. Potato.
Me has dato muy buenas pistas.
Ahora lo que no logro conseguir es si en el camp User ide es 0 quiero que me salga el mensaje UID=0
Y en el campo passwd es "!" o "*" quiero que me salga mesaje=PASSWD.

A ver si me vuelver a orientar.

Un saludo.
Stres

stres

Por cierto se podría poner un campo para que me saliera tambien el espacio que utiliza cada ususario, creo que con el comando du podría hacerlo

Gracias

byebye

solo tienes que poner algun if. en $a en cada vuelta tienes una linea, puedes usar otro split para pillar el campo de la linea que te interese y compararlo con el que necesitas, si es igual haces una cosa u otra.

por ejemplo haces otro split a cada linea con ":" y miras en q indice se te queda el que te interesa.

stres

#7
Como podría añadir el campo espacio utilizado por el usuario, sería con el comando du. Y por que me repite dos veces la palabra PASSWD cuano hago el condicional if con el campo de passwd
#!/usr/bin/perl
format STDOUT_TOP =
                SALIDA FORMATEADA
.
format STDOUT =
Usuario              UID       DIRECTORIO HOME      SEGURIDAD
-------------------------------------------------------------
@<<<<<<<<<<<<<<<<<@|||||||||||@|||||||||||||||@>>>>>>>>>>>>>
$datos[0]                           $datos[2]     $datos[5]       $datos[1]
.
    write;
$FILE = "/etc/passwd";
open(INFO,$FILE);
@lines= <INFO>;
close (INFO);
foreach $a (@lines)
    {
    @datos=split(":",$a);
   if ($datos[2] <=0)
{
    print $datos[2]= "UID=0\t"
}
if ($datos[1]= x)
{
    print $datos[1]= "PASSWD\t"
}
    print "$datos[0]\t $datos[2]\t $datos[5]\t $datos[1]\n";
}

_XuRRo_

Para ejecutar un prorgama externo a perl,se pude utilizar  system( " lo q sea" ) o la comilla invertida y ejecuta un comando cualquiera q le indiques,  pero no se puede recojer lo q muestra el comando para utilizarlo dentro de mi programa en perl. La forma para hacer eso es la siguiente:



open(USUARIO,"whoami|"); #redireccionamos la salida del comando a un pipe
$usuario =<USUARIO>; #leemos del pipe
close(USUARIO);
chomp($usuario);


Con este codigo obtenemos en la variable $usuario lo q ha devuelto el comando 'whoami' ,  de la misma forma se puede utilizar con cualquier comando, como du por ejemplo. ;)
Haz un "man du" en la consola y mira como funciona. Para pasar parametros al comando:

open(USUARIO,"du $param1 $param2 |"); # ejemplo


salu2