Título: scrip de perl Publicado por: stres en 26 Mayo 2004, 07:22 am 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. Título: Re: scrip de perl Publicado por: _XuRRo_ en 26 Mayo 2004, 10:26 am 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 Título: Esto es lo que estoy haciendo Publicado por: stres en 27 Mayo 2004, 06:49 am 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 Título: Re: scrip de perl Publicado por: byebye en 27 Mayo 2004, 09:53 am bueno pues para sacarlo en el formato ese, te pongo un ejemplo cutre pero puede que te de alguna idea:
Código: foreach $a (@lines) { eso te lo muestra en formato usuario/uid/home. Título: Re: scrip de perl Publicado por: stres en 28 Mayo 2004, 06:00 am 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 Título: Re: scrip de perl Publicado por: stres en 28 Mayo 2004, 06:02 am 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 Título: Re: scrip de perl Publicado por: byebye en 28 Mayo 2004, 06:43 am 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. Título: Re: scrip de perl Publicado por: stres en 28 Mayo 2004, 06:56 am 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"; } Título: Re: scrip de perl Publicado por: _XuRRo_ en 28 Mayo 2004, 19:38 pm 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:
Código: open(USUARIO,"whoami|"); #redireccionamos la salida del comando a un pipe 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 |