Linux Professional Institute Learning Logo.
Passer au contenu principal
  • Accueil
    • Toutes les ressources
    • Supports de Cours LPI
    • Devenez contributeur
    • Publishing Partners
    • Devenez Partenaire de Publication
    • À propos
    • FAQ
    • Contributeurs
    • Feuille de route
    • Contactez-nous
  • LPI.org
103.1 Leçon 2
Thème 101 : Architecture système
101.1 Détermination et configuration des paramètres du matériel
  • 101.1 Leçon 1
101.2 Démarrage du système
  • 101.2 Leçon 1
101.3 Change runlevels / boot targets and shutdown or reboot system
  • 101.3 Leçon 1
Thème 102 : Installation de Linux et gestion de paquetages
102.1 Conception du schéma de partitionnement
  • 102.1 Leçon 1
102.2 Installation d'un gestionnaire d'amorçage
  • 102.2 Leçon 1
102.3 Gestion des bibliothèques partagées
  • 102.3 Leçon 1
102.4 Utilisation du gestionnaire de paquetage Debian
  • 102.4 Leçon 1
102.5 Utilisation des gestionnaires de paquetage RPM et YUM
  • 102.5 Leçon 1
102.6 Linux en tant que système virtuel hébergé
  • 102.6 Leçon 1
Thème 103 : Commandes GNU et Unix
103.1 Travail en ligne de commande
  • 103.1 Leçon 1
  • 103.1 Leçon 2
103.2 Traitement de flux de type texte avec des filtres
  • 103.2 Leçon 1
103.3 Gestion élémentaire des fichiers
  • 103.3 Leçon 1
  • 103.3 Leçon 2
103.4 Utilisation des flux, des tubes et des redirections
  • Prochainement...
103.5 Création, contrôle et interruption des processus
  • Prochainement...
103.6 Modification des priorités des processus
  • Prochainement...
103.7 Recherche dans des fichiers texte avec les expressions rationnelles
  • Prochainement...
103.8 Édition de fichier simple
  • Prochainement...
Thème 104 : Disques, systèmes de fichiers Linux , arborescence de fichiers standard (FHS)
104.1 Création des partitions et des systèmes de fichiers
  • Prochainement...
104.2 Maintenance de l'intégrité des systèmes de fichiers
  • Prochainement...
104.3 Montage et démontage des systèmes de fichiers
  • Prochainement...
104.5 Gestion des permissions et de la propriété sur les fichiers
  • Prochainement...
104.6 Création et modification des liens physiques et symboliques sur les fichiers
  • Prochainement...
104.7 Recherche de fichiers et placement des fichiers aux endroits adéquats
  • Prochainement...
How to get certified
  1. Thème 103 : Commandes GNU et Unix
  2. 103.1 Travail en ligne de commande
  3. 103.1 Leçon 2

103.1 Leçon 2

Certification :

LPIC-1

Version :

5.0

Thème :

103 Commandes GNU et Unix

Objectif :

103.1 Travailler en ligne de commande

Leçon :

2 sur 2

Introduction

L’environnement d’un système d’exploitation comprend les outils de base - comme les interpréteurs de commandes et éventuellement une interface graphique - dont vous aurez besoin pour travailler. Mais votre environnement sera également doté d’un ensemble de raccourcis et de valeurs prédéfinies. Nous allons apprendre ici à lister, invoquer et gérer ces valeurs.

Trouver vos variables d’environnement

Comment identifier les valeurs courantes de chacune de nos variables d’environnement ? Une façon de le faire est d’utiliser la commande env :

$ env
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000
XAUTHORITY=/run/user/1000/gdm/Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
[...]

Vous obtiendrez beaucoup de résultats, bien plus que ce qui est inclus dans l’extrait ci-dessus. Mais pour l’instant, notez l’entrée PATH, qui contient les répertoires où votre shell (et d’autres programmes) vont chercher d’autres programmes sans avoir à spécifier le chemin complet. Avec cette configuration, vous pouvez exécuter un programme binaire qui se trouve, disons, dans /usr/local/bin depuis votre répertoire personnel et il fonctionnera comme si le fichier était local.

Changeons de sujet un instant. La commande echo affiche à l’écran tout ce que vous lui fournissez en argument. Eh bien, il y aura bien des fois où faire répéter littéralement quelque chose à echo nous sera très utile.

$ echo "Hi. How are you?"
Hi. How are you?

Mais il y a autre chose que vous pouvez faire avec echo. Lorsque vous lui fournissez le nom d’une variable d’environnement — et que vous lui indiquez qu’il s’agit d’une variable en préfixant le nom de la variable par un $ — alors, au lieu de simplement afficher le nom de la variable, l’interpréteur de commandes la développera en vous donnant sa valeur. Vous ne savez pas si votre répertoire préféré est actuellement dans le chemin ? Vous pouvez le vérifier rapidement en passant par echo :

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Créer de nouvelles variables d’environnement

Vous pouvez ajouter vos propres variables personnalisées à votre environnement. La méthode la plus simple consiste à utiliser le caractère =. La chaîne de caractères à gauche sera le nom de votre nouvelle variable et la chaîne de caractères à droite sera sa valeur. Vous pouvez dorénavant passer le nom de la variable à echo pour confirmer que ça a marché :

$ myvar=hello
$ echo $myvar
hello
Note
Vous remarquerez qu’il n’y a pas d’espace de part et d’autre du signe égal dans l’affectation des variables.

Mais est-ce que ça a vraiment marché ? Tapez bash dans le terminal pour lancer un nouveau shell. Ce nouveau shell ressemble exactement à celui que vous venez d’utiliser, mais il est en fait un enfant du shell original (que nous appelons le parent). Maintenant, à l’intérieur de ce nouveau shell enfant, essayez de faire fonctionner echo comme avant. Rien. Que se passe-t-il ?

$ bash
$ echo $myvar

$

Une variable que vous créez de la façon que nous venons de décrire ne sera disponible que localement, dans la session actuelle du shell. Si vous lancez un nouveau shell — ou si vous fermez la session en utilisant exit — la variable ne vous suivra pas. En tapant exit ici, vous retrouvez votre shell parent d’origine qui, pour l’instant, est l’endroit où nous voulons être. Vous pouvez relancer echo $myvar si vous voulez, juste pour vérifier que la variable est toujours disponible. Maintenant, tapez export myvar pour transmettre la variable à tous les shells enfants que vous pourrez ouvrir par la suite. Essayez : tapez bash pour lancer un nouveau shell et ensuite echo :

$ exit
$ export myvar
$ bash
$ echo $myvar
hello

Tout cela peut sembler un peu bête lorsque l’on crée des shells sans objectif valable. Mais comprendre comment les variables de l’interpréteur de commandes se propagent dans votre système deviendra très important lorsque vous commencerez à écrire des scripts concrets.

Supprimer des variables d’environnement

Vous voulez savoir comment faire le ménage dans toutes ces variables éphémères que vous avez créées ? Une solution consiste tout simplement à fermer votre shell parent - ou à redémarrer votre machine. Mais il y a plus simple. Comme unset, par exemple. Taper unset (sans le $) va détruire la variable. echo nous le prouvera.

$ unset myvar
$ echo $myvar

$

S’il y a une commande unset, il y a fort à parier qu’il existe une commande set qui va avec. Exécuter set tout seul affichera beaucoup de choses, et ce ne sera pas très différent de ce que env nous a donné. Regardez la première ligne du résultat lorsque vous filtrez avec le terme PATH :

$ set | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[...]

Quelle est la différence entre set et env ? En ce qui nous concerne, l’essentiel est que set affiche toutes les variables et toutes les fonctions. Prenons un exemple. Nous allons créer une nouvelle variable appelée mynewvar et confirmer qu’elle est bien là :

$ mynewvar=goodbye
$ echo $mynewvar
goodbye

Maintenant, lancer env en utilisant grep pour filtrer la chaîne mynewvar n’affichera rien. Mais en exécutant set de la même manière, nous verrons notre variable locale.

$ env | grep mynewvar

$ set | grep mynewvar
mynewvar=goodbye

Guillemets et échappement des caractères spéciaux

Le moment est venu de vous présenter le problème des caractères spéciaux. En temps normal, les caractères alphanumériques (a-z et 0-9) seront lus littéralement par Bash. Si vous essayez de créer un nouveau fichier appelé myfile, il vous suffit de taper touch suivi de myfile et Bash saura quoi en faire. Mais si vous voulez inclure un caractère spécial dans votre nom de fichier, ça se complique un peu.

Pour illustrer cela, nous allons taper touch et enchaîner avec le nom : my big file. Le problème, c’est qu’il y a deux espaces entre les mots que Bash va interpréter. Même si, techniquement, un espace n’est pas un "caractère", il en est un dans le sens où Bash ne le lira pas littéralement. Si vous affichez le contenu de votre répertoire actuel, au lieu d’un fichier appelé my big file, vous verrez trois fichiers nommés respectivement my, big et file. En effet, Bash considère que vous souhaitez créer une série de fichiers dont vous fournissez les noms dans une liste :

$ touch my big file
$ ls
my big file

Les espaces seront interprétés de la même manière si vous supprimez (rm) les trois fichiers en une seule commande :

$ rm my big file

Maintenant, essayons de procéder de la bonne manière. Tapez touch et les trois parties de votre nom de fichier, mais cette fois-ci, mettez le nom entre guillemets. Cette fois-ci ça a marché. Lorsque vous affichez le contenu du répertoire, vous voyez un seul fichier avec le nom approprié.

$ touch "my big file"
$ ls
'my big file'

Il existe d’autres façons d’obtenir le même résultat. Les guillemets simples, par exemple, fonctionnent tout aussi bien que les guillemets doubles. (Notez que les guillemets simples préservent la valeur littérale de tous les caractères, tandis que les guillemets doubles préservent tous les caractères sauf $, `, \ et, dans certains cas, !).

$ rm 'my big file'

En faisant précéder chaque caractère spécial d’une barre oblique inversée, on "échappe" à la spécificité du caractère et Bash le lira littéralement.

$ touch my\ big\ file

Exercices guidés

  1. Utilisez la commande export pour ajouter un nouveau répertoire à votre PATH (ceci ne survivra pas à un redémarrage).

  2. Utilisez la commande unset pour supprimer la variable PATH. Essayez de lancer une commande en utilisant sudo (comme sudo cat /etc/shadow). Que s’est-il passé ? Pourquoi ? (Quittez votre shell pour rétablir le bon fonctionnement des choses.)

Exercices d’approfondissement

  1. Faites des recherches sur Internet pour trouver et étudier la liste complète des caractères spéciaux.

  2. Essayez d’exécuter des commandes en utilisant des chaînes composées de caractères spéciaux et en utilisant différentes méthodes d’échappement. Est-ce que ces méthodes se comportent différemment ?

Résumé

Dans cette leçon, vous avez appris :

  • Comment identifier les variables d’environnement de votre système.

  • Comment créer vos propres variables d’environnement et les exporter vers d’autres shells.

  • Comment supprimer des variables d’environnement et comment utiliser les commandes env et set.

  • Comment échapper les caractères spéciaux pour que Bash les lise littéralement.

Les commandes suivantes ont été abordées dans cette leçon :

echo

Affiche les chaînes et les variables données.

env

Affiche et modifie vos variables d’environnement.

export

Passe une variable d’environnement aux shells enfants.

unset

Supprime les valeurs et les attributs des variables et des fonctions du shell.

Réponses aux exercices guidés

  1. Utilisez la commande export pour ajouter un nouveau répertoire à votre PATH (ceci ne survivra pas à un redémarrage).

    Vous pouvez ajouter temporairement un nouveau répertoire (par exemple un répertoire appelé myfiles qui se trouve dans votre répertoire personnel) à votre PATH en utilisant export PATH="/home/yourname/myfiles:$PATH". Créez un script simple dans le répertoire myfiles/, rendez-le exécutable, et essayez de le lancer depuis un autre répertoire. Ces commandes partent du principe que vous êtes dans votre répertoire personnel qui contient un répertoire appelé myfiles.

    $ touch myfiles/myscript.sh
    $ echo '#!/bin/bash' >> myfiles/myscript.sh
    $ echo 'echo Hello' >> myfiles/myscript.sh
    $ chmod +x myfiles/myscript.sh
    $ myscript.sh
    Hello
  2. Utilisez la commande unset pour supprimer la variable PATH. Essayez de lancer une commande en utilisant sudo (comme sudo cat /etc/shadow). Que s’est-il passé ? Pourquoi ? (Quittez votre shell pour rétablir le bon fonctionnement des choses.)

    En tapant unset PATH, vous supprimerez les paramètres actuels du PATH. Toute tentative d’invoquer un binaire sans son chemin complet va échouer. Pour cette raison, la tentative d’exécuter une commande en utilisant sudo (qui est lui-même un programme binaire situé dans /usr/bin/sudo) va échouer — à moins que vous ne spécifiez l’emplacement absolu, comme dans : /usr/bin/sudo /bin/cat /etc/shadow. Vous pouvez réinitialiser votre PATH en utilisant export ou en quittant simplement le shell.

Réponses aux exercices d’approfondissement

  1. Faites des recherches sur Internet pour trouver et étudier la liste complète des caractères spéciaux.

    Voici la liste : & ; | * ? " ' [ ] ( ) $ < > { } # / \ ! ~.

  2. Essayez d’exécuter des commandes en utilisant des chaînes composées de caractères spéciaux et en utilisant différentes méthodes d’échappement. Est-ce que ces méthodes se comportent différemment ?

    L’échappement à l’aide des caractères " préservera les valeurs spéciales du signe dollar, de la quote inversée et de la barre oblique inversée. L’échappement à l’aide d’un caractère ', par contre, rendra tous les caractères littéralement.

    $ echo "$mynewvar"
    goodbye
    $ echo '$mynewvar'
    $mynewvar

Linux Professional Insitute Inc. Tous droits réservés. Visitez le site web du projet _Learning_ : https://learning.lpi.org
Ce travail est sous licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International.

Prochaine leçon

103.2 Traitement de flux de type texte avec des filtres (103.2 Leçon 1)

Lire la prochaine leçon

Linux Professional Insitute Inc. Tous droits réservés. Visitez le site web du projet _Learning_ : https://learning.lpi.org
Ce travail est sous licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International.

LPI est une organisation à but non lucratif.

© 2023 Le Linux Professional Institute (LPI) est la référence mondiale en matière de certification et un organisme de soutien aux professionnels de l'Open Source. Avec plus de 200 000 certifiés à son actif, c'est le principal organisme de certification indépendant pour Linux et l'Open Source au monde. Le LPI a certifié des professionnels dans plus de 180 pays, organise des examens en plusieurs langues et compte des centaines de partenaires pour la formation.

Notre objectif est la création d'opportunités économiques et créatives pour tous en rendant accessible au monde entier la certification des connaissances et des compétences en matière d'Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contactez-nous
  • Politique en matière de confidentialité et de cookies

Vous avez repéré une erreur ou vous voulez aider à améliorer cette page ? Faites-nous savoir.

© 1999–2023 The Linux Professional Institute Inc. Tous droits réservés.