Correction du TE 3 Redirections, tubes et filtres Références – Polycopié unix :

Correction du TE 3 Redirections, tubes et filtres Références – Polycopié unix : chapitres (4), 5, (6), 7, 8, 9, 10 – Transparents unix : sections 4.3, (7), 8, 9 à 13 Créer un répertoire te3 sous votre répertoire ~/mni/unix : on y placera tous les fichiers de travail du TE3. En particulier, on y copiera tous les fichiers utiles fournis dans le répertoire te3 du compte de l’UE. Ex. 1 : Rappels sur le TE précédent A 12 min. Répondre brièvement aux questions ci-dessous sur une feuille à part, sans l’aide de document ou de l’ordinateur. 1. À partir de votre répertoire d’accueil, placez-vous dans le répertoire te2, situé dans le répertoire ~/mni/unix. Solution cd mni/unix/te2 2. Sans changer de répertoire de travail, listez le contenu du répertoire M1 qui se trouve dans le répertoire d’accueil de l’utilisateur lefrere. Solution ls ~lefrere/M1 3. Que font chacune des commandes suivantes ? cd ; cd ~ ; cd .. ; cd / Solution Respectivement : aller dans le répertoire d’accueil (pour les deux premières), dans le répertoire parent du répertoire courant, et aller à la racine du système. 4. Copiez le fichier ~lefrere/M1/foo.bar dans votre répertoire unix/te2 Solution cp ~lefrere/M1/foo.bar ~/mni/unix/te2 5. À partir de votre répertoire d’accueil, donnez la commande permettant de renommer un fichier foo.bar situé dans le répertoire ~/mni/unix/te2 en hello.txt (sans le changer de répertoire). Solution mv ~/mni/unix/te2/foo.bar ~/mni/unix/te2/hello.txt 6. Créez le répertoire ~/mni-test puis déplacez-le dans votre répertoire unix. Solution mkdir ~/mni-test ; mv ~/mni-test ~/mni/unix/ 7. Listez les fichiers dont l’extension est .txt et qui sont situés dans votre répertoire te2, en affichant leurs attributs (taille, droits d’accès, ...). Solution ls -l ~/mni/unix/te2/*.txt 16 UPMC M1 : MNI Correction du TE 3. Redirections, tubes et filtres 8. Quelle est la commande qui permet de localiser tous les fichiers toto.txt dans l’arborescence sous votre répertoire d’accueil ? Solution find ~/ -name toto.txt -print 9. À la commande ls -l ~lefrere/M1/toto.out, vous obtenez la réponse suivante : -rw-rw-r-- 1 lefrere personnel 4886 oct 1 2007 toto.out Vous faites partie du groupe « etudiant ». Pouvez-vous lire ce fichier ? Le modifier ? Le copier dans votre répertoire d’accueil ? Solution Ce fichier est lisible et modifiable par le propriétaire (lefrere), le groupe « personnel », et uniquement lisible pour les autres utilisateurs. Faisant partie du groupe « etudiant », vous pouvez donc le lire et le copier dans votre répertoire d’accueil, mais vous ne pouvez le modifier. 10. Dans un répertoire, on dispose d’une série de 9 fichiers nommés ftn.n où n est un entier qui varie de 1 à 9. Comment supprimer les 7 fichiers ftn.2 à ftn.8 en une seule commande à un seul argument sans risquer d’en détruire d’autres (ftn.1 ou ftn.f90 par exemple) ? Solution rm ftn.[2-8] 11. Indiquer les trois fonctions principales de la commande tar en précisant l’option associée à chaque fonction. Solution création d’archive (c) liste du contenu d’une archive (t) extraction de l’arborescence (x) Ex. 2 : Redirections de sortie A 10 min. Choisir ~/mni/unix/te3 comme répertoire de travail. Écrire la suite de commandes unix qui créent un fichier memo contenant la date, le nom de la machine, votre login, tels que fournis par le système, et le mot du jour de l’UE (~lefrere/M1/Config/motd 1). Sans utiliser d’éditeur de texte, ajouter le texte « fin du memo » à la fin de ce fichier. Solution #!/bin/sh # fichier redir-out.sh # le 20/09/2002 date > memo hostname >> memo whoami >> memo cat /etc/motd >> memo echo fin du memo >> memo exit Ex. 3 : Sortie standard et sortie d’erreur standard A 10 min. Tester les commandes suivantes et expliquer le contenu des fichiers créés : 1. cat /home/lefrere/M1/Config/motd > log1 more log1 1. Le mot du jour d’une machine unix est en principe géré par l’administrateur et stocké dans le fichier /etc/motd. Dans le cas de la machine virtuelle utilisée à l’utes, on utilisera le mot du jour de l’UE ~lefrere/M1/Config/motd. 2011–2012 17 29 septembre 2011 v.473/473 Correction du TE 3. Redirections, tubes et filtres UPMC M1 : MNI 2. cat /inexistant > log1 more log1 cat /inexistant 2> log2 more log2 3. cat /home/lefrere/M1/Config/motd /inexistant > log1 2> log2 cat log1 more log2 4. cat /home/lefrere/M1/Config/motd /inexistant > log 2>&1 more log Ex. 4 : Utilisation du filtre tr AB 15 min. Recopier dans votre répertoire de travail le fichier ~lefrere/M1/2011-2012/etu/mni/unix/te/te3/ligne-ascii.txt puis tester et expliquer le comportement des commandes suivantes (s’aider du manuel en ligne de tr) : 1 cat ligne-ascii.txt 2 tr aeiou AEIOU < ligne-ascii.txt 3 tr aeiou AEIOU < ligne-ascii.txt > LIGNE-ascii.txt 4 cat LIGNE-ascii.txt 5 cat ligne-ascii.txt | tr aeiou AEIOU 6 tr ’0123456789’ ’abcdefghij’ < ligne-ascii.txt 7 tr ’0-9’ ’a-j’ < ligne-ascii.txt 8 tr "[:lower:]" "[:upper:]" < ligne-ascii.txt 9 tr "a-z" "A-Z" < ligne-ascii.txt 10 tr ’0-9’ ’+’ < ligne-ascii.txt 11 12 tr -d ’a-d’ < ligne-ascii.txt 13 echo ’1a2aa3aaa4bbbb’ | tr ’a’ ’A’ 14 echo ’1a2aa3aaa4bbbb’ | tr -s ’a’ ’A’ 15 echo ’1a2aa3aaa4bbbb’ | tr -s ’a’ ’\n’ Solution Dans l’ordre : cat ligne-ascii.txt donne abcdefghijklmnopqrstuvwxyz azerty 01234567890123 tr aeiuo AEIOU < ligne-ascii.txt ainsi que cat LIGNE-ascii.txt donnent AbcdEfghIjklmnOpqrstUvwxyz AzErty 01234567890123 tr ’0123456789’ ’abcdefghij’ < ligne-ascii.txt et tr ’0-9’ ’a-j’ < ligne-ascii.txt donnent abcdefghijklmnopqrstuvwxyz azerty abcdefghijabcd tr "[:lower:]" "[:upper:]" < ligne-ascii.txt et tr "a-z" "A-Z" < ligne-ascii.txt donnent ABCDEFGHIJKLMNOPQRSTUVWXYZ AZERTY 01234567890123 tr ’0-9’ ’+’ < ligne-ascii.txt donne abcdefghijklmnopqrstuvwxyz azerty ++++++++++++++ tr -d ’a-d’ < ligne-ascii.txt donne efghijklmnopqrstuvwxyz zerty 01234567890123 echo ’1a2aa3aaa4bbbb’ | tr ’a’ ’A’ donne 1A2AA3AAA4bbbb echo ’1a2aa3aaa4bbbb’ | tr -s ’a’ ’A’ donne 1A2A3A4bbbb echo ’1a2aa3aaa4bbbb’ | tr -s ’a’ ’\n’ donne 1 2 3 4bbbb 29 septembre 2011 v.473/473 18 2011–2012 UPMC M1 : MNI Correction du TE 3. Redirections, tubes et filtres Septembre 2008 avec mandriva 2007.1 en UTF-8 que ne gère pas tr : une version simplifiée sans caractères accentués permet d’éviter les problèmes de codages ISO-8859/UTF-8. Mais on peut proposer de traiter les caractères accentués par un contournement avec passage en ISO-8859-1 qui, lui, est très bien compris par tr à condition de positionner les locales correctement. Par exemple : echo éàç | \ iconv -f UTF-8 -t ISO-8859-1 | \ LC_ALL=fr_FR.ISO-8859-1 tr ’[[:lower:]]’ ’[[:upper:]]’ | \ iconv -f ISO-8859-1 -t UTF-8 On remarque que les caractères accentués situés après l’ascii standard dans l’ordre lexicographique ne sont pas inclus dans l’intervalle a-z. Problèmes de portabilité avec tr Voir les tests ci-après : Portabilité de "tr" entre linux, dec-osf1 et aix. J. Lefrère 04/04/2001 Pour des raisons historiques (bsd et SV), on trouve sur les systèmes: - osf1 et aix : deux commandes "tr" (SV) et "trbsd" (bsd) - linux : la commande "tr" avec une option supplémentaire "-t" Pour la commande "trbsd" les crochets ne sont jamais considérés comme spéciaux et les classes "[:alpha:]" ou les équivalences "[=e=]" sont inconnues; si l’ensemble des caractères par lesquels on traduit est plus petit que celui des caractères à traduire, il y a duplication automatique du dernier caractère pour aboutir à deux ensembles de même longueur. Cette duplication automatique fonctionne aussi par défaut sous linux avec le commande "tr". Au contraire, avec la commande "tr" sous osf1 et aix ou "tr -t" sous linux, si l’ensemble d’arrivée comporte moins de caractères que celui de départ, il y a troncature de celui de départ: il n’y a pas duplication automatique. En résumé, il faut donc comparer "tr -t" sous linux avec "tr" osf1 ou aix et "tr" sous linux avec "trbsd" sous osf1 et aix. De plus, avec "tr" sous linux et "trbsd" les crochets "[]" sont des caractères normaux... mais bien sûr s’ils sont présents des deux côtés ils n’auront aucune influence : tr ’a-z’ ’A-Z’ est identique à tr ’[a-z]’ ’[A-Z]’ Quand les crochets ont ils un caractère spécial dans la version System V ? - pour étendre l’ensemble d’arrivée, il faut utiliser le multiplicateur "*" mais à l’intérieur des crochets. tr ’a-z’ ’[+*]’ (osf1/aix) - pour accéder aux classes de caractères et aux classes d’équivalence tr ’[:lower:]’ ’[:upper:]’ (osf1/aix) minuscules -> majuscules tr ’[=e=]’ ’[e*]’ (osf1/aix) eéèêëEÉÈÊË -> e (si LANG ad hoc) En conclusion, la version System V, plus riche mais de syntaxe plus lourde est la commande par défaut, mais sous linux, il faut préciser "tr -t". Enfin, il vaut mieux éviter les crochets superflus. Si donc on choisit la version System V (tr sous osf1/aix et tr -t sous linux) et si on travaille avec la même variable de langue (C ou français), on obtient les mêmes résultats (première colonne). La deuxième colonne met en évidence les différences entre "tr" linux et "trbsd" osf1/aix. ------------------------------------------------------------------------ Essais effectués avec LC_CTYPE et LC_COLLATE non francisés ------------------------------------------------------------------------ [1] [2] ------------------------------------------------------------------------ tr ’a-z’ ’+’ [abcd0z] Linux (-t) [+bcd0z] tr [++++0+] OSF1 [+bcd0z] trbsd [++++0+] AIX [+bcd0z] trbsd [++++0+] ------------------------------------------------------------------------ tr ’a-z’ ’+*’ [abcd0z] Linux (-t) [+*cd0z] tr [+***0*] OSF1 [+*cd0z] trbsd [+***0*] AIX [+*cd0z] trbsd [+***0*] ------------------------------------------------------------------------ 2011–2012 19 29 septembre 2011 v.473/473 Correction du TE 3. Redirections, tubes et filtres UPMC M1 : MNI tr uploads/Industriel/ tpexo.pdf

  • 45
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager