Linux – Shell bash

Introduction

Mots-clés

Shell, Bash, métacaractères, caractères génériques, caractères de citation, variable, redirection, tube, alias, exécution de commandes, substitution de commandes.

Objectif

À l’issue de ce chapitre, vous comprendrez mieux le fonctionnement de la ligne de commandes et augmenterez votre productivité en employant le shell Bash comme interpréteur de commandes.

Matériel à prévoir

Ces exercices peuvent être réalisés sur n’importe quelle distribution Linux où le lecteur possède un compte utilisateur valide ; le compte utilisateur tux est utilisé en correction des énoncés.

 

 

Énoncé 7.1 Variables

Durée estimative : 30 minutes

1.

Connectez-vous sur la deuxième console virtuelle texte (tty2) en tant qu’utilisateur tux.

2.

Listez toutes les variables définies dans votre environnement shell.

3.

Affectez la chaîne de caractères “abc” à la variable var1. Puis affichez de nouveau la liste des variables définies dans l’environnement shell.

4.

Affichez le contenu de la variable var1.

5.

Affichez le contenu de la variable var2. Cela génère-t-il une erreur ?

6.

Affichez le contenu de la variable HOME. Que représente cette variable ?

7.

Modifiez la valeur de la variable HOME par “/tmp”. Puis exécutez la commande cd et affichez votre répertoire de travail.

8.

Modifiez la valeur de la variable LANG par “C”. Puis consultez la page du manuel électronique concernant la commande bash. Dans quelle langue est affichée la page du manuel ?

9.

Recherchez dans la page du manuel précédemment ouverte la section “PROMPTING” et modifiez votre prompt de façon à afficher la date et le nom de la machine.

10.

Déconnectez-vous, et reconnectez-vous sur la deuxième console virtuelle texte (tty2) en tant qu’utilisateur tux. Puis vérifiez les valeurs des variables précédemment modifiées.

11.

Affectez la chaîne de caractères “Bond” à la variable var3.

12.

Affichez la chaîne de caractère “Bond, James Bond.” en utilisant le contenu de la variable var3.

13.

Affichez la chaîne de caractère “Bondir” en utilisant le contenu de la variable var3.

14.

Affectez la chaîne de caractères “lun” à la variable var4 et la chaîne de caractères “di” à la variable var5. Puis affectez la chaîne de caractères “lundi” à la variable var6 en réutilisant le contenu des variables var4 et var5.

15.

Supprimez les variables var4var5 et var6 de votre environnement shell.

16.

Lancez un nouveau shell avec la commande bash. Est-ce que la variable var3 est définie dans le nouvel environnement shell ? Puis revenez dans votre shell précédent.

17.

Faites en sorte que la variable var3 soit définie dans les environnements des processus fils, et vérifiez.

Indices

2.

Utilisez la commande set.

3.

L’affectation d’une variable se fait à l’aide du caractère = et il ne doit pas y avoir d’espaces autour du caractère =.

4.

Utilisez le caractère $ pour référencer une variable définie dans l’environnement shell.

6.

Prenez soin de saisir le nom de la variable HOME en majuscules.

7.

La commande cd renvoie l’utilisateur dans son répertoire personnel. Utilisez la commande pwd pour afficher le répertoire de travail courant.

8.

Utilisez la commande man.

9.

La recherche dans une page de manuel est exécutée de la même manière que dans l’éditeur de texte Vi.

L’invite de commande du shell (prompt) est définie par la variable PS1 ; il faut entourer la valeur par des guillemets ou des apostrophes lors d’une affectation lorsque la chaîne de caractères contient des espaces.

13.

Lorsque le nom d’une variable est ambigu sur la ligne de commandes, il est possible de délimiter son nom avec la syntaxe ${}.

15.

Utilisez la commande unset.

17.

Utilisez la commande export.

 

 

 

 

Énoncé 7.2 Caractères génériques, caractères d’expansion

Durée estimative : 20 minutes

1.

Allez dans le répertoire /etc.

2.

Listez tous les fichiers dont le nom commence par la lettre “r”. Le résultat de la commande est-il bien celui attendu ?

3.

Listez de nouveau tous les fichiers dont le nom commence par la lettre “r” sans afficher le contenu des répertoires correspondants.

4.

Affichez tous les fichiers dont le nom contient la chaîne de caractères “rc”.

5.

Affichez tous les fichiers dont le nom comporte trois caractères.

6.

Affichez tous les fichiers dont le nom commence par la chaîne de caractères “rc”, suivie d’un caractère quelconque, et se terminant par la chaîne de caractère “.d”.

7.

Affichez les fichiers dont les noms sont rc2.drc3.d, et rc4.d.

8.

Affichez tous les fichiers dont le nom ne commence pas par les lettres “a”, “b” et “c”.

9.

Affichez tous les fichiers dont le nom commence par une lettre majuscule.

10.

Listez tous les fichiers dont le nom se termine par la chaîne de caractères “conf” ou “config”.

11.

Listez tous les fichiers dont le nom :

  • commence par une minuscule,

  • suivie d’un nombre quelconque de caractères,

  • suivis de la lettre “a”, puis obligatoirement d’un autre caractère,

  • suivi de l’extension “.conf” ou “.config”.

Indices

2.

Utilisez le caractère générique *.

3.

Utilisez la commande ls avec l’option adéquate.

5.

Utilisez le caractère générique ?.

7.

Utilisez les caractères génériques [].

9.

Utilisez la classe de caractères [:upper:]. Il est aussi possible d’utiliser le motif [A – Z], mais il faut dans ce cas s’assurer du comportement de Bash qui dépend de la langue utilisée pour distinguer les majuscules des minuscules ; pour avoir un comportement standard, le plus simple est de définir la variable LC_ALL à C (POSIX) avec la commande export LC_ALL = C.

10.

Utilisez les caractères génériques {}.

11.

Utilisez tous les caractères génériques vus précédemment et la classe de caractères [:lower:].

 

 

 

Énoncé 7.3 Caractères de citation

Durée estimative : 5 minutes

1.

Exécutez les commandes suivantes et expliquez leurs résultats :

  • echo a b

  • echo a   b

  • echo “a   b”

  • echo ’a   b’

  • echo a\ \ \ b

Combien y a-t-il d’arguments pour chacune de ces commandes ?

2.

Allez dans le répertoire / et tapez la commande echo *. Quel est son résultat ? Pourquoi ?

3.

Comment afficher littéralement la chaîne de caractères “le caractère * est un caractère générique” ?

4.

Comment afficher littéralement la chaîne de caractères “la variable référencée par $var3” ?

Indices

1.

Saisissez le nombre exact d’espaces indiqués dans l’énoncé.

3.

Utilisez les caractères de citation.

4.

Utilisez les caractères de citation  ou \.

 

 

 

 

Énoncé 7.4 Redirections et tubes

Durée estimative : 40 minutes

1.

Exécutez la commande cat sans arguments, puis tapez quelques mots et terminez-la normalement. Que constatez-vous ?

2.

Exécutez la commande wc sans arguments, puis tapez quelques mots et terminez-la normalement. Que constatez-vous ?

3.

Utilisez la commande cat pour afficher le contenu du fichier /etc/hosts de deux manières : en passant le nom du fichier en argument, puis en utilisant une redirection.

4.

Utilisez la commande wc pour compter le nombre de lignes du fichier /etc/passwd de deux manières : en passant le nom du fichier en argument, puis en utilisant une redirection. Que constatez-vous ?

5.

Utilisez la commande cat pour écrire quelques mots dans le fichier /tmp/ficcat.

6.

Utilisez la commande cat sans argument pour copier le fichier /tmp/ficcat en /tmp/ficcat2.

7.

Utilisez la commande cat pour ajouter quelques mots au fichier /tmp/ficcatexistant.

8.

Utilisez la commande cat pour concaténer le contenu des fichiers /tmp/ficcat et /etc/hosts dans le fichier /tmp/ficcat3.

9.

Allez dans le répertoire /etc et redirigez la sortie de la commande ls dans le fichier /tmp/ls.out. Que contient ce fichier ?

10.

Utilisez la commande wc sans argument pour compter le nombre de lignes contenues dans le fichier /tmp/ls.out.

11.

Combien y a-t-il de fichiers dans le répertoire /etc ? Supprimez le fichier /tmp/ls.out.

12.

Sans utiliser de fichier intermédiaire, comptez de nouveau le nombre de fichiers présents dans le répertoire /etc.

13.

En employant un tube (ou “pipe”), comptez de nouveau le nombre de fichiers présents dans le répertoire /etc, tout en écrivant le résultat de la commande ls dans le fichier /tmp/ls.out.

14.

Exécutez la commande ls /etc/passwd glop et notez son résultat.

15.

Exécutez la commande ls /etc/passwd glop en redirigeant les sorties dans le fichier /tmp/ls.out et les messages d’erreur dans le fichier /tmp/ls.err.

16.

Exécutez la commande ls /etc/passwd glop en redirigeant les sorties dans le fichier /tmp/ls.out et en supprimant les messages d’erreur.

17.

Exécutez la commande ls /etc/passwd glop en redirigeant les sorties et les messages d’erreur dans le fichier /tmp/ls.out.

Indices

5.

Redirigez la sortie de la commande avec le caractère >.

6.

Redirigez l’entrée de la commande avec le caractère < et la sortie avec le caractère >.

7.

Redirigez la sortie de la commande avec les caractères >>.

8.

Redirigez la sortie de la commande avec le caractère >.

10.

Redirigez l’entrée de la commande avec le caractère <.

12.

Utilisez un tube (ou “pipe”) : caractère |.

13.

Utilisez la commande tee pour générer une sortie intermédiaire.

15.

Redirigez la sortie de la commande avec le caractère >, et l’erreur avec les caractères 2>.

16.

Redirigez les messages d’erreur de la commande dans le fichier spécial /dev/null.

17.

Redirigez les messages d’erreur de la commande au même endroit que la sortie avec les caractères 2>&1.

 

 

 

 

Énoncé 7.5 Alias

Durée estimative : 15 minutes

1.

Dressez la liste des alias définis dans votre environnement shell.

2.

Si l’alias ls=’ls –color=tty’ n’est pas défini, créez-le.

3.

Utilisez la commande ls pour afficher le contenu du répertoire /etc. Que signifient les couleurs affichées ?

4.

Forcez l’exécution de la commande ls sans utiliser l’alias précédemment défini.

5.

Définissez l’alias cd.. permettant d’aller dans le répertoire parent (comme sous DOS).

6.

Supprimez l’alias cd.. créé précédemment.

Indices

1.

Utilisez la commande alias.

2.

Utilisez la commande alias.

4.

Préfixez la commande du caractère \ ou employez la commande command.

6.

Utilisez la commande unalias.

 

 

 

Énoncé 7.6 Exécution et substitution de commandes

Durée estimative : 15 minutes

1.

Déterminez la nature (alias, commande interne du shell, commande externe du shell) des commandes cdvi et find.

2.

Déterminez rapidement l’emplacement des commandes grepls et fdisk sur le système de fichiers.

3.

Comptez le nombre de processus s’exécutant actuellement sur votre système.

4.

Affichez la chaîne de caractères “il y a actuellement N processus ” où N est le résultat de la commande précédente.

5.

Définissez l’alias nbps qui retourne la chaîne de caractères précédente.

Indices

1.

Utilisez la commande type.

2.

Utilisez la commande whereis.

3.

Utilisez l’option –no-heading de la commande ps qui permettra d’enlever la ligne d’en-tête en résultat de la commande, puis comptez le nombre de lignes retournées.

4.

Utilisez la substitution de commandes avec la syntaxe $() ou la syntaxe .

 

 

 

Énoncé 7.7 Options du shell Bash

Durée estimative : 10 minutes

1.

Listez les options de votre shell.

2.

Affectez la chaîne de caractères “DEBOGAGE>>> ” à la variable PS4.

3.

Activez l’option du shell xtrace.

4.

Tapez la commande cd /etc ; ls -d X*. Que constatez-vous ?

5.

Désactivez l’option xtrace.

Indice

1.

Utilisez la commande set avec l’option adéquate.