• Publicidad

Ejercicios Perl y Bash

¿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.

Ejercicios Perl y Bash

Notapor carmelo » 2006-06-10 03:33 @189

Alguien puede ayudarme a hacer estos ejercicios:
Ejercicio 1
Supongamos que un PC bajo Linux tiene dos discos duros: uno de ellos es el disco de trabajo, y el otro se usa solo para mantener una copia de seguridad. Se trata de escribir un programa en bash que haga el mantenimiento de la copia de seguridad del segundo disco. El programa se llamará "actualizaBackup", y tendrá dos argumentos: a) el sistema de ficheros, o el directorio, cuya copia se va a actualizar, y b) el directorio en que esta montado el segundo disco. Por ejemplo:

actualizaBackup /home /disco2

El programa comparará las fechas del fichero original y la copia, modificando la copia si tiene una fecha anterior. Esta operación se hará para todos los ficheros bajo el directorio indicado.

Finalmente, se debe explicar cómo se utilizaría el comando cron para que esa actualización se ejecute automáticamente una vez por semana (leer man cron).
Ejercicio 2
Escribir un programa, pensado para el administrador, que produzca la siguiente información sobre los usuarios del sistema:
usuario (UID) directorio home espacio seguridad
-----------------------------------------------------------------
alberto (464) /home/alberto 845495K
laura (0) /alumnos/laura 711K UID=0
monitor (462) /home/monitor 882212K PASSWD

El apartado de 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)
Ejercicio 3
El fichero ~/.netscape/bookmarks.html contiene las direcciones web marcadas como bookmarks por un usuario de netscape (~ representa su directorio home). A menudo, algunas de estas direcciones dejan de ser válidas. Se trata de escribir un programa en Perl que compruebe todos los bookmarks de un usuario, e informe sobre aquellas direcciones que ya no son válidas (ya no existen).

El programa se llamará "compruebaBookmarks", tendrá como argumento el nombre completo del fichero de bookmarks que se desea comprobar, y la salida será parecida a ésta:
cea-linux@mycomputer:~$ compruebaBookmarks ~/.netscape/bookmarks.html

Las siguientes direcciones no son válidas:

http://www.uned.es/convocatorias.html
http://www.redhat.es/3.2/index.html

Para realizar la comprobación de que una dirección está operativa, se usará el comando wget (ver man de este comando).
carmelo
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2006-06-10 03:30 @187

Publicidad

Notapor explorer » 2006-06-10 07:32 @355

1:
Código: Seleccionar todo
#!/bin/bash
cp -uva $1 $2


2:
Código: Seleccionar todo
#!/usr/bin/perl
foreach ( do{ open PASS, "</etc/passwd"; <PASS> } ) {
    my ($usuario, $passwd, $uid, $gid, undef, $home, undef) = split /:/;
    my $espacio    = int((split " ", qx(du -s $home))[0] / 1024) . 'K';
    my $seguridad  = (! $uid) ? 'UID=0':'';
       $seguridad .= ($passwd eq '*' or $passwd eq '!') ? (($seguridad) ? ' ':'') . 'PASSWD':'';
    print "$usuario ($uid) $home $espacio $seguridad\n";
}


3:
Código: Seleccionar todo
#!/usr/bin/perl
my @urls =
    map  { m/A HREF="(.+?)"/; $1         }
    grep { m/A HREF=".+?"/               }
    do   { open HTML,"<$ARGV[0]"; <HTML> };

foreach $url ( @urls ) {
    print "Chequeando $url\n";
    push @novalid, $url if system("wget","--spider","-q", $url);
}

if ( @novalid ) {
    print "Las siguientes direcciones no son válidas:\n\n";
    print join "\n", @novalid, "\n";
}

Las explicaciones al profesor, te las dejo a tí...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Variante para el ejercicio 2

Notapor ntovar » 2006-06-12 12:36 @567

Una variante a la respuesta para el ejercicio #2

Código: Seleccionar todo
#!/usr/bin/perl
use Filesys::DiskUsage qw/du/;

open PASS,"</etc/passwd";
foreach(<PASS>){
 my ($usuario, $passwd, $uid, $did, undef, $home, undef) = split /:/;
 my $espacio = du({'human-readable' => 1},$home);
 my $seguridad = (! $uid) ? 'UID=0':'';
 $seguridad .=($passwd eq '*' or $passwd eq '!') ? (($seguridad) ? ' ':'').'PASSWD':'';
 print "$usuario ($uid) $home $espacio $seguridad \n";
}
Nelo R. Tovar
[email protected]
ntovar
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-06-12 12:33 @564


Volver a Intermedio

¿Quién está conectado?

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