Variables d'environnement
Table des matières
- Qu'est-ce qu'une variable d'environnement ?
- Variables communes
- export et persistance
- Fichiers de configuration
- Exercices pratiques
1 - Qu'est-ce qu'une variable d'environnement ?
Définition
Une variable d'environnement est une valeur dynamique qui affecte le comportement des processus.
Utilisation
Les variables d'environnement servent à :
- Configurer des applications
- Stocker des chemins
- Passer des informations sensibles (tokens, clés)
- Personnaliser le comportement du shell
Afficher les variables
# Afficher toutes les variables
env
# ou
printenv
# Afficher une variable spécifique
echo $HOME
echo $PATH
printenv HOME
# Afficher avec détails
env | grep -i path
Créer une variable
# Variable locale (shell courant uniquement)
MA_VARIABLE="valeur"
echo $MA_VARIABLE
# Variable d'environnement (héritée par les processus enfants)
export MA_VARIABLE="valeur"
echo $MA_VARIABLE
🔝 Retour à la table des matières
2 - Variables communes
Variables système
| Variable | Description | Exemple |
|---|---|---|
HOME | Répertoire personnel | /home/john |
USER | Nom d'utilisateur | john |
SHELL | Shell par défaut | /bin/bash |
PATH | Chemins des exécutables | /usr/bin:/bin |
PWD | Répertoire courant | /home/john/projet |
OLDPWD | Répertoire précédent | /home/john |
TERM | Type de terminal | xterm-256color |
LANG | Langue/locale | fr_FR.UTF-8 |
HOSTNAME | Nom de la machine | ubuntu-server |
La variable PATH
PATH définit où le shell cherche les commandes.
# Afficher le PATH
echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Le shell cherche dans l'ordre :
# 1. /usr/local/sbin
# 2. /usr/local/bin
# 3. /usr/sbin
# 4. /usr/bin
# 5. /sbin
# 6. /bin
Ajouter un répertoire au PATH
# Ajouter à la fin du PATH
export PATH="$PATH:/mon/chemin"
# Ajouter au début (prioritaire)
export PATH="/mon/chemin:$PATH"
# Exemple : ajouter ~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
Variables pour les applications
| Variable | Usage |
|---|---|
EDITOR | Éditeur par défaut |
VISUAL | Éditeur visuel |
PAGER | Programme de pagination |
JAVA_HOME | Installation Java |
NODE_ENV | Environnement Node.js |
DATABASE_URL | Connexion base de données |
# Définir l'éditeur par défaut
export EDITOR=vim
export VISUAL=vim
# Configuration application
export DATABASE_URL="postgresql://user:pass@localhost:5432/db"
export NODE_ENV="production"
🔝 Retour à la table des matières
3 - export et persistance
Variable locale vs exportée
# Variable locale (uniquement dans le shell courant)
LOCAL_VAR="local"
# Variable exportée (héritée par les sous-processus)
export EXPORTED_VAR="exported"
# Test
bash -c 'echo "Local: $LOCAL_VAR, Exported: $EXPORTED_VAR"'
# Résultat : Local: , Exported: exported
Supprimer une variable
# Supprimer une variable
unset MA_VARIABLE
# Vérifier
echo $MA_VARIABLE
# (vide)
Persistance des variables
Les variables définies dans le terminal sont temporaires. Pour les rendre permanentes :
🔝 Retour à la table des matières
4 - Fichiers de configuration
Fichiers utilisateur
| Fichier | Quand il est lu |
|---|---|
~/.bashrc | Chaque nouveau terminal interactif |
~/.bash_profile | Connexion (login shell) |
~/.profile | Connexion (si .bash_profile absent) |
~/.bash_logout | Déconnexion |
Fichiers système
| Fichier | Portée |
|---|---|
/etc/environment | Variables système (toutes sessions) |
/etc/profile | Script de login (tous utilisateurs) |
/etc/profile.d/*.sh | Scripts additionnels |
/etc/bash.bashrc | bashrc global |
Modifier ~/.bashrc
# Ouvrir le fichier
nano ~/.bashrc
# Ajouter à la fin :
export EDITOR=vim
export PATH="$HOME/.local/bin:$PATH"
export MY_APP_KEY="secret123"
# Recharger
source ~/.bashrc
# ou
. ~/.bashrc
Modifier /etc/environment (système)
# Ouvrir le fichier
sudo nano /etc/environment
# Format simple (pas de export)
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
Créer un fichier dans /etc/profile.d/
# Créer un fichier personnalisé
sudo nano /etc/profile.d/custom.sh
# Contenu
export COMPANY_NAME="MyCompany"
export APP_ENV="production"
# Rendre exécutable
sudo chmod +x /etc/profile.d/custom.sh
Ordre de chargement (login shell)
Ordre de chargement (non-login)
Pour les variables que vous voulez disponibles partout, ajoutez-les dans ~/.bashrc (utilisateur) ou /etc/environment (système).
🔝 Retour à la table des matières
5 - Exercices pratiques
Exercice 1 : Explorer les variables
# 1. Affichez votre HOME
echo $HOME
# 2. Affichez votre PATH
echo $PATH
# 3. Comptez les répertoires dans PATH
echo $PATH | tr ':' '\n' | wc -l
# 4. Affichez toutes les variables commençant par "L"
env | grep "^L"
Exercice 2 : Créer et exporter
# 1. Créez une variable locale
MESSAGE="Hello"
echo $MESSAGE
# 2. Vérifiez qu'elle n'est pas héritée
bash -c 'echo $MESSAGE'
# 3. Exportez-la
export MESSAGE
# 4. Vérifiez qu'elle est maintenant héritée
bash -c 'echo $MESSAGE'
# 5. Supprimez-la
unset MESSAGE
Exercice 3 : Modifier le PATH
# 1. Créez un dossier pour vos scripts
mkdir -p ~/bin
# 2. Ajoutez-le au PATH temporairement
export PATH="$HOME/bin:$PATH"
# 3. Créez un script de test
echo '#!/bin/bash
echo "Mon script fonctionne !"' > ~/bin/monscript
chmod +x ~/bin/monscript
# 4. Testez
monscript
# 5. Pour le rendre permanent, ajoutez dans ~/.bashrc :
# export PATH="$HOME/bin:$PATH"
Exercice 4 : Configuration permanente
# 1. Ouvrez ~/.bashrc
nano ~/.bashrc
# 2. Ajoutez ces lignes à la fin :
# # Mes variables personnalisées
# export EDITOR=nano
# export MY_PROJECT_DIR="$HOME/projets"
# 3. Sauvegardez et rechargez
source ~/.bashrc
# 4. Vérifiez
echo $EDITOR
echo $MY_PROJECT_DIR
Quiz
Q1. Quelle est la différence entre une variable avec et sans export ?
Réponse
Sans export : variable locale, non héritée par les processus enfants.
Avec export : variable d'environnement, héritée par les processus enfants.
Q2. Où ajouter une variable pour qu'elle soit permanente pour l'utilisateur ?
Réponse
Dans ~/.bashrc (ou ~/.profile pour les login shells)
Q3. Comment recharger ~/.bashrc sans ouvrir un nouveau terminal ?
Réponse
source ~/.bashrc ou . ~/.bashrc
🔝 Retour à la table des matières
Points clés à retenir
- Variables locales = shell courant uniquement
export= héritée par les processus enfantsPATHdéfinit où chercher les commandes~/.bashrc= configuration permanente utilisateur/etc/environment= configuration permanente systèmesource ~/.bashrcpour recharger sans redémarrerunset VARpour supprimer une variable
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Redirections et pipes →