Variables d'Environnement Linux
Les variables d'environnement sont des paires clé=valeur disponibles à l'échelle du système, utilisées pour configurer le comportement des applications et de l'OS.
Qu'est-ce qu'une variable d'environnement ?
SHELL=/bin/bash
HOME=/home/alice
USER=alice
PATH=/usr/local/bin:/usr/bin:/bin
DB_PWD=secretpassword
- Clé = nom de la variable (conventionnellement en MAJUSCULES)
- Valeur = données configurables
- Disponibles système-wide — accessibles par toutes les applications et processus
2 cas d'utilisation
1. L'OS stocke les informations de l'environnement
SHELL=/bin/bash # Shell par défaut de l'utilisateur
HOME=/home/alice # Répertoire home de l'utilisateur courant
USER=alice # Nom de l'utilisateur connecté
LANG=fr_FR.UTF-8 # Langue du système
TERM=xterm-256color # Type de terminal
Chaque utilisateur peut personnaliser son environnement (police, shell, éditeur, navigateur...) L'OS stocke ces préférences dans des variables d'environnement.
2. Créer ses propres variables — Données sensibles et configuration
# Mauvaise pratique — credentials dans le code source ❌
mydb = mysql.connector.connect(
host="https://prod-database:5432",
user="mysqluser",
password="secretpassword" # JAMAIS hardcoder des credentials !
)
# Bonne pratique — via variables d'environnement ✅
DB_URL=https://prod-database:5432
DB_USER=mysqluser
DB_PWD=secretpassword
# L'application lit depuis l'environnement (Python)
DB_USER = os.environ.get('DB_USER')
DB_PWD = os.environ.get('DB_PWD')
Avantages des variables d'environnement pour la configuration :
- Sécurité : les credentials ne sont pas dans le code source
- Flexibilité : même code, configurations différentes (dev/test/prod)
- Chaque serveur a ses propres valeurs sans modifier l'application
Afficher les variables d'environnement
printenv # Afficher TOUTES les variables d'environnement
printenv HOME # Afficher la valeur de HOME
printenv PATH # Afficher le PATH
env # Équivalent à printenv (liste toutes les variables)
echo $HOME # Afficher via echo (avec $)
echo $USER
echo $SHELL
Définir des variables d'environnement
Variables temporaires (session courante uniquement)
export MA_VARIABLE="ma valeur"
export DB_PWD="secretpassword"
export PORT=3000
# Vérifier
printenv MA_VARIABLE # → ma valeur
Important : Les variables créées avec
exportsont perdues à la fermeture du terminal ou à la déconnexion.
Variables persistantes (survie à la fermeture)
Pour rendre une variable permanente, la déclarer dans un fichier de configuration du shell :
# Pour l'utilisateur courant — fichier ~/.bashrc (pour Bash)
echo 'export DB_PWD="secretpassword"' >> ~/.bashrc
echo 'export MA_VAR="valeur"' >> ~/.bashrc
# Recharger sans redémarrer le terminal
source ~/.bashrc
# ou
. ~/.bashrc
# Pour tous les utilisateurs du système
sudo vim /etc/environment
# Ajouter : MA_VAR="valeur"
| Fichier | Portée |
|---|---|
~/.bashrc | Utilisateur courant (Bash) |
~/.profile | Utilisateur courant (login shell) |
/etc/environment | Tous les utilisateurs du système |
/etc/profile | Tous les utilisateurs (login shell) |
La variable PATH
PATH est une variable spéciale qui liste les répertoires où Linux cherche les commandes exécutables.
echo $PATH
# → /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Quand vous tapez "docker", Linux cherche dans ces dossiers dans l'ordre
# et exécute le premier "docker" trouvé
Ajouter un répertoire au PATH
# Temporaire
export PATH=$PATH:/opt/mon-logiciel/bin
# Permanent (dans ~/.bashrc)
echo 'export PATH=$PATH:/opt/mon-logiciel/bin' >> ~/.bashrc
source ~/.bashrc
Variables dans les scripts Bash
#!/bin/bash
# Lire une variable d'environnement dans un script
echo "Connexion à : $DB_URL"
echo "Utilisateur : $DB_USER"
# Vérifier si une variable est définie
if [ -z "$DB_PWD" ]
then
echo "Erreur : DB_PWD non défini !"
exit 1
fi
Cas pratique — Application multi-environnement
Serveur DEV Serveur PROD
───────────────────────── ────────────────────────
DB_URL=https://dev-db:5432 DB_URL=https://prod-db:5432
DB_USER=mysql-dev-user DB_USER=mysql-prod-user
DB_PWD=dev_password DB_PWD=prod_password
└──────────────┬──────────────┘
▼
Même code source
(lit via os.environ.get)
Le code est identique. Seules les variables d'environnement changent par serveur. Pas besoin de modifier le code pour déployer sur un autre environnement.
À retenir
- Variable d'environnement = paire
CLÉ=valeurdisponible système-wide- Noms en MAJUSCULES par convention
printenv= afficher les variables ;echo $VAR= afficher une valeurexport MA_VAR="valeur"= définir (temporaire, disparaît à la fermeture)~/.bashrc= rendre une variable persistante pour l'utilisateur/etc/environment= variables persistantes pour tous les utilisateurssource ~/.bashrc= recharger les variables sans redémarrerPATH= liste des répertoires où Linux cherche les commandes- Ne jamais hardcoder des credentials — utiliser des variables d'environnement