Test Système Semestre 2 partie B
Transcription
Test Système Semestre 2 partie B
Test Système Semestre 2 1 sur 3 file:///C:/D_PCML/TDSysteme/2009-2010/2010_S2B_Test.htm Test Système Semestre 2 partie B (22 mai 2010 – durée conseillée : 1h) © M. Laporte [email protected] I.U.T.d'Aix en Provence - Département Informatique Créé le 19/05/2010 - Dernière mise à jour : le 19/05/2010 Tout document autorisé. Les exercices sont totalement indépendants. Sommaire 1) 2) 3) 4) 5) - Services TCP 3 Lignes d'un fichier Type d'un fichier Supression de fichiers de sauvegardes Tri d'un fichier 1) - Service TCP Le fichier /etc/services d'un système Unixlike se présente sous la forme : smtp time time rlp nameserver whois tacacs 25/tcp 37/tcp 37/udp 39/udp 42/tcp 43/tcp 49/tcp mail timserver timserver resource name nicname # resource location # IEN 116 # Login Host Protocol (TACACS) la première colonne (smtp, time, ...) contient les noms des services ; la deuxième colonne (25/tcp, 37/tcp, ...) contient le numéro de port (25, 37, ...) suivi du type de service (tcp, udp, ..) séparés par un / ; la troisième colonne (mail, timeserver, ...) contient des alias du nom de service ; puis, à partir du #, c'est un commentaire pour expliquer le service. Ecrire une commande qui n'affiche que les noms et numéros de port de tous les services tcp du système UNIXlike sur lequel on se trouve. 2) - 3 lignes d'un fichier La question 10 de l'exercie 3 du TP 5 demande d'écrire la commande qui affiche les lignes 5, 6 et 7 du fichier des_lignes.txt. Le corrigé fourni est : tail -n +5 des_lignes.txt | head -n 3 Donner 2 autres corrigés possibles. 06/04/2011 14:34 Test Système Semestre 2 2 sur 3 file:///C:/D_PCML/TDSysteme/2009-2010/2010_S2B_Test.htm 3) - Type d'un fichier L'exercice 3 du TP 8 demande d'écrire un script ftype.bash qui prend un argument et qui renvoie comme code de retour : 1 si l’argument est un fichier ordinaire ; 2 si c’est un répertoire ; 3 si c’est un fichier spécial ; 0 dans tous les autres cas (fichier inexistant ou inaccessible, nombre d’arguments différent de 1). Le corrigé fourni en est : #!/bin/bash # Script : ftype.bash if (($# != 1)); then exit 0 fi if [ -e "$1" ]; then if [ -f "$1" ]; then exit 1 elif [ -d "$1" ]; then exit 2 else exit 3 fi else exit 0 fi Récrire le même script, mais sans utiliser la commande if. 4) - Supression de fichiers de sauvegardes Ecrire le script rmsav.bash qui détruit récursivement (avec demande de confirmation) tous les fichiers de la forme .nnn.swx (nnn représente une suite quelconque de caractères et x est un caractère alphabétique, exemple .nom.swp), à partir du répertoire passé en argument de la commande . On vérifiera qu'il n'y a bien qu'un seul argument à la commande et que celui-ci correspond bien à un nom de répertoire. Avant de détruire un fichier, on vérifiera également que le fichier, correspondant à ce fichier de sauvegarde à supprimer, existe bien (dans notre exemple le fichier nom). Si ce n'est pas le cas, on n'effectue pas la suppression. Indications On écrira la fonction récursive rmrec (son paramètre est un nom de répertoire) qui : sauvegarde le répertoire courant ; se place sur le répertoire passé en paramètre ; détruit, s'il y a lieu, les fichiers de sauvegardes ; fait la même chose sur tous les répertoire contenus dans le répertoire courant ; retourne sur le répertoire sauvegardé. On s'arrangera pour que les changements de répertoire soient muets. 06/04/2011 14:34 Test Système Semestre 2 3 sur 3 file:///C:/D_PCML/TDSysteme/2009-2010/2010_S2B_Test.htm 5) - Tri d'un fichier L'exercice 10 du TP 8 demande d'écrire un script tri.bash qui trie ses arguments et les écrit dans l’ordre croissant. Pour cela, il sera bien plus confortable de stocker les arguments dans un tableau que l’on triera. Ce script admet l’option -n qui demande de traiter les arguments comme des entiers et non comme des chaînes. Il n’est pas demandé de vérifier dans ce cas que les arguments sont bien des entiers. Le corrigé vous est fourni plus bas. Modifier le (#TODO) pour qu'il ne trie plus les arguments de la commande, mais les valeurs lues au clavier (jusqu'à fin du fichier clavier). Le fichier qui contient ce nouveau script s'appelle tri.bash, écrire la commande qui permet de trier le fichier a_trier qui contient des nombres, à l'aide de tri.bash. Fichier tri.bash à modifier : #!/bin/bash # Script : tri.bash comparaison="<" if (($# != 0)) && [ "$1" == -n ]; then comparaison="-lt" shift fi # il est plus simple de passer par un tableau... #tab=("$@") # qu’on va trier (on évite de le recréer) par un tri classique # par selection. #TODO for ((i = 0; i < ${#tab[*]} - 1; i++)) do indmin=$i for ((j = i+1; j < ${#tab[*]}; j++)) do if [ "${tab[j]}" $comparaison "${tab[indmin]}" ]; then indmin=$j fi done # permutation élément i et indmin tmp="${tab[i]}" tab[i]="${tab[indmin]}" tab[indmin]="$tmp" done echo "${tab[@]}" # remarque : écrit une ligne vide si aucun élément à trier... 06/04/2011 14:34