• Publicidad

Podéis ayudarme con una orden de 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.

Podéis ayudarme con una orden de Linux

Notapor ale9gaditano » 2007-04-28 09:19 @430

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:

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
ale9gaditano
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-04-28 09:07 @421

Publicidad

Notapor explorer » 2007-04-28 13:06 @588

Bienvenido a los foros de Perl en Español.

Léete antes este hilo:
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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$linea = join("\t", $dispositivo, $pmontaje, $tipo, $atributos, $dump, $orden);
print $fichero $linea, "\n";
Coloreado en 0.005 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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor ale9gaditano » 2007-04-28 22:09 @964

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
ale9gaditano
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-04-28 09:07 @421

Notapor explorer » 2007-04-29 06:33 @315

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor ale9gaditano » 2007-04-29 08:14 @385

Muchas gracias por todo explorer, me pondré a hacer el programita a ver si me sale, y si me salen dudas os pregunto.

Saludos
ale9gaditano
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-04-28 09:07 @421

algo mas

Notapor perlperl » 2007-05-12 05:39 @277

Estoy trabajando en ese programa, pero estoy bastante liado, aquí dejo lo que tengo, a ver si alguien me echa una mano.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#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);
      }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Muchas gracias
perlperl
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2007-05-12 05:35 @274

Notapor explorer » 2007-05-12 08:08 @380

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 :wink:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2007-05-13 19:11 @841

Sería muy bueno que miraras el módulo Getopt::Long
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor asdfg » 2007-05-16 18:28 @811

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
asdfg
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2007-05-16 18:16 @803

Notapor explorer » 2007-05-16 19:15 @843

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().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

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

cron