Aller au contenu principal

Variables d'environnement


Table des matières

  1. Qu'est-ce qu'une variable d'environnement ?
  2. Variables communes
  3. export et persistance
  4. Fichiers de configuration
  5. 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

VariableDescriptionExemple
HOMERépertoire personnel/home/john
USERNom d'utilisateurjohn
SHELLShell par défaut/bin/bash
PATHChemins des exécutables/usr/bin:/bin
PWDRépertoire courant/home/john/projet
OLDPWDRépertoire précédent/home/john
TERMType de terminalxterm-256color
LANGLangue/localefr_FR.UTF-8
HOSTNAMENom de la machineubuntu-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

VariableUsage
EDITORÉditeur par défaut
VISUALÉditeur visuel
PAGERProgramme de pagination
JAVA_HOMEInstallation Java
NODE_ENVEnvironnement Node.js
DATABASE_URLConnexion 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

FichierQuand il est lu
~/.bashrcChaque nouveau terminal interactif
~/.bash_profileConnexion (login shell)
~/.profileConnexion (si .bash_profile absent)
~/.bash_logoutDéconnexion

Fichiers système

FichierPortée
/etc/environmentVariables système (toutes sessions)
/etc/profileScript de login (tous utilisateurs)
/etc/profile.d/*.shScripts additionnels
/etc/bash.bashrcbashrc 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)

astuce

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 enfants
  • PATH définit où chercher les commandes
  • ~/.bashrc = configuration permanente utilisateur
  • /etc/environment = configuration permanente système
  • source ~/.bashrc pour recharger sans redémarrer
  • unset VAR pour supprimer une variable

🔝 Retour à la table des matières


← Chapitre précédent | Chapitre suivant : Redirections et pipes →