Variables d'environnement

Updated 4 Juillet 2019

Variables d'environnement

Variables d'environnement, c'est quoi ?

Une variable d'environnement est un objet nommé qui contient des informations utilisées par une ou plusieurs applications. Certains utilisateurs, en particulier les nouveaux venus sur Linux, pourraient trouver ce comportement quelque peu étrange voire ingérable. Mais c'est faux car, en fait, vous pouvez sans problème ajuster la configuration de logiciels avec des variables d'environnement.

Exemples importants

Le tableau suivant présente quelques variables utilisées par les systèmes Linux. Ci-dessous quelques exemples.

Variable Description
PATH Cette variable contient une liste de répertoires séparés par deux points dans lesquels le système doit chercher les fichiers exécutables. Si vous entrez un nom d'exécutable tel que ls, rc-update ou emerge, qui ne se trouve dans aucun des répertoires listés ici, il ne sera pas exécuté (à moins, bien sûr, que vous n'ayez spécifié le chemin complet, tel que /bin/ls).
ROOTPATH Cette variable a la même fonction que PATH, mais elle ne liste que les répertoires que vous souhaitez voir apparaître lorsque vous entrez une commande en tant que root.
LDPATH Cette variable contient une liste de répertoires séparés par deux points, où l'éditeur de liens dynamiques doit rechercher des bibliothèques.
MANPATH Cette variable contient une liste de répertoires séparés par deux points, dans lesquels la commande man cherchera des pages de documentation "man".
INFODIR Cette variable contient une liste de répertoires séparés par deux points, dans lesquels la commande info cherchera des pages de documentation "info".
PAGER Cette variable contient le chemin d'accès à l'utilitaire qui permet de visualiser le contenu des fichiers page par page, comme less ou more.
EDITOR Cette variable stocke le chemin vers le programme d'édition de fichiers, à savoir vi ou nano.
KDEDIRS Cette variable contient une liste de répertoires contenant des ressources KDE, séparés par deux points.
CLASSPATH Cette variable contient une liste de répertoires séparés par deux points contenant des classes Java.
CONFIG_PROTECT Cette variable contient une liste de répertoires séparés par des espaces, réservés par Portage, de sorte à ne pas être mis à jour.
CONFIG_PROTECT_MASK Cette variable contient une liste de répertoires qui sont exclus de la protection de Portage au moment de la mise à jour, séparés par une espace.

Voir ci-dessous comment ces variables peuvent être définies :

PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:."
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
                /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
                /usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"

Variables globales

/etc/env.d

Pour les définir de manière plus centralisée, Calculate utilise le répertoire /etc/env.d. Il contient un certain nombre de fichiers, par exemple "00basic", "05gcc" et ainsi de suite, qui définissent les variables requises par le paquet désigné dans le nom du fichier.

Par exemple, quand vous installez gcc, son ebuild crée un fichier nommé /etc/env.d/05gcc qui contient les définitions des variables suivantes :

PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"

Dans d'autres distributions, vous devez modifier ou ajouter des définitions de variables d'environnement dans /etc/profile ou ailleurs. Par ailleurs, Calculate facilite la prise en charge et la gestion des variables d'environnement, ce qui vous évite d'avoir à gérer plusieurs fichiers contenant des définitions de variables.

Par exemple, lorsque gcc est mis à jour, /etc/env.d/05gcc l'est aussi, automatiquement.

Cette méthode est non seulement efficace pour Portage, mais aussi utile pour l'utilisateur. Il est possible que vous ayez à définir une variable globale. Prenons l'exemple de http_proxy. Au lieu de jouer avec /etc/profile, vous pouvez simplement créer un fichier ~~99local~ pour y stocker toutes les définitions nécessaires :

/etc/env.d/99local

http_proxy="proxy.server.com:8080"

Avec un même fichier pour toutes vos variables, vous pouvez aisément les visualiser dans leur ensemble.

env-update

Le chemin d'accès PATH est défini dans plusieurs fichiers stockés dans le répertoire /etc/env.d. Ceci n'est pas une erreur : quand vous lancez env-update, les définitions sont fusionnées avant de mettre à jour les variables d'environnement, ce qui permet aux paquets, ainsi qu'aux utilisateurs, de superposer leurs propres valeurs sans interférer avec celles qui existent déjà.

Le script env-update fusionne les valeurs des variables stockées dans les fichiers placés dans /etc/env.d, par ordre alphabétique. Les noms de fichiers doivent commencer par deux chiffres décimaux. Voilà comment fonctionne env-update :

          00basic        99kde-env       99local
      +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

La fusion n'est effectuée que pour les variables suivantes : KDEDIRS, PATH, CLASSPATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH et PRELINK_PATH_MASK. Pour toutes les autres variables, la valeur définie dans le dernier fichier (parmi ceux stockés par ordre alphabétique dans /etc/env.d) est retenue.

Quand vous lancez le script env-update, toutes les variables d'environnement sont créées et placées dans /etc/profile.env (utilisé par /etc/profile). En outre, la valeur LDPATH+ est utilisée pour créer le fichier /etc/ld.so.conf. Ensuite, ldconfig est exécuté pour actualiser le fichier /etc/ld.so.cache utilisé par l'éditeur de liens dynamiques.

Si vous souhaitez que les résultats de l'opération env-update prennent effet immédiatement, exécutez la commande suivante pour actualiser l'environnement :

env-update && source /etc/profile

NB : Cette commande ne met à jour les variables que dans le terminal actuel, les nouvelles instances de terminaux et leurs descendants. Cela signifie que si vous travaillez dans un environnement X11, vous devrez soit taper source /etc/profile dans chaque nouveau terminal, soit redémarrer X pour que tous les nouveaux terminaux adressent les nouvelles variables. Si vous utilisez un gestionnaire de connexion, connectez-vous en tant que root et entrez /etc/init.d/xdm restart. Si ce n'est pas le cas, vous devrez vous déconnecter et vous reconnecter de nouveau pour que X produise des descendants se basant sur les valeurs mises à jour.

Variables définies au niveau local

Variables d'utilisateur

Toutes les variables ne doivent pas forcément être définies au niveau global. Par exemple, l'utilisateur peut vouloir ajouter ~/home/mon_utilisateur/bin~~ et le répertoire de travail actuel (où il se trouve en ce moment) à la variable PATH, mais uniquement à sa variable PATH à lui. Pour définir une variable d'environnement au niveau local, modifiez le fichier ~/.bashrc ou ~/.bash_profile. Exemple d'extension de PATH pour une utilisation locale :

~/.bashrc

#(A colon without further directory entry means the current working directory)
PATH="${PATH}:/home/my_user/bin:"

Votre variable PATH sera actualisée au moment où vous vous déconnectez pour vous reconnecter de nouveau.

Variables de session

Dans certains cas, des restrictions encore plus rigoureuses sont nécessaires. Il se peut que vous ayez besoin de lancer des exécutables dans un répertoire temporaire dédié sans avoir à indiquer le chemin d'accès complet ni à éditer ~/.bashrc.

Dans ce cas, vous pouvez simplement définir le PATH pour la session en cours avec la commande export. Une valeur temporaire sera attribuée à la variable, jusqu'à ce que vous quittiez la session. Exemple de définition d'une variable d'environnement pour une session donnée :

export PATH="${PATH}:/home/my_user/tmp/usr/bin"