La variable d’environnement $PATH
opère discrètement en arrière-plan de votre système Linux. Bien qu’elle influence votre expérience utilisateur de manière subtile, elle demeure un élément crucial et transparent du système. Nous allons explorer son rôle et comment vous pouvez la modifier pour l’adapter à vos besoins.
Qu’est-ce que $PATH
et Comment Fonctionne-t-il ?
Chaque fois que vous entrez une commande dans le terminal et appuyez sur Entrée, un processus complexe se déclenche avant même que l’action ne soit exécutée.
Le shell, généralement Bash sur la plupart des distributions Linux, analyse la ligne de texte saisie. Il identifie les noms de commandes, les options, les redirections et autres éléments. Ensuite, il se charge de localiser les binaires exécutables correspondant à ces commandes et de les lancer avec les paramètres spécifiés.
La première étape pour le shell est de déterminer si un exécutable est concerné. Si la commande fait partie des commandes intégrées du shell (« built-in »), aucune recherche supplémentaire n’est nécessaire.
Les commandes intégrées sont les plus faciles à identifier car elles font partie intégrante du shell, un peu comme des outils toujours à portée de main.
Si, en revanche, la commande requiert un exécutable externe, le système doit le trouver. C’est là que la variable d’environnement $PATH
intervient. Elle contient une liste de chemins où le shell va chercher ces exécutables, et l’ordre dans lequel ces répertoires seront explorés.
Pour savoir si une commande est intégrée au shell, un alias, une fonction, ou un fichier binaire autonome, vous pouvez utiliser la commande type
, comme illustré ci-dessous :
type clear
type cd
Le résultat indiquera que clear
est un fichier binaire trouvé dans /usr/bin
. Il peut y avoir plusieurs versions de clear
, mais c’est celle-ci que le shell utilisera en premier. De son côté, cd
est, sans surprise, une commande intégrée au shell.
Afficher Votre $PATH
Il est simple de consulter votre $PATH
. Utilisez la commande echo
pour afficher le contenu de cette variable :
echo $PATH
Vous verrez une liste de chemins de système de fichiers séparés par des deux-points (:
). Le shell examine ces répertoires de gauche à droite, à la recherche de l’exécutable correspondant à votre commande.
Voici un exemple de chemins qui pourraient être inclus dans votre $PATH
:
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
Il est important de noter que la recherche ne commence pas dans le répertoire courant, mais uniquement dans les répertoires mentionnés dans $PATH
. Si un programme se trouve dans un répertoire qui n’est pas listé, le shell ne pourra pas l’exécuter directement par son nom.
Pour illustrer ce point, nous avons créé un programme nommé rf
. Lorsqu’il est exécuté, rf
affiche le chemin de son emplacement d’exécution. La première version de rf
se trouve dans /usr/local/bin
, et une version plus récente dans /dave/work
. Pour identifier la version que le shell utiliserait par défaut, nous utilisons la commande :
which rf
Le shell indique que la version trouvée se trouve dans /usr/local/bin
, car ce répertoire figure dans notre $PATH
.
Lançons la commande rf
:
rf
La version 1.0 de rf
est exécutée, confirmant que l’exécutable trouvé est celui attendu. Pour exécuter la version 1.1, il faut indiquer son chemin complet :
./work/rf
Maintenant, le shell a localisé et exécuté la version 1.1. Si nous préférons cette version, nous pourrions la copier dans /usr/local/bin
pour remplacer l’ancienne.
Cependant, imaginez que vous développez une nouvelle version de rf
. Il serait fastidieux de copier chaque mise à jour dans le répertoire système. Une meilleure solution serait d’ajouter temporairement votre répertoire de travail au $PATH
pour que le shell y trouve la nouvelle version lors des tests, sans impacter la version utilisée par d’autres utilisateurs.
Modifier Votre $PATH
Vous pouvez utiliser la commande export
pour ajouter un répertoire à votre $PATH
. Le shell examinera alors ce nouveau répertoire lors de la recherche des exécutables. Il est important de s’assurer que le nouveau répertoire est exploré en premier, avant les répertoires systèmes. Pour ce faire, nous l’ajoutons en début de la liste :
export PATH=/home/dave/work:$PATH
Cette commande définit $PATH
comme étant la concaténation du répertoire /home/dave/work
et de l’ancienne valeur de $PATH
. Remarquez l’absence du signe dollar ($
) devant le premier PATH
, car nous assignons une nouvelle valeur à la variable. Le $
devant le second PATH
signifie que nous utilisons la valeur existante. Les deux-points (:
) séparent les répertoires dans la liste.
Voyons à quoi ressemble le nouveau $PATH
:
echo $PATH
Le répertoire /home/dave/work
est bien ajouté au début. Pour vérifier si notre nouvelle version de rf
est bien celle qui sera exécutée, nous utilisons de nouveau la commande which
:
which rf
Et enfin, l’exécution de rf
:
rf
Le shell a bien trouvé et exécuté la version 1.1 de rf
, située dans /home/dave/work
.
Pour ajouter le répertoire en fin de liste, il suffit d’inverser l’ordre dans la commande :
export PATH=$PATH:/home/dave/work
Rendre les Changements Permanents
Les modifications du $PATH
via la commande export
ne sont valables que pour la session de terminal en cours. Pour les rendre permanentes, il faut les enregistrer dans un fichier de configuration.
En plaçant la commande export
dans votre fichier .bashrc
, le $PATH
sera mis à jour à chaque nouvelle ouverture de terminal (sessions interactives). Dans le passé, on utilisait plutôt le fichier .profile
pour les sessions de connexion, mais nous avons constaté que la commande dans .bashrc
fonctionne également pour ce type de session. Pour couvrir toutes les possibilités, nous allons détailler les deux méthodes.
Pour modifier le fichier .bashrc
, utilisez la commande suivante dans votre répertoire /home
:
gedit .bashrc
L’éditeur gedit
s’ouvre avec le fichier .bashrc
chargé.
Ajoutez la commande d’export à la fin du fichier :
export PATH=/home/dave/work:$PATH
Enregistrez le fichier, puis fermez et rouvrez le terminal, ou utilisez la commande suivante pour prendre en compte les changements immédiatement :
. .bashrc
Vérifiez le $PATH
avec :
echo $PATH
Le répertoire /home/dave/work
est bien ajouté au début.
La procédure pour le fichier .profile
est similaire :
gedit .profile
L’éditeur gedit
s’ouvre avec le fichier .profile
chargé.
Ajoutez la commande d’export, enregistrez, et pour que les changements prennent effet, déconnectez-vous et reconnectez-vous, ou utilisez la commande :
. .profile
Modifier le $PATH
pour Tous les Utilisateurs
Pour modifier le $PATH
pour tous les utilisateurs du système, modifiez le fichier /etc/profile
. Utilisez sudo
pour obtenir les droits nécessaires :
sudo gedit /etc/profile
Ajoutez la commande d’export à la fin du fichier.
Enregistrez et fermez le fichier. Les changements seront pris en compte lors de la prochaine connexion de chaque utilisateur.
Note sur la Sécurité
Soyez vigilant lors de la modification du $PATH
et assurez-vous de ne pas introduire accidentellement un double deux-points (::
), comme ci-dessous :
Si c’est le cas, le répertoire courant serait examiné en premier, ce qui représente un risque de sécurité. Imaginez que vous décompressez une archive contenant un exécutable malveillant nommé unzip
. Si le répertoire courant est le premier endroit où le shell cherche des exécutables, il utiliserait la version malveillante au lieu de la vraie commande unzip
.
Vérifiez donc toujours les modifications de votre $PATH
avec echo $PATH
et assurez-vous qu’elles correspondent à ce que vous attendez.