Variables d'environnement
Quand tu ouvres un terminal, ton shell ne part pas d’une page blanche.
Il dispose d’un ensemble de variables d’environnement.
Ce sont des paires <CLÉ>=<valeur> qui configurent le comportement du shell et
celui des programmes qu’il lance.
Consulter les variables
Section intitulée « Consulter les variables »echo $HOME # /home/lelafontant — ton répertoire personnelecho $USER # lelafontant — ton nom d'utilisateurecho $SHELL # /bin/bash — ton shell actifecho $LANG # en_US.UTF-8 — ta langue et ton encodageenv # Affiche toutes les variables d'environnementprintenv PATH # Affiche la valeur d'une variable spécifiqueLes variables prédéfinies
Section intitulée « Les variables prédéfinies »Avant même que tu tapes quoi que ce soit, le shell dispose déjà de dizaines de variables configurées par le système.
Quelques variables importantes
Section intitulée « Quelques variables importantes »| Variable | Exemple de valeur | Rôle |
|---|---|---|
PATH | /usr/local/bin:/usr/bin:/bin | Répertoires où le shell cherche les commandes |
HOME | /home/lelafontant | Répertoire personnel de l’utilisateur |
USER | lelafontant | Nom de l’utilisateur courant |
SHELL | /bin/bash | Shell par défaut de l’utilisateur |
PWD | /home/lelafontant/projet | Répertoire de travail actuel |
LANG | en_US.UTF-8 | Langue et encodage du système |
HOSTNAME | lelafontant-VMware-Virtual-Platform | Nom de la machine |
echo $HOME # /home/lelafontantecho $USER # lelafontantenv # Affiche TOUTES les variables d'environnementprintenv PATH # Affiche la valeur d'une variable spécifiqueCréer et exporter des variables
Section intitulée « Créer et exporter des variables »Par défaut, une variable définie dans le shell est locale. Elle n’existe que dans la session courante et n’est pas transmise aux programmes que tu lances depuis ce shell.
MA_COULEUR="bleu"echo $MA_COULEUR # bleubash -c 'echo $MA_COULEUR' # (rien) — le sous-shell ne la voit pasLa commande export rend la variable disponible pour tout programme lancé depuis ce shell.
Sans export, la variable reste confinée.
export MA_COULEUR="bleu"bash -c 'echo $MA_COULEUR' # bleu — le sous-shell en hériteQue se passe-t-il en cas de conflit de noms?
Section intitulée « Que se passe-t-il en cas de conflit de noms? »Si tu crées une variable qui porte le même nom qu’une variable prédéfinie, ta valeur écrase l’ancienne sans avertissement :
echo $USER # lelafontantexport USER="intrus"echo $USER # intrus — la valeur originale est perdue dans cette sessionLe shell ne fait aucune distinction entre « variable système » et « variable personnelle » — c’est le même mécanisme.
C’est pourquoi la convention de nommage est si importante : en utilisant des MAJUSCULES pour les variables système
et des noms spécifiques à ton projet pour les tiennes (par exemple APP_PORT plutôt que PORT), tu réduis le risque de collision.
Modifier les variables
Section intitulée « Modifier les variables »Tu seras parfois amené à modifier la valeur de certaines variables, même celle prédéfinie.
Par exemple, tu modifieras souvent PATH pour ajouter des répertoires de commandes.
Tu peux aussi changer EDITOR pour définir ton éditeur préféré, ou LANG pour changer la langue des messages d’erreur.
En faisant simplement un nouvel export ciblant la variable, tu modifies sa valeur:
export EDITOR="vim" # Changer l'éditeur par défautexport LANG="en_US.UTF-8" # Passer les messages en anglaisexport PATH="$PATH:/mon/dossier" # Ajouter un répertoire au PATHSupprimer une variable
Section intitulée « Supprimer une variable »Pour supprimer une variable, même prédéfinie, on utilise la commande unset :
unset EDITOR # Supprime la variable EDITORecho $EDITOR # (rien)La variable disparaît de la session courante et n’est plus transmise aux processus enfants.
La variable PATH
Section intitulée « La variable PATH »PATH est la variable d’environnement la plus importante pour le fonctionnement quotidien du terminal.
Elle contient une liste de répertoires, séparés par :, dans lesquels le shell cherche les commandes que tu tapes.
echo $PATHAjouter un répertoire
Section intitulée « Ajouter un répertoire »Pour ajouter un répertoire au PATH :
export PATH="$PATH:/home/lelafontant/mes-scripts"Cette syntaxe ajoute ton répertoire à la fin du PATH existant.
Si tu le mettais au début (export PATH="/home/lelafontant/mes-scripts:$PATH"),
tes commandes personnelles seraient trouvées avant les commandes système — utile mais potentiellement risqué.
Localiser et inspecter les commandes
Section intitulée « Localiser et inspecter les commandes »Quand tu tapes ls, le shell ne cherche pas dans tout le disque.
Il parcourt les répertoires listés dans PATH, dans l’ordre, et exécute le premier fichier ls qu’il trouve.
which ls # /usr/bin/ls — montre OÙ le shell a trouvé la commandewhich node # /usr/local/bin/nodeCommande which
Section intitulée « Commande which »La commande which trouve le chemin de l’exécutable que le shell utiliserait.
which python3 # /usr/bin/python3which code # /usr/bin/codeCommande type
Section intitulée « Commande type »La commande type est plus complet. Elle distingue les commandes internes, alias et fichiers.
type cd # cd is a shell builtin — commande intégrée au shelltype ls # ls is aliased to 'ls --color=auto' — aliastype node # node is /usr/local/bin/node — fichier exécutableLa différence entre which et type est subtile mais importante:
whichne connaît que les fichiers exécutables dans lePATH.typeconnaît tout ce que le shell sait exécuter : les commandes internes (cd,echo,export), les alias, les fonctions, et les fichiers.
Commande whereis
Section intitulée « Commande whereis »La commande whereis trouve l’exécutable, le code source ET les pages de manuel
whereis nginx # nginx: /usr/sbin/nginx /etc/nginx /usr/share/man/man8/nginx.8.gzPersistance : .bashrc et .profile
Section intitulée « Persistance : .bashrc et .profile »Les variables définies avec export dans le terminal disparaissent quand tu fermes la session. Pour qu’elles soient disponibles à chaque connexion, tu dois les placer dans un fichier de configuration du shell.
| Fichier | Quand il est lu | Usage typique |
|---|---|---|
~/.profile | À la connexion (login shell) | Variables d’environnement globales (PATH, EDITOR) |
~/.bashrc | À chaque ouverture de terminal (interactive shell) | Alias, fonctions, personnalisation du prompt |
# Ajouter Node.js au PATH de façon permanenteecho 'export PATH="$PATH:/home/lelafontant/.npm-global/bin"' >> ~/.bashrc
# Recharger sans fermer le terminalsource ~/.bashrcConfiguration par variables d’environnement
Section intitulée « Configuration par variables d’environnement »En développement web, les variables d’environnement jouent un rôle central dans la configuration des applications. Plutôt que de coder en dur l’adresse de la base de données ou le port du serveur, on les lit depuis l’environnement.
# Lancer un serveur Node.js sur un port personnaliséexport PORT=3000export DB_HOST="localhost"export NODE_ENV="development"node server.js// server.js — lecture des variables en Node.jsconst port = process.env.PORT || 8080;const dbHost = process.env.DB_HOST || 'localhost';const isProd = process.env.NODE_ENV === 'production';Ceci permet d’exécuter correctement le même code dans plusieurs environnements, mais également de le personnaliser en modifiant les variables environnementales.
Cela évite également de rendre public (dans un dépot Github par exemple) des informations sensibles ou privées comme les clés API et les mots de passe.