Sab Abr 28, 2007 8:19 am
|
 |
ale9gaditano
Perlero Nuevo

|
Registrado: 28 Abr 2007
Mensajes: 3
|
|
| Podéis ayudarme con una orden de Linux |
|
|
Hola a todos, en la facultad me han pedido que haga una orden de Linux (estamos usando el SUSE) en Perl, pero estoy bastante escaso de Perl.
Me gustaría saber si alguna persona que maneje bien Perl y al cual le sea fácil la orden que me han pedido, me lo pueda hacer. La orden y su función es la siguiente:
| Cita: | Enunciado:
Deseamos realizar un programa en PERL que nos permita manejar el contenido del fichero fstab.
Este se llamará adminfstab y tendrá el siguiente formato:
adminfstab –l [ pmontaje | dispositivo [-d]] | -a | -b pmontaje | -t lista_fs... donde:
-l Mostrará un listado de las entradas del fichero fstab, ordenado por el primer campo y numerado.
Esta opción puede estar acompañada de un literal que nos indique el punto de montaje o el nombre de dispositivo (o partición) a mostrar. Si no se indica ninguno, se mostraran todas las entradas del fichero fstab.
Si además la acompañamos de la opción –d, en lugar de mostrar los campos del fichero fstab, nos mostrará el árbol de directorios y ficheros del punto de montaje o directorio.
-a Añadirá una nueva línea al fichero. Para ello el programa pedirá los campos necesarios.
-b Borrará la entrada del fichero fstab correspondiente al punto de montaje pmontaje
-t Listará por pantalla los puntos de montaje que tienen como sistema de ficheros la lista que acompaña a esta opción.
Si el programa fuera llamado con una sintaxis incorrecta o sin indicar ninguna opción, este mostrará la sintaxis correcta del programa y volverá al shell del sistema.
Ejemplos de llamadas al programa:
adminfstab –l /dev/hda1
adminfstab –l /dev/hda1 -d
adminfstab –l /
adminfstab –a
adminfstab –b /dev/hdb2
adminfstab –t ext2 ext3
adminfstab –t vfat
Preparación del sistema:
Para poder realizar este ejercicio sin que le afecte a la estructura de su sistema es conveniente prepararlo previamente. Para ello siga las siguientes instrucciones:
1. En su directorio de trabajo cree el directorio etc. El programa debe residir en
este directorio.
2. Copie el fichero /etc/fstab al directorio etc creado anteriormente.
Realice el programa teniendo en cuenta esta estructura y nunca sobre los ficheros y directorios originales.
Esta utilidad podrá ser ejecutada por cualquier usuario, excepto la opción –a, que sólo la podrá ejecutar el administrador o root, para ello y como una posible forma de averiguar que usuario está ejecutando el programa, puede buscar información sobre las variables del sistema $< y $>. Usted deberá controlar los permisos sobre ficheros y directorios. Así como controlar los posibles errores de apertura y cierre de ficheros y directorios que se puedan producir.
NO PODRÁ EJECUTAR NINGUNA ORDEN DEL SISTEMA DESDE DENTRO
DEL PROGRAMA, ES DECIR, NO PODRÁ UTILIZAR LA ORDEN system. |
Aparte tengo la manera de evaluar el enunciado, si alguien me lo pide que me ponga el correo y se lo mando.
Muchas gracias por todo.
Saludos |
|
|
|

Sab Abr 28, 2007 12:06 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenido a los foros de Perl en Español.
Léete antes este hilo:
http://perlenespanol.baboonsoftware.com/foro/viewtopic.php?t=1120
¿No has podido aprender Perl a lo largo del curso? ¿Por alguna razón?
Si te animas a hacerlo tu mismo, con gusto te responderemos a todas las dudas.
como bienvenida, te regalo las líneas que añaden una nueva entrada al fichero fstab:
| Perl: | $linea = join("\t", $dispositivo, $pmontaje, $tipo, $atributos, $dump, $orden);
print $fichero $linea, "\n"; |
|
|
Sab Abr 28, 2007 9:09 pm
|
 |
ale9gaditano
Perlero Nuevo

|
Registrado: 28 Abr 2007
Mensajes: 3
|
|
|
|
|
El problema es que en la facultad hemos dado 5 clases de Perl de 1 hora y 15 minutos... por lo cual... creo que no llegamos a ese nivel. Creo que se han pasado un poco bastante con el problema que nos han mandado para lo que hemos dado.
Muchas gracias por el principio.
Saludos |
|

Dom Abr 29, 2007 5:33 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
6 horas y cuarto de Perl... yo creo que os han dado bastante... al menos para saber las nociones básicas.
A ver...
* Para leer la línea de argumentos, sólo hay que leer la lista almacenada en @ARRAY
* Para leer el fichero fstab, basta con el open(), <> y close()
* Para sacar el listado ordenado, usar sort()
* La opción -d puede ser algo más complicada, porque hay que recorrer de forma recursiva un árbol de directorios, pero esto es un problema que siempre se pone en los estudios de programación y que se resuelve con una función recursiva y usando opendir(), readdir() y closedir()
* Tanto añadir como borrar entradas implica modificar el contenido del fichero. Si antes lo hemos leído, podemos grabar los cambios con otra tripleta de open(), print() y close()
* Y el resto... no tiene mucha dificultad... es aplicar 'if' a varias situaciones. |
|

Dom Abr 29, 2007 7:14 am
|
 |
ale9gaditano
Perlero Nuevo

|
Registrado: 28 Abr 2007
Mensajes: 3
|
|
|
|
|
Muchas gracias por todo explorer, me pondré a hacer el programita a ver si me sale, y si me salen dudas os pregunto.
Saludos |
|

Sab May 12, 2007 4:39 am
|
 |
perlperl
Perlero Nuevo

|
Registrado: 12 May 2007
Mensajes: 1
|
|
| algo mas |
|
|
Estoy trabajando en ese programa, pero estoy bastante liado, aquí dejo lo que tengo, a ver si alguien me echa una mano.
| Perl: | #Declaración de funciones
sub ElegirOpcion;
sub OpcionL;
#sub OpcionA;
#sub OpcionB;
#sub OpcionT;
#Definición de funciones
sub ElegirOpcion
{
my $opciones= $_[0];
print "$opciones\n";
if(@ $opciones[0] eq "-l")
{
OpcionL (\ @ARGV); #Aqui debería de poner \@opciones pero no funciona
}
elsif(@ $opciones[0] eq "-a")
{
OpcionA (\@ $opciones);
}
elsif(@ $opciones[0] eq "-b")
{
OpcionB (\@ $opciones);
}
else
{
OpcionT (\@ $opciones);
}
}
sub OpcionL
{
my $opcion= $_[0];
my $num_argumentos;
my $contador_lineas = 0;
my $i = 0;
# print "$opcion\n"; #Aqui me doy cuenta de que los dos punteros no apuntan al mismo sitio
..................................................
..................................................
#Cuerpo principal del programa
$num_argumentos= @ARGV;
if ($num_argumentos== 0)
{
die "Error\nNo has introducido ningún parámetro\nEl formato del comando es : adminfstab –l [ pmontaje | dispositivo [-d]] | -a | -b pmontaje | -t lista_fs...\n";
}
else
{
if ($ARGV[0] eq "-l"|| $ARGV[0] eq "-a"|| $ARGV[0] eq "-b"|| $ARGV[0] eq "-t")
{
ElegirOpcion (\ @ARGV);
} |
Muchas gracias |
|

Sab May 12, 2007 7:08 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenido a los foros de Perl en Español.
No puedes poner \@opciones porque sencillamente esa variable no existe en tu programa.
Aconsejable, siempre, a la hora de hacer programas Perl, poner use strict; al principio.
En cuanto a la forma de leer los argumentos, me parece un poco liosa. Si no se puede/quiere hacer con un módulo externo, yo lo haría con un bucle for sobre el número de argumentos de @ARGV y dentro de él una serie de if parecido a los tuyos, y en el caso de que una opción, como la -l necesite de más argumentos, leerlos inmediatamente, pasarlos a variables globales e incrementar la variable de índice del for.
Un caso especial es la opción -d, pero eso se resuelve muy fácil en Perl con la ayuda de redo.
P.D. Estamos en el foro Intermedio  |
|

Dom May 13, 2007 6:11 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
|
|
|
|
Mie May 16, 2007 5:28 pm
|
 |
asdfg
Perlero Nuevo

|
Registrado: 16 May 2007
Mensajes: 1
|
|
|
|
|
eso ale, usa algunos modulos o la orden system o cosas raras ke no hayamos visto en clase, pa ke eugenio te ponga un cerapio.
salu2, y no desesperes |
|
Mie May 16, 2007 6:15 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenido a los foros de Perl en Español.
En la definición del problema no dice nada de no poder usar módulos externos.
Y en las respuestas dadas no se ha comentado nada de usar el system(). |
|
Powered by phpBB © 2001, 2005 phpBB Group
|