Aller au contenu
English
English
Administration Linux medium

Variables d'environnement Linux

55 min de lecture

Le shell conserve des informations dans des variables d'environnement : votre nom d'utilisateur, votre répertoire personnel, la liste des dossiers où il cherche les commandes. Savoir les lire et les modifier est indispensable pour comprendre le comportement du système. Ce guide couvre les variables les plus courantes et les commandes pour les manipuler.

  • Afficher la valeur d'une variable avec echo
  • Lister toutes les variables avec env
  • Créer une variable et la rendre disponible avec export
  • Connaître les variables essentielles : PATH, HOME, USER, SHELL
  • Supprimer une variable avec unset
  • Diagnostiquer le problème « commande introuvable »

Une variable d'environnement est un couple nom=valeur stocké en mémoire par le shell. Chaque programme lancé depuis le terminal hérite de ces variables.

Elles servent à configurer le comportement du système sans modifier de fichier. Par exemple, LANG détermine la langue des messages et PATH indique où chercher les commandes.

La commande echo suivie de $NOM affiche le contenu d'une variable :

Fenêtre de terminal
echo $HOME
Résultat
/home/bob

Le signe $ indique au shell de remplacer le nom par sa valeur. Sans le $, le shell affiche le texte littéral :

Fenêtre de terminal
echo HOME
Résultat
HOME

Voici les variables que vous rencontrerez le plus souvent :

VariableContenuExemple
HOMERépertoire personnel/home/bob
USERNom de l'utilisateur connectébob
SHELLShell de login configuré/bin/bash
PATHListe des dossiers où chercher les commandes/usr/local/bin:/usr/bin:/bin
PWDRépertoire courant/home/bob/projets
LANGLangue et encodagefr_FR.UTF-8
HOSTNAMENom de la machineserveur01

Pour afficher n'importe laquelle :

Fenêtre de terminal
echo $USER
echo $SHELL
echo $LANG

La commande env affiche toutes les variables d'environnement exportées :

Fenêtre de terminal
env

La sortie est longue. Pour chercher une variable précise, combinez avec grep :

Fenêtre de terminal
env | grep PATH
Résultat
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Pour créer une variable, écrivez NOM=valeur sans espaces autour du = :

Fenêtre de terminal
PRENOM="Alice"
echo $PRENOM
Résultat
Alice

Cette règle d'écriture n'a rien d'une convention de style. PRENOM = "Alice" provoque une erreur, parce que le shell lit alors PRENOM comme une commande à exécuter, avec = et "Alice" pour arguments. Le message parle donc d'une commande introuvable et ne mentionne jamais l'affectation. Écrivez toujours NOM=valeur, sans espace d'aucun côté.

Une variable créée avec NOM=valeur n'existe que dans le shell courant. Les programmes lancés depuis ce shell ne la voient pas.

Pour la rendre visible aux programmes enfants, utilisez export :

Fenêtre de terminal
export PRENOM="Alice"

Vérification, lancez un sous-shell et affichez la variable :

Fenêtre de terminal
bash -c 'echo $PRENOM'

Sans export, le résultat est vide. Avec export, la valeur s'affiche.

Vous pouvez créer et exporter en une seule ligne :

Fenêtre de terminal
export PROJET="mon-site"

PATH est la variable la plus importante pour l'exécution des commandes. Elle contient une liste de dossiers séparés par un deux-points, le caractère :. Retenez ce séparateur, il n'est ni l'espace ni la virgule : une valeur écrite avec le mauvais caractère ne produit aucune erreur, elle rend simplement invisibles tous les dossiers de la liste.

Fenêtre de terminal
echo $PATH
Résultat
/usr/local/bin:/usr/bin:/bin

Quand vous tapez une commande comme ls, le shell cherche un fichier nommé ls dans chaque dossier de PATH, dans l'ordre :

  1. Il cherche dans /usr/local/bin/ → pas trouvé
  2. Il cherche dans /usr/bin/ → trouvé ! Il exécute /usr/bin/ls

Vous pouvez vérifier où se trouve une commande avec which :

Fenêtre de terminal
which ls
Résultat
/usr/bin/ls

Pour ajouter temporairement un dossier (par exemple ~/scripts) :

Fenêtre de terminal
export PATH="$HOME/scripts:$PATH"

Ce changement est temporaire : il disparaît à la fermeture du terminal. Pour le rendre permanent, ajoutez la ligne dans ~/.bashrc (voir le guide Personnaliser son shell).

La commande unset supprime une variable :

Fenêtre de terminal
export TEST="bonjour"
echo $TEST
unset TEST
echo $TEST

La dernière ligne n'affiche rien : la variable n'existe plus.

Les pannes liées aux variables ont toutes le même visage : rien ne s'affiche, ou une commande reste introuvable, sans qu'aucun message ne parle de variable. Deux causes couvrent l'essentiel, un dossier absent de PATH et un réglage écrit dans le mauvais fichier de configuration. Le tableau les classe par symptôme, puisque c'est ce que vous observez.

SymptômeCause probableSolution
commande : command not foundLe dossier contenant la commande n'est pas dans $PATHecho $PATH puis export PATH="/chemin/manquant:$PATH"
echo $MA_VAR n'affiche rienVariable non définie ou non exportéeVérifier avec env | grep MA_VAR
Variable perdue après fermeture du terminalVariable non ajoutée dans .bashrcAjouter export MA_VAR="valeur" dans ~/.bashrc
Variable absente en ssh hôte 'commande' alors qu'elle marche en session interactiveElle est déclarée dans ~/.bash_profile, jamais lu dans ce casLa déclarer dans ~/.bashrc : c'est lui que lit une commande distante
~/.bashrc ignoré alors qu'il existeBash s'arrête au premier des trois fichiers de login trouvésVérifier la présence de ~/.bash_profile puis ~/.bash_login : le premier trouvé masque les suivants

Pourquoi une variable disparaît en automatisation

Section intitulée « Pourquoi une variable disparaît en automatisation »

Ce point explique la quasi-totalité des « ma variable marche en SSH interactif et disparaît dans le script », et il contredit le raccourci habituel, « .bash_profile pour les shells de login, .bashrc pour les shells interactifs ».

Une commande distante n'est ni l'un ni l'autre. Mesuré sur AlmaLinux 10 avec des sondes dans les deux fichiers :

Fenêtre de terminal
ssh serveur 'echo "$-"; shopt -q login_shell && echo login || echo non-login'
hBc
non-login

$- ne contient pas de i, donc la session n'est pas interactive, et ce n'est pas non plus un shell de login. Pourtant, seule la sonde de ~/.bashrc s'est déclenchée : bash le lit dans ce cas précis, sur la foi de la variable SSH_CLIENT.

Un corollaire en découle pour l'ordre de lecture. Au login, bash s'arrête au premier fichier trouvé parmi ~/.bash_profile, ~/.bash_login et ~/.profile, et ne lit jamais les autres. Des réglages placés dans ~/.profile alors qu'un ~/.bash_profile existe ne sont donc jamais appliqués, sans le moindre message. | NOM = valeur donne une erreur | Espaces autour du = | Écrire NOM=valeur sans espaces | | Programme enfant ne voit pas la variable | export oublié | Utiliser export NOM=valeur |

Lire un guide sur les variables ne remplace pas le moment où votre propre export survit (ou non) dans un sous-shell. Ce lab vous fait écrire un fichier env.sh qui exporte des variables, en réutilise une dans une autre et ajoute un répertoire en tête de PATH : le tout est vérifié en le chargeant avec source dans un shell neuf.

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Une variable d'environnement est un couple nom=valeur hérité par les programmes enfants.
  • echo $NOM affiche la valeur, env liste toutes les variables exportées.
  • export rend une variable visible aux sous-processus.
  • PATH détermine où le shell cherche les commandes.
  • Les changements sont temporaires sauf si ajoutés dans ~/.bashrc.
  • unset supprime une variable.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens ce site gratuitement, sans publicité, sans profilage et sans compte à créer. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn