La majorité de la communauté technologique apprécie d’interagir avec les systèmes via l’interface en ligne de commande (CMD) ou le shell. En général, cela facilite leur travail. Par exemple, vous pouvez créer une commande shell capable d’exécuter plusieurs tâches automatiquement, plutôt que de devoir cliquer sur plusieurs boutons d’une interface graphique.
Lorsque vous lancez un programme shell ou CMD, il compile plusieurs informations. Ces informations définissent la manière dont le programme accède aux ressources système sous-jacentes ainsi que son comportement général. Vous pouvez les stocker dans un espace appelé l’environnement. L’environnement se compose de chaînes de caractères représentant des paires clé-valeur. Dans ce tutoriel, nous utiliserons Ubuntu 20.04 VPS comme exemple pour vous guider lors de la configuration des variables d’environnement ou de shell. Ce guide devrait également s’appliquer aux autres distributions Linux.
Quelle est la différence entre les variables d’environnement et les variables de shell ?
Lorsque vous démarrez une session, des informations sont recueillies à partir des paramètres et des fichiers de configuration du système. Ensuite, elles sont disponibles pour le processus shell et ses processus enfants. Ces informations sont un ensemble de paires clé-valeur sous ce format :
|
1 2 3 |
KEY=value KEY="Some value" KEY=data1:data2 |
Les noms des variables, c’est-à-dire les clés, sont sensibles à la casse. Cependant, il est conventionnellement accepté de les écrire en MAJUSCULES. Cela vous aide à les distinguer dans d’autres contextes. Avec le caractère deux-points ‘:’, vous pouvez attribuer plusieurs valeurs à la même variable. Il est également important de veiller à ne pas laisser d’espace autour du =. Les clés sont les variables et sont classées en deux catégories : les variables d’environnement et les variables de shell. Les variables d’environnement contiennent toutes les variables définies à l’échelle du système et disponibles pour chaque shell ou processus enfant. Elles aident à transmettre des informations aux processus que vous démarrez via les commandes shell. Les variables de shell comprennent uniquement les variables définies dans la session shell spécifique. De plus, elles incluent uniquement les variables disponibles exclusivement au sein de leur instance de shell.
Liste des variables d’environnement et de shell
Par défaut, le terminal fournit deux commandes pour lister les variables d’environnement et de shell : env ou printenv. Elles affichent les mêmes informations dans leur état par défaut. Voici un exemple de sortie de ces commandes :
Utilisation de env :

Utilisation de printenv :

Comme vous pouvez le voir, la sortie est la même. La différence apparaît lorsque vous souhaitez obtenir la valeur d’une clé spécifique. C’est à ce moment-là que vous utiliserez printenv avec le nom de la variable :

Pour voir plusieurs valeurs, vous pouvez passer plus d’un argument à la commande printenv. Les valeurs apparaîtront dans l’ordre dans lequel vous avez saisi les arguments :

Vous pouvez également utiliser la commande echo avec le nom de la variable pour afficher la valeur d’une variable :

La commande env vous permet de modifier l’environnement dans lequel les programmes s’exécutent en passant des définitions de variables dans une syntaxe telle que :
|
1 |
env VAR1="var 1 value" command_to_run command_options |
Cela vous permet de remplacer des valeurs ou de définir de nouvelles valeurs qui peuvent être utilisées par le processus enfant. Les commandes printenv et env listent les variables d’environnement comme vu ci-dessus. Celles-ci étaient déjà définies pour les processus système. Si vous souhaitez voir une liste des variables de shell, vous pouvez utiliser la commande set. Saisir set sans aucune variable retournera une liste de toutes les variables d’environnement, variables de shell, variables locales et fonctions de shell :

Les variables peuvent être trop nombreuses. Si nécessaire, vous pouvez les paginer à l’aide de la commande :
|
1 |
set | less |
Vous pouvez nettoyer davantage la sortie en spécifiant à la commande set de s’exécuter en POSIX, évitant ainsi d’afficher les fonctions du shell. Ici, nous l’exécutons dans un sous-shell (instance distincte de l’interpréteur de commandes) pour empêcher la commande de modifier l’environnement actuel :
|
1 |
(set -o posix; set) |
Ce qui précède liste toutes les commandes d’environnement et de shell disponibles sur le système. Vous pouvez réduire la sortie en utilisant la commande suivante pour tenter d’obtenir uniquement les variables de shell :
|
1 |
comm -23 <(set -o posix; set | sort) <(env | sort) |
Un exemple de sortie de la commande ci-dessus est :

Bien que la commande puisse inclure quelques variables d'environnement, elle vous aidera à différencier les variables de shell et les variables d'environnement. C'est parce que la commande set met les valeurs des variables entre guillemets, tandis que les commandes printenv et env ne le font pas. Les variables de shell sont utiles pour définir des valeurs persistantes pour les sessions, sans pour autant écrire de manière permanente les modifications dans des fichiers.
Variables d'environnement courantes
USER – L'utilisateur actuellement connecté.
SHELL – Le shell qui interprétera les commandes que vous saisissez. Par défaut, il s'agit de bash, mais vous pouvez le modifier.
HOME – Le répertoire personnel de l'utilisateur actuel.
TERM – Spécifie le type de terminal à émuler. Affiche le terminal émulé actuel.
PWD – Le répertoire de travail actuel.
OLDPWD – Le répertoire de travail précédent. Cela aide le shell à basculer vers le répertoire précédent lorsque vous saisissez la commande de changement de répertoire cd.
EDITOR – L'éditeur de fichiers par défaut lorsque vous tapez edit dans votre terminal.
LS_COLORS – Définit les codes couleur utilisés pour ajouter une sortie colorée lorsque vous saisissez la commande ls. Cela aide à différencier les types de fichiers et à fournir des informations aux utilisateurs.
LOGNAME – Le nom de l'utilisateur actuel.
MAIL – Définit le chemin d'accès à la boîte aux lettres de l'utilisateur actuel.
LANG – Définit le paramètre de langue (locale) actuel.
PATH – Spécifie une liste de répertoires à parcourir lors de l'exécution des commandes. Lors de l'exécution d'une commande, le système recherche dans ces répertoires et utilise le premier exécutable trouvé.
_ – La dernière commande exécutée.
Variables de shell courantes :
BASH_VERSION – La version de bash, dans un format lisible par l'homme.
BASH_VERSINFO – La version de bash, dans un format lisible par la machine.
BASHOPTS – La liste des options qui ont été utilisées lors de l'exécution de bash. Utile pour déterminer si l'environnement du shell fonctionnera comme prévu.
COLUMNS – Le nombre de colonnes de large utilisé pour afficher la sortie à l'écran.
DIRSTACK – La pile de répertoires disponibles avec les commandes pushd et popd.
HOSTNAME – Le nom d'hôte de l'ordinateur à ce moment précis.
HISTFILESIZE – Nombre de lignes d'historique des commandes stockées dans un fichier.
HISTSIZE – Nombre de lignes d'historique des commandes autorisées en mémoire.
IFS – Le séparateur de champs interne pour séparer les entrées sur la ligne de commande. Il s'agit d'un espace par défaut.
SHELLOPTS-Utilisé pour définir les options du shell.
UID-L'UID de l'utilisateur actuel.
PS1– La définition de l'invite de commande principale. Elle est utilisée pour définir l'apparence de votre invite lorsque vous démarrez une session shell.
PS2 – Déclare des invites secondaires lorsqu'une commande s'étend sur plusieurs lignes.
Définition des commandes d'environnement et de shell
Tout d'abord, comme expliqué précédemment, nous conserverons les noms de variables entièrement en majuscules. Ensuite, nous verrons comment créer des variables de shell. Enfin, nous créerons des variables d'environnement.
Création de variables de shell
Commençons par le traditionnel hello world. Saisissez ce qui suit dans votre terminal :
|
1 |
MY_FIRST_VAR=’Hello World!’ |
Les guillemets sont utilisés parce que la variable contient un espace. Notez que nous avons utilisé des guillemets simples car le point d'exclamation est un caractère spécial et doit être échappé ou placé entre guillemets simples. À présent, vous avez créé votre première variable de shell. Elle n'est disponible que dans la session shell actuelle. Les variables de shell ne sont pas disponibles pour les processus et shells enfants. Vous pouvez l'afficher dans le terminal en utilisant la commande set avec grep :

Ou affichez la valeur à l'aide d'echo, en la référençant à l'aide du signe $ et du nom de la variable :

Si vous essayez de l'afficher à l'aide de printenv, aucune sortie ne s'affichera. Cela vous permet de confirmer qu'il ne s'agit pas d'une variable d'environnement :

Création de variables d'environnement
La variable de shell précédemment créée peut être transformée en variable d'environnement à l'aide de la commande export. Tout d'abord, vous créez une variable de shell. Ensuite, pour créer une variable d'environnement, vous devez utiliser la commande export. Après l'exécution de cette commande, la variable sera disponible pour les shells et processus enfants :
|
1 |
export MY_FIRST_VAR |
Maintenant, si vous testez en utilisant la commande printenv, vous devriez voir la variable et la valeur :

Vous pouvez également créer une variable d'environnement en une seule étape en utilisant la syntaxe :
|
1 |
export MY_SECOND_VAR='Ceci est ma deuxième variable' |
Les variables d'environnement ne sont transmises qu'aux shells enfants et non au parent. Cela permet d'éviter que les processus enfants n'affectent l'environnement du programme qui les a appelés.
Rétrograder et supprimer des variables
Si vous avez suivi le tutoriel jusqu'à présent, vous avez toujours MY_FIRST_VAR définie comme variable d'environnement. Vous pouvez la retransformer en variable de shell en tapant la commande export avec l'option –n :
|
1 |
export -n MY_FIRST_VAR |
Si vous testez avec printenv, il n'y aura pas de sortie. Cependant, la commande echo l'affichera car il s'agit toujours d'une variable de shell :

Vous pouvez supprimer une variable de shell ou d'environnement à l'aide de la commande unset. Et vous pouvez confirmer qu'elle n'existe plus en utilisant echo. Comme vous pouvez le voir, elle n'affiche aucune sortie :

Définition des variables d'environnement lors de la connexion
De nombreux programmes dépendent de variables d'environnement pour leur exécution. Comme il n'est pas efficace de définir les variables à chaque fois que vous souhaitez exécuter un programme, Linux offre un moyen de les définir et de les enregistrer dans un fichier. De cette façon, elles peuvent être définies automatiquement lors de la connexion. Le shell lit différents fichiers de configuration en fonction de la manière dont la session est démarrée. Ceux-ci sont présentés ci-dessous :
Types de sessions shell et leurs différences
- Session shell de connexion – commence par l'authentification de l'utilisateur. La session est établie lorsque vous vous connectez via SSH ou une session de terminal.
- Session shell sans connexion – commence lorsque vous démarrez un nouveau shell à partir de votre shell authentifié. Vous pouvez démarrer un nouveau shell à l'aide de la commande bash. Aucun identifiant d'authentification n'est requis.
- Session shell interactive – une session shell attachée à une session de terminal.
- Session shell non interactive – une session shell non attachée à une session de terminal – s'exécute en arrière-plan.
Une session est classée comme étant soit de connexion, soit sans connexion, et soit interactive, soit non interactive. Lorsque vous vous connectez et commencez une session shell via SSH, il s'agit d'une session shell de connexion et interactive. Lorsque vous exécutez un script sur le terminal, il s'exécute généralement dans une session sans connexion et non interactive. Une session shell peut également être une combinaison des deux. Alors, quel fichier de configuration est choisi ?
Une session de connexion lit d'abord les fichiers de configuration du répertoire /etc/profile. Deuxièmement, elle vérifie les fichiers de configuration spécifiques de l'utilisateur dans son répertoire personnel. Seul le premier fichier trouvé parmi ~/.bash_profile, ~/.bash_login et ~/.profile est lu, et tous les autres fichiers sont ignorés. Une session sans connexion lira d'abord le fichier /etc/bash.bashrc, suivi de ~/.bashrc. Les sessions non interactives lisent la variable d'environnement appelée BASH_ENV pour obtenir le nom du fichier à utiliser pour définir le nouvel environnement.
Implémentation des variables d'environnement
Lorsque vous définissez vos variables, notez toujours dans quel fichier vous les placez en fonction de notre discussion ci-dessus. Cela offrira de la flexibilité en garantissant que certaines variables ne sont disponibles que dans certaines sessions. Vous ne voulez pas qu'une variable cruciale soit manquante dans une session.
Dans certains cas, nous voulons que la variable existe dans les sessions de connexion et sans connexion. Heureusement, la plupart des distributions Linux ont, par défaut, configuré les configurations de connexion pour lire les configurations sans connexion et les rendre disponibles pour vos processus. Par conséquent, vous pouvez simplement définir vos variables dans les fichiers de configuration sans connexion. Généralement, nous définissons des variables d'environnement spécifiques à l'utilisateur et souhaitons que nos paramètres soient disponibles à la fois dans les sessions shell de connexion et sans connexion. Pour cette raison, nous utiliserons le fichier ~/.bashrc. Nous utiliserons nano pour éditer le fichier. Entrez ce qui suit dans votre terminal pour ouvrir le fichier :
|
1 |
nano ~/.bashrc |
Dans le fichier de configuration ouvert, vous pouvez déjà voir plusieurs variables. Vous pouvez ajouter des variables d'environnement de la même manière que vous le faites en utilisant la ligne de commande. Saisissez simplement la commande :
|
1 |
export KEYNAME=valeur. |
Vous pouvez les ajouter n'importe où dans le fichier - sur une nouvelle ligne, et non à l'intérieur d'une fonction de boucle. Ensuite, enregistrez et fermez le fichier. Toute session de shell ultérieure que vous démarrerez lira à partir du fichier. Si vous souhaitez que le shell actuel lise les paramètres que vous venez d'ajouter sans avoir à le redémarrer, vous pouvez utiliser la commande :
|
1 |
source ~/.bashrc |
Vous devriez ajouter les variables d'environnement à l'échelle du système dans l'un des fichiers suivants : /etc/profile, /etc/bash.bashrc ou /etc/environment.
En résumé
Enfin, vous pouvez maintenant définir des variables de shell et d'environnement et profiter de la grande puissance que ces outils apportent à votre VPS ! Cela présente de nombreux avantages tels que l'automatisation de l'exécution de certains processus, ou la configuration de déploiement automatique qui nécessite des informations d'authentification, la transmission de variables aux processus enfants, et plus encore. Les variables d'environnement vous aident à masquer les données sensibles comme les informations d'authentification des dépôts publics parmi d'autres données. Avec cette base, vous pouvez créer des scripts complexes que vous pouvez exécuter automatiquement via la ligne de commande sans nécessiter d'intervention constante de l'utilisateur.
Bonne programmation !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.