Transcript sujet 05

Université de Nice-Sophia Antipolis
Licence Mathématiques - MASS
Semestre 1
Semaine du 13 octobre 2014
Systèmes Informatiques
Travaux Pratiques – Séance n◦ 5
Objectif du TP
Ce TP porte entièrement sur le shell, un des outils fondamentaux qui vont vous servir à communiquer avec Unix et à en mieux comprendre le fonctionnement. Il est donc essentiel que vous
maitrisiez les notions qu’il aborde. Vous allez principalement travailler dans une fenêtre X TERM,
sauf quand vous construirez des scripts, c’est-à-dire des programmes rédigés dans le langage du
shell : vous les composerez grâce à E MACS, avant de les exécuter dans une fenêtre X TERM.
1) Comme dans chaque TP, commencez par créer dans votre répertoire /SI un répertoire
pour le TP d’aujourd’hui, nommé par conséquent TP05, et faites-en votre répertoire courant.
1
Retour sur les commandes à connaître et le déplacement dans
le système de fichiers
Tout doit se faire dans un terminal !
*a. Copiez le répertoire /u/profs/mi1si/Sitewww/WWW dans ˜/SI/TP05/ (indication :
utilisez cp -r)
b. Lancez la commande firefox sur le fichier index.html du répertoire WWW et visitez le site.
Analysez la structure du site afin de pouvoir répondre correctement aux questions suivantes !
c. En utilisant les commandes cd et ls, parcourez l’arborescence de racine WWW et dessinez-la
sur papier.
d. Editez avec emacs le fichier WWW/Documents/Francais/Animaux/bonobo.html. Le chemin
indiqué pour atteindre l’image "bonobo.jpg" est-il local, absolu ou relatif ? Est-ce le bon choix si
par exemple on déplaçait la racine WWW à un autre endroit ?
Ajout rapide d’un animal sur le site
e. Allez chercher sur le web la photo d’un animal de votre choix et enregistrez la où il faut (vous
pouvez sortir provisoirement du terminal pour cela)
*f. Dupliquez les fichiers nécessaires avec cp et modifiez-les avec emacs pour obtenir le résultat escompté.
Et les espagnols ?
g. Allez chercher sur le web une image (icône) de drapeau espagnol et enregistrez la où il faut.
h. Copiez par exemple l’arborescence de racine Français au même niveau dans une arborescence
de racine Espagnol.
*i. Renommez le fichier animaux.html en animales.html, le répertoire Animaux en Animales.
j. Modifiez sous emacs les fichiers bonobo.html, etc. Indication : Ceci est un bonobo se dit en
Espagnol "Eso es un Bonobo".
2
2
L’interprète des commandes
2.1
Ses caractères spéciaux
Certains caractères ont une signification particulière pour l’interprète des commandes. Ce
sont les caractères :
* ? [ ] { } # ! & ( ) | ; \ < > $/
Ces caractères peuvent néanmoins figurer dans des noms de fichiers ou de répertoires, à condition d’être précédés du caractère \. Attention également au tiret, car il annonce des options ;
pour éviter son interprétation s’il apparaît en tête d’un nom de fichier, il faut le faire précéder de
l’option vide --. Les apostrophes '...' permettent aussi de figer une chaîne en chaîne de caractères, mais elles empêchent l’évaluation des variables, contrairement aux guillemets "...".
2) À quoi servent chacun des caractères précédents ? Indication : voir les pages de manuel
zshexpn (recherche google ou man zshexpn).
3) À l’aide de la commande touch, créez un fichier de nom [Fa#]. Vérifiez que cela est
correctement fait en listant le contenu du répertoire. Essayez de créer puis d’effacer un fichier
nommé -point!.
*4) À l’aide de la commande touch, créez un fichier de nom m et un deuxième de nom r. Créez
ensuite le fichier [mr]. Affichez le résultat obtenu avec la commande ls. Enfin, renommez-le en
*?\{}.
*5) Créez un fichier nommé -i et essayez de l’effacer 1 .
6) Créez maintenant les fichiers suivants :
.fic1 .fic2 fic1 fic2 1234 1A2A3A 007x abcd xxxxpyyyy 007 01 .123
*7) A l’aide de la commande ls, faites apparaître la liste de tous les fichiers dont le nom :
1.
2.
3.
4.
5.
6.
2.2
commence par un point,
ne contient pas que des chiffres,
contient exactement 4 caractères quelconques,
contient au moins 4 caractères.
contient que des chiffres.
contient des voyelles
Les variables prédéfinies
*8) Quel est le contenu des variables HOME, DISPLAY, TERM, PATH, HOST, USERNAME et PS1 ? (Notez
bien le contenu de la variable DISPLAY, vous en aurez besoin bientôt.)
Vous pouvez modifier le contenu de la variable avec la commande interactive vared, appelée
sur un nom de variable. Cette commande utilise les commandes de correction ordinaires du shell,
c’est-à-dire que vous pouvez par exemple aller en début de ligne avec C-a, effacez le mot à droite
du curseur avec M-d, et accepter les modifications avec RET sans être en fin de ligne.
9) Consultez brièvement la liste de toutes vos variables par la commande set. La commande
unset permet d’effacer une variable. La commande env donne une liste beaucoup plus courte, et
plus utile pour l’instant, vous pouvez la consulter plus en détail.
*10) Grâce à la commande echo et la variable prédéfinie appropriée, affichez les informations
suivantes :
— nom de la machine ;
— répertoire personnel ;
— répertoire courant ;
— répertoire précédent ;
— nom de l’utilisateur.
Les variables que vous avez affichées sont, avec de nombreuses autres, un standard Unix.
Elles existent toujours et de nombreux scripts ou commandes se basent sur l’hypothèse de leur
existence. Il vous faut connaître leur existence pour réaliser des scripts génériques.
1. N’oubliez pas de lire attentivement la page de manuel de la commande rm
3
2.3
Redirection
Tout processus communique avec l’extérieur au moyen de trois fichiers principaux. Ce sont :
l’entrée standard ou 0, la sortie standard ou 1 et la sortie standard d’erreur ou 2. Par défaut dans un
shell interactif, il se trouve que ce sont le clavier (0), l’écran (1) et l’écran (2).
L’entrée est redirigée par 0< ou simplement <, la sortie par 1> ou simplement >, tandis que la
sortie d’erreur l’est par 2>.
*11) Supposons qu’il n’y ait pas de fichiers toto dans votre répertoire de travail.
Exécutez d’abord la commande ls -l toto.
Exécutez ensuite la commande ls -l toto >& f.
Qu’observez-vous ? Faites la différence entre ls -l toto >& f1, ls -l toto 1> f2 et ls -l
toto 2> f3.
*12) Exécutez la commande date > aujourdhui et visualisez le contenu du fichier aujourdhui.
*13) Exécutez la commande find /usr -name rsync. Le chemin absolu du fichier recherché
et un message d’erreur sont apparus à l’écran.
Exécutez la commande find /usr -name rsync 2> erreurs pour rediriger les messages d’erreurs dans le fichier erreurs. Visualisez le fichier erreurs. Si vous ne souhaitez pas conserver les
erreurs, vous pouvez les rediriger vers un fichier « poubelle », de chemin /dev/null.
*14) Redirigez la sortie d’erreur de la commande précédente vers ce fichier poubelle.
*15) La commande cat a pour effet d’envoyer son entrée standard sur sa sortie standard. En
particulier, si on lui fournit plusieurs fichiers en paramètre, elle en envoie la concaténation sur sa
sortie standard.
Munie d’une redirection, elle permet de créer un fichier. Créez-en un nouveau avec un contenu quelconque.
*16) À l’aide de deux redirections, recopiez le fichier précédent sous un nouveau nom. À
présent, concaténez le contenu du premier à celui du second.
*17) Lancez une commande ls erronée tout en redirigeant son message d’erreur dans un
fichier. Cette procédure a son utilité lorsqu’on veut consulter seulement les messages d’erreur
d’une commande. Affichez le contenu du fichier pour vérifier quel message d’erreur a été fourni.
18) Afin de tester les mécanismes d’exécution, nous allons utiliser la commande système exec.
Lancez tout d’abord un xterm en premier plan à partir d’un autre de vos xterm, puis quittez-le
par exit. Dans un autre xterm créé pour l’occasion, refaites la même chose en utilisant exec
xterm. Que constatez-vous relativement au premier xterm ? Comment l’expliquez-vous ?
2.4
Enchaînement de commandes et filtres
Nous allons maintenant voir comment faire communiquer des processus entre eux.
Imaginons que l’on veuille visualiser, à l’écran et page par page, le contenu du répertoire
/usr/bin. Avec ce que nous savons, nous exécutons la ligne de commandes :
ls -l /usr/bin > resultats ; more resultats ; rm resultats
Si on regarde attentivement cette ligne de commande, on se rend compte que :
1. ls -l /usr/bin > resultats écrit dans le fichier resultats, par redirection de la sortie
standard, la liste des fichiers du répertoire /usr/bin ;
2. more affiche page par page le fichier resultats ;
3. resultats sert de fichier auxiliaire ou temporaire et peut être supprimé à l’issue du more.
Il est possible de simplifier l’écriture de l’exemple précédent. Pour cela, U NIX met à votre disposition un mécanisme particulier appelé tube (pipe en anglais). Il permet de connecter directement la sortie standard d’un processus à l’entrée standard d’un autre processus sans spécifier de
fichier auxiliaire. L’opérateur choisi par le shell pour un représenter un tube est le caractère |.
L’exemple précédent s’écrit alors plus simplement :
ls -l /usr/bin | more
4
Le processus qui effectue ls -l /usr/bin envoie son résultat sur l’entrée standard du processus more, ainsi, il n’est plus nécessaire d’utiliser un fichier temporaire (le fichier resultats
dans l’exemple précédent). Avec ce mécanisme, et contrairement à ce qui se passe dans un enchaînement séquentiel, tous les processus sont exécutés simultanément et c’est le système qui
s’occupe de gérer leur synchronisation (par exemple, un processus qui produirait des résultats
plus vite que le processus suivant serait capable de les lire, devra suspendre temporairement son
activité).
*19) À quoi correspond la ligne de commandes ls | wc -l ?
Les questions suivantes vont vous apprendre à utiliser le mécanisme des redirections ’<’, ’>’,
’>>’ et celui du tube ’|’, avec quelques commandes U NIX simples mais à connaitre absolument :
cat, wc, tail, head.
*20) Combien le fichier /etc/services comporte-t-il de lignes ? De mots ? De caractères ? Affichez les 20 dernières, les lignes 40 à 50 de ce fichier et enfin la 18ème ligne. Combien de mots y
a-t-il entre les lignes 30 et 40 ?
*21) Combien de services utilisant le protocole tcp ce fichier comporte-t-il ?
*22) Créez un fichier udp_services à partir du fichier services, contenant exclusivement
tous les services utilisant le protocole udp et trié par ordre alphabétique des services (voir la
commande sort.
*23) Créez un fichier debut formé des 10 premières lignes de services et un fichier fin formé
des 10 dernières. Créez ensuite un fichier extremes constitué de la concaténation des fichiers
debut et fin.
*24) Renommez le fichier extremes en extremes1 puis reconstruisez le fichier extremes, mais
en une seule ligne de commandes, sans utiliser les fichiers intermédiaires debut et fin.
*25) Lancez sur une seule ligne les commandes date, ls -l /.. et ps. Recommencez pour
les deux premières en envoyant la sortie de la seconde dans un fichier appelé Qui. Recommencez
en envoyant le résultat des deux commandes consécutives dans un fichier Quand&Qui.
Récapitulatif de la semaine
Les notions suivantes ont été abordées et vous devez vous être familiarisés avec les outils
correspondants :
— le concept de variables prédéfinies, et les principales de ces variables : PATH, TERM, DISPLAY,
etc.
— le mécanisme des redirections, et en particulier le tube qui permet d’enchaîner des filtres
sans construire de fichiers intermédiaires ;