Premières redirections

Chaque commande UNIX lancée depuis le terminal possède:

  • une entrée standard où la commande peut récupérer des données à traiter,
  • une sortie standard où sont écrits les résultats de la commande,
  • une sortie d'erreur où sont écrits les éventuels messages d'erreur.

Par défaut, si une commande est lancée depuis le terminal, l'entrée standard est le clavier, et la sortie standard et la sortie d'erreur sont toutes les deux l'écran du terminal lui-même.

Le symbole > utilisé à la suite d'une commande permet de rediriger la sortie standard vers une autre sortie, qui doit être spécifiée après le symbole >. De même, le symbole < permet de rediriger l'entrée standard. Très souvent, ces symboles sont utilisés pour permettre à une commande de lire des données ou d'écrire des résultats dans un fichier.

Exercice 1 : Redirection de la sortie standard

  1. Tapez la commande ls /usr/*/*. Que veut dire /usr/*/* (quels sont les fichiers listés) ?

  2. Comme le listing est un peu long, on souhaite l'enregistrer dans un fichier plutôt que sur la sortie standard (l'écran). Relancez la commande en redirigeant la sortie standard vers un fichier appelé listing.txt.

  3. Consultez (par exemple avec la commande less) le contenu du fichier listing.txt. Remarquez que vous n'avez pas eu besoin de créer le fichier avant de faire la redirection.

  4. On souhaite maintenant rajouter la liste des fichiers contenus dans /usr au fichier listing.txt. Utilisez une redirection pour le faire.

  5. Vérifiez le contenu du fichier listing.txt. Que s'est-il passé?

  6. Le problème est que > permet d'écrire dans un fichier sans se soucier de ce qu'il contenait précédemment. Pour ajouter le résultat d'une commande à la fin d'un fichier sans effacer ce qui s'y trouve (on dit concaténer), il faut utiliser un autre signe de redirection de sortie: >>.

    Refaites la question 2, mais cette fois-ci en veillant à ce que le résultat de la question 4 ne soit pas effacé (vérifiez que listing.txt contient bien le résultat des deux commandes).

Exercice 2 : Redirection de l'entrée standard

Nous allons maintenant apprendre à utiliser la commande tr qui permet de faire du transcodage, c'est à dire de remplacer certains caractères par d'autres dans un texte.

La commande tr prend en argument deux groupes de lettres (de même taille) et attend un texte sur l'entrée standard. Elle affiche à nouveau le texte avec les caractères du premier groupe remplacés par ceux du second. Par exemple tr abc def remplace dans le texte fourni sur l'entrée standard tous les a par des d, les b par des e, etc.

  1. Consultez l'aide de cette commande (tr --help) pour voir ce que vous pouvez choisir comme caractères.

  2. Utilisez la commande tr pour remplacer toutes les voyelles par des e dans le texte (de votre choix) que vous entrerez au clavier.

    Note: pour indiquer la fin de votre saisie, utilisez la combinaison de touche Ctrl-D.

  3. Utilisez la commande tr pour remplacer toutes les minuscules par des majuscules dans le texte que vous entrerez au clavier.

  4. Récupérez le fichier declaration.txt sur la page du cours (dans la barre de droite) et utilisez la commande tr pour l'afficher en majuscules (vous aurez besoin de rediriger l'entrée standard).

  5. On peut aussi utiliser la commande tr pour supprimer des caractères. Testez-la pour supprimer les numéros d'articles dans la déclaration des droits de l'homme et du citoyen.

  6. Faites une copie du fichier declaration.txt, par exemple dans declaration.copie.txt, puis essayez de mettre ce fichier en majuscules grâce à la commande précédente (en sauvegardant le résultat directement dans declaration.copie.txt). Affichez le contenu du fichier résultat : que s'est-il passé ?

  7. Récupérez le fichier quotes.txt sur la page du cours (dans la barre de droite). Regardez son contenu en utilisant la commande less. Dans ce fichier les e et les a ont été interchangés et les i ont été triplés. Utilisez la commande tr pour rétablir le texte d'origine dans le fichier quotes.txt.

    Indice : vous aurez peut-être du mal à le faire en une seule commande.

Exercice 3 : La commande cat et les redirections

La commande cat est une commande multi-usages qui permet d’afficher, de créer, de copier et de concaténer (mettre bout à bout) des fichiers. Elle utilise pleinement les mécanismes de redirection. Elle lit l’entrée standard si aucun fichier n’est spécifié. Ce qui est lu est affiché sur la sortie standard.

  1. Dans le terminal, tapez la commande cat puis saisissez le texte suivant (en validant avec la touche entrée):

    Aujourd’hui, on étudie les redirections.

    La saisie est affichée deux fois. Expliquez.

    Note : pour terminer la saisie, procédez comme pour la commande tr.

  2. Tapez la commande cat > test.txt et saisissez le texte suivant :

    Un seul chevron, et le texte précédent disparaît. Mais avec deux, on écrit à la fin du fichier.

    Le texte ne s’affiche plus qu’une fois. Pourquoi ?

  3. Utilisez la commande cat pour copier le fichier quotes.txt dans le fichier game_of_thrones.txt.

  4. Utilisez la commande cat pour concaténer les fichiers beginning.txt et middle.txt dans le fichier lyrics.txt.

  5. Ajoutez à la fin du fichier lyrics.txt, le contenu du fichier end.txt (vous avez le droit d’utiliser un fichier temporaire).

  6. En une commande, ajoutez à la fin de lyrics.txt la phrase suivante :

    By Bob Thiele and George David Weiss (singer: Louis Armstrong).

  7. On veut maintenant ajouter au début du fichier sortie le texte suivant :

    What a Wonderful World.

    1. À l’aide de cat et d’une redirection vers le fichier tmp1.txt, stockez le texte ci-dessus saisi sur l’entrée standard.

    2. Stockez (dans le bon sens) dans tmp2.txt la concaténation de tmp1.txt et lyrics.txt.

    3. Détruisez le fichier tmp1.txt, puis renommez le fichier tmp2.txt en lyrics.txt. Admirez le résultat avec la commande less.

    4. Cette solution a nécessité quatre commandes. Proposez une solution en utilisant trois (ou moins !).

Alias

Exercice 4 :

La commande alias vous permet de créer des version "personnalisées" (que l'on appelle alias) de certaines commandes. La syntaxe est : alias nom="commande", où nom est le nom de la nouvelle commande créée, et commande est la définition de cette nouvelle commande.

Par exemple, alias ll="ls -l" crée un alias (une nouvelle commande) appelé ll ayant pour effet d'afficher le contenu détaillé du répertoire courant.

On peut aussi remplacer une commande par un alias, par exemple en tapant alias ls="ls --color". Taper simplement ls après cette commande affichera directement la liste des fichiers en couleur.

  1. Si l'on tape la commande alias sans argument, on obtient une liste des alias déjà définis. Testez dans votre terminal.

  2. Recopiez chacun des exemples ci-dessus (ll et ls) dans le terminal puis testez les nouveaux alias ainsi définis.

  3. Fermez le terminal et ouvrez-en un nouveau. Testez à nouveau ll. Que se passe-t-il?

Les alias ainsi créés sont temporaires et existent seulement jusqu'à ce que vous quittiez le terminal. Nous allons maintenant voir comment créer des alias permanents.

  1. Téléchargez l'archive bashrc_and_profile.tgz sur la page du cours (dans la barre, à droite).

  2. Désarchivez-la dans votre dossier personnel et vérifiez avec ls que les fichiers .bashrc et .profile s'y trouvent bien. Que se passe-t-il?

    On dit que ces fichiers sont des fichiers cachés. C'est le cas de tous les fichiers dont le nom commence par un point. Trouvez l'option de ls qui permet de les voir.

  3. Déplacez ces deux fichiers dans votre dossier personnel. Jetez un œil à ce qu'ils contiennent.

  4. Créez un fichier .bash_aliases dans votre répertoire personnel et écrivez dedans la commande qui permet d'afficher "bonjour" dans le terminal.

  5. Fermez votre terminal et relancez-le. S'il n'affiche pas "bonjour", c'est que vous vous êtes trompés à la question précédente (soit dans le nom du fichier, soit dans la commande). Recommencez jusqu'à ce que cela fonctionne.

  6. Dans le fichier .bash_aliases, ajoutez l'alias ll vu en début d'exercice.

  7. Fermez votre terminal, ouvrez-en un nouveau et testez la "nouvelle" commande ls.

  8. Retrouvez l'option qui permet de passer en mode interactif pour mv, cp et rm, c'est-à-dire qui demande une confirmation si l'utilisateur s'apprête à supprimer un fichier (par exemple en copiant ou en déplaçant un autre fichier par-dessus).

  9. Dans le fichier .bash_aliases, créez un alias pour faire en sorte que les commandes mv, cp et rm fonctionnent par défaut en mode interactif. Testez dans un nouveau terminal (sur des fichiers sans importance !).

Commande de recherche

Exercice 5 :

La commande find permet (entre autres) de localiser un fichier à l'aide de son nom. On peut l'utiliser ainsi pour trouver les fichiers (ou répertoires) dont le nom correspond à expr (avec possiblement des méta-caractères) dans le dossier nommé directory ou un de ses sous-répertoires.

find directory -name "expr"

Cet exercice se déroule dans frozen-bubble-2.2.0 que vous avez téléchargé lors du précédent TP, et que vous pouvez retrouver dans la barre de droite.

  1. Utilisez find pour trouver le fichier small_ping.png.

  2. Utilisez find pour trouver tous les fichiers dont le nom contient un a suivi d'un t dans frozen-bubble-2.2.0.

  3. Déterminez combien de fichiers se terminent par .png dans frozen- bubble-2.2.0. Vous pourrez utilisez la commande wc pour compter.

  4. Utilisez find pour trouver tous les fichiers dont le nom contienne un a suivi d'un t et un t suivi d'un a dans frozen-bubble-2.2.0 (sans doublons).

    Indice: regardez la section sur les expressions dans la page de manuel.

  5. Trouvez tous les répertoires (ce n'est plus l'option -name qui vous intéresse) présents dans l'arborescence de frozen-bubble-2.2.0. Quel est le répertoire qui se trouve à la plus grande distance de la racine?

La commande grep permet (entre autres) de trouver des chaines de caractères dans les fichiers. On peut l'utiliser ainsi pour trouver la chaîne pattern dans les fichiers file1, file2, ...

grep "pattern" file1 file2 ...
  1. Trouvez la chaîne de caractères the dans les différents fichiers de type .txt que vous avez téléchargés et fabriqués aujourd'hui.

  2. Trouvez l'option de grep permettant d'afficher les occurrences de la chaîne the en couleurs et testez-la.

  3. Trouvez l'option de grep permettant de compter les occurrences de la chaîne the plutôt que de les affichez et testez-la.

  4. Cherchez toutes les occurrences de homme dans declaration.txt, qu'elles soient en majuscules ou en minuscules.

Déplacements experts dans l'arborescence

Lorsqu'on utilise le terminal, il peut arriver qu'on ait une tâche à effectuer dans un répertoire très lointain de l'arborescence. Plutôt que d'ouvrir un nouvel onglet à chaque fois, ou de taper plusieurs longues commandes cd, il est possible de mémoriser le répertoire dans lequel on était en train de travailler pour y revenir plus tard.

Exercice 6 : Des piles de dossiers

Note : L'intégralité de cet exercice doit être réalisée depuis le terminal !

  1. Ouvrez la page de manuel de la commande bash. Cette page décrit le fonctionnement de l'invite de commande de votre terminal. Cherchez-y la description des commandes pushd, popd et dirs. À quoi servent ces commandes ?

  2. Créez les répertoires ~/L1/ISI/TP6/boulot/tableaux/commandes/ et ~/L1/ISI/TP6/chez-moi/perso/mes_listes/courses/.

    Indication : la commande mkdir possède une option permettant de créer immédiatement les répertoires intermédiaires, ce qui évite d'avoir à le faire à la main.

  3. Après l'avoir créé, placez-vous dans le répertoire commandes et créez-y un fichier (vide) appelé fournitures.csv.

    Ouvrez ce fichier avec le tableur gnumeric. Attention : veillez à lancer gnumericen arrière-plan, pour ne pas perdre la main sur le terminal.

  4. Pendant que vous travailliez sur votre tableur, vous avez reçu un SMS vous rappelant d'acheter des brocolis. Depuis le même terminal et sans fermer gnumeric, placez-vous dans le répertoire courses (créé plus haut) grâce à la commande pushd.

  5. Inspectez la pile de répertoires grâce à la commande dirs -v. Que constatez-vous ?

  6. Avant d'avoir eu le temps d'écrire votre liste de courses, vous vous rendez compte que vous avez absolument besoin de créer un nouvel alias. Déplacez- vous avec pushd dans votre répertoire personnel et inspectez à nouveau la pile des répertoires.

  7. Créez dans .bash_aliases un alias la permettant d'afficher la liste détaillée des fichiers du répertoire courant, y compris les fichiers cachés.

  8. Revenez avec popd dans le répertoire courses. Inspectez à nouveau la pile de répertoires, puis ouvrez le fichier épicerie.txt dans un éditeur de texte et ajoutez-y le mot brocolis.

  9. Revenez avec popd dans votre répertoire commandes. Inspectez une dernière fois la pile de répertoires, puis créez un fichier fournisseurs.csv.

  10. ★ Qu'aurait-il fallu faire pour revenir directement du répertoire personnel dans le répertoire commandes, puis seulement dans le répertoire courses ?

    Attention : la description des commandes pushd et popd se trouvent dans man bash !

  11. ★ Quel est l'effet de la commande cd - ? Cherchez une explication dans le manuel de bash.