TP Licence Réseaux Informatiques et Télécommunication
Transcription
TP Licence Réseaux Informatiques et Télécommunication
TP Licence Réseaux Informatiques et Télécommunication Introduction à Perl - Partie 2. Les trois premiers exercices doivent être résolus sans l’aide de la machine. Pour les suivants, il est demandé de les implémenter. Exercice 1 (Expressions régulières) 1. Indiquer dans chaque case du tableau si oui ou non le mot de la ligne est accepté par l’expression régulière de la colonne. abc* abc ^a|bc ^(a|b) ca|ba|ad [ab][cd] "abd bc" "d cdab" "adabcabc" "bdabdaca" 2. Est-il possible de trouver un mot accepté par abc+ mais pas par abc* ? 3. Est-il possible de trouver un mot accepté par (ab|ac) mais pas par a(b|c) ? 4. Après avoir listé les fichiers du dossier /tmp/, on a obtenu : script.pl linux.ps1 a_faire_txt applications papiers_apl fichier.plot Donner l’expression régulière qui reconnaı̂tra les fichiers perl. Exercice 2 (Ecriture et lecture) 1. On dispose du tableau suivant : @tab = ( "commande=ls,afficher la liste des fichiers dans le dossier courant. -LiSt-" , "commande=df,afficher l’utilisation des disques. -Disk Free- ", "commande=du,afficher l’utilisation du disque.-Disk Usage- " , ); Compléter le script suivant de sorte qu’il rende humain chaque élément de ce tableau. Exemple : il affichera la chaı̂ne Si vous souhaitez afficher la liste des fichiers dans le dossier courant, il suffit de taper la commande ls, (LiSt) après avoir traiter la première case du tableau @tab. foreach $chaine ( @tab ) { ______________________________ # Extraction des parties nécessaires $commande = _________; # affectation $action = _________; # affectation $traduction = _________; # affectation print "Si vous souhaitez $action, il suffit de taper la commande $commande, ($traduction). \n"; } 2. On dispose toujours du tableau @tab et on donne ce script à trou : foreach $chaine ( @tab ) { $chaine =~ s/^commande=(.*),(.*)-(.*)-/________________/; print "$chaine \n"; } Compléter le script précédent avec une substitution de sorte que la sortie écran soit la suivante : 1 TP Licence Réseaux Informatiques et Télécommunication perl essa2.pl ls : LiSt df : Disk Free du : Disk Usage Exercice 3 (Ecriture et lecture) 1. Le fichier /etc/passwd est un fichier de texte qui contient la liste des comptes sur le système, ainsi que des informations utiles sur ces comptes . . .Voici un exemple de fichier /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh ... avahi:x:110:121:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false haldaemon:x:111:122:Hardware abstraction layer,,,:/var/run/hald:/bin/false nico:x:1000:1000:Nicolas Delanoue,,,:/home/nico:/bin/bash Compléter le script suivant de sorte qu’il sauve dans le fichier utilisateurs la liste des utilisateurs ainsi que leur nom complet. open FICHIER1, "_____________"; open FICHIER2, "_____________"; while( $ligne = <FICHIER1> ) { @tab = ____________________ ; $var = "$tab[0],$tab[4]"; ____________________________ ; } close FICHIER1; close FICHIER2; #Ouvre le fichier passwd en lecture #Ouvre le fichier utilisateurs en écriture #Divise $ligne en utilisant : comme délimiteur #______________________________________ #Ecrit $var dans le fichier utilisateurs Exercice 4 Nautilus permet d’exécuter des scripts à partir d’un menu contextuel. On obtient ce menu en cliquant dans le panneau de droite (celui qui affiche les fichiers) avec le bouton droit de la souris. Nautilus affiche alors un élément de menu nommé “Scripts” qui donne accès à tous les scripts enregistrés dans le répertoire ~/.gnome2/nautilus-scripts. Un script situé dans ce répertoire est un script tout-àfait normal : il peut être codé dans n’importe quel langage : pour nous, ce sera évidemment Perl. Avant de lancer un tel script, Nautilus fixe certaines variables d’environnement. Parmi ces variables d’environnement, la variable NAUTILUS_SCRIPT_CURRENT_URI nous intéresse plus particulièrement : elle désigne l’URI (Uniform Resource Identifier) du “répertoire” sélectionné. Par exemple, si on a ouvert le répertoire /home/etudiant/, alors cette variable vaut file:///home/etudiant. Le but de cet exercice est d’écrire un script Perl qui permet d’ouvrir une console “dans” le répertoire actuellement sélectionné dans Nautilus. En Perl, les variables d’environnement sont accessibles en utilisant la table de hachage %ENV. Ainsi lorsque vous lancerez votre script par l’intermédiaire de Nautilus, vous récupérerez dans $ENV{’NAUTILUS_SCRIPT_CURRENT_URI’} l’URI du répertoire actuellement sélectionné. Bien sûr, si vous lancez votre script depuis un shell, la variable $ENV{’NAUTILUS_SCRIPT_CURRENT_URI’} n’aura pas été initialisée et sera donc vide ! On vous propose d’écrire ce script en suivant les étapes suivantes : 1. Préparatifs : (a) créez un script nommé Shell.pl et rendez-le exécutable. (b) complétez ce script pour qu’il affiche “coucou” dans le fichier /tmp/shell.log. (c) exécutez ce script depuis une console pour vérifier qu’il fonctionne. (d) exécutez-le depuis Nautilus (en faisant : clic droit—Scripts—Shell) pour vérifier que ça fonctionne. 2 TP Licence Réseaux Informatiques et Télécommunication (e) pour faciliter la suite de vos expérimentations, vous pouvez, dans une autre console, lancez la visualisation du fichier shell.log en continu grâce à la commande : tail -F /tmp/shell.log (on pourra consulter le manuel de tail pour comprendre l’intérêt de cette commande). 2. Récupération de l’URI du répertoire : (a) modifiez votre script pour y écrire en plus la valeur de la variable d’environnement NAUTILUS_SCRIPT_CURRENT_URI. (b) exécutez-le depuis un shell (cela vous permettra de vérifier qu’il n’y a pas d’erreur de syntaxe) puis depuis Nautilus : est-ce que vous récupérez bien le nom du répertoire ? 3. Récupération du nom du répertoire : (a) utilisez une expression régulière qui vous permettra de récupérer le nom du répertoire puis affichez ce nom dans le fichier de log. (b) testez 4. La commande système permettant de lancer une console dans le bon répertoire est gnome-terminal --working-directory=/le/chemin/. Faites en sorte d’ouvrir la console dans le répertoire que vous avez récupéré à la question précédente. 5. Assurance qualité : (a) avant d’ouvrir le répertoire, vérifiez que votre expression régulière a bien correspondu (ce qui n’est certainement pas le cas si, dans Nautilus, vous étiez dans un répertoire réseau du genre smb://serveur-windows/partage). Si ce n’est pas le cas, affichez-en une trace dans le fichier de log. (b) avant d’ouvrir le répertoire, vérifiez qu’il existe bien (utilisez l’opérateur qui va bien). Si ce n’est pas le cas, affichez-en une trace dans le fichier de log. Exercice 5 Le langage HTML, est le format de données conçu pour représenter les pages web. Il permet notamment d’implanter de l’hypertexte dans le contenu des pages et repose sur un langage de balisage. Par exemple, pour que du texte apparaı̂ssent en italique il suffit de le mettre entre les balises <i> et </i>. Pour insérer une image, il suffit d’utiliser la balise <IMG>. L’exemple suivant permet d’introduire une image nommée image.gif stockée dans le répertoire images : <IMG SRC="images/image.gif">. L’objectif du script que vous devez developper est, à partir d’une page web : http://perso-laris.univ-angers.fr/~delanoue/lprt/developpement/pics/index.php, de créer une page web index2.html qui contient les mêmes informations exceptées le fait que les images ont une plus petite résolution (800x600). Pour cet exercice, vous aurez besoin de wget et de convert qui fait partie du package ImageMagick. L’exemple suivant permet de convertir l’image dragon.gif en resize_dragon.gif telle que cette dernière ait une résolution de 64x64 : convert dragon.gif -resize 64x64 resize_dragon.gif La page que vous devez “transformer” se trouve à l’adresse : http://perso-laris.univ-angers.fr/~delanoue/lprt/developpement/pics/index.php. Vous pourrez vous contenter de laisser le fichier index2.html ainsi que les images redimmensionnées sur votre machine. Par contre, vous devrez remplir un journal (fichier log) qui tiendra à jour l’ensemble des événements survenus. Pour aller plus loin : lors de l’ajout d’une modification de la page index.html (exemple : ajout ou suppression d’une image), faite en sorte que votre script ne télécharge pas toutes les images déjà téléchargées. 3 TP Licence Réseaux Informatiques et Télécommunication "abd bc" "d cdab" "adabcabc" "bdabdaca" abc* o o o n abc+ n n o n ^a|bc o n o n open FICHIER1, "< /etc/passwd"; open FICHIER2, ">utilisateurs"; while( $ligne = <FICHIER1> ) { @tab = split /:/,$ligne; $var = "$tab[0],tab[4]"; print FICHIER2 "$var\n"; } close FICHIER1; close FICHIER2; ^(a|b) o n o o ca|ba|ad n n o o [ab][cd] o n o o #Ouvre le fichier en lecture #Ouvre le fichier en écriture #Divise $ligne en utilisant : comme délimiteur # #Ecrit $var dans le fichier utilisateurs foreach $chaine ( @tab ) { $chaine =~ /commande=(.*),(.*)\..*-(.*)-/; $commande = $1; $action = $2; $traduction = $3; print "Si vous souhaitez $action, il suffit de taper la commande $commande, ($traduction). \n"; } 4