Comment ajouter un répertoire à votre $ PATH sous Linux



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.