# Les variables d’environnement sous Linux {{INLINETOC}} Une variable d'environnement est une variable dynamique utilisée par des processus ou des applications afin de définir des chemins ou des raccourcis d'information. Les variables d'environnement sont dynamiques. C'est à dire qu'elles peuvent chacune changer en fonction de divers paramètres que l'utilisateur demande, l'endroit où l'on se trouve sur le serveur, le langage qu'on utilisons ... # Les principales variables ## HOME Cette variable contient le chemin du répertoire d'accueil de l'utilisateur. ## PATH Cette variable contient une liste de répertoire dans lesquels le shell recherche toutes les commandes qui sont exécutées. Si une commande est exécutée et qu'elle ne se trouve dans aucun des répertoires indiqués dans la variable PATH, une erreur sera retournée en indiquant que la commande est introuvable. Si l'on souhaite exécuter une commande qui se trouve dans un répertoire non indiqué dans la variable PATH, il suffit tout simplement de modifier le contenu de la variable. ``` $ PATH=$PATH:/leRepertoireDeMaCommande ``` Pour modifier la variable PATH définitivement, il suffit d'ajouter une ligne au fichier ~/.bashrc : ``` > export PATH=$PATH:/mon_autre_repertoire ``` Ou modifier directement le fichier /etc/environment : ``` > PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/mon_autre_repertoire" ``` Pour exécuter une commande présente dans le répertoire courant, il suffit d'ajouter à la variable PATH la valeur ":." ou ":". ## PWD Cette variable contient le chemin du répertoire courant. ## PS1 Cette variable contient la chaine de caractères correspondant au prompt ($ en règle générale). Pour faire apparaitre la valeur du répertoire courant dans le prompt : ``` $PS1='$PWD$ ' ``` ou ``` $ PS1='\w$ ' ``` Le tableau ci-dessous présente les séquences d'échappement permettant de paramétrer la variable PS1 ^ Séquence échappement ^ Valeur ^ | \u | Nom de l'utilisateur | | \h | Nom de la machine | | \w | Répertoire courant | | \W | Partie terminale du répertoire courant | ## PS2 Cette variable contient la chaine de caractères correspondant au prompt secondaire (> en règle générale). ``` $ echo 'ceci est le début > de ma chaine de texte > et tant que je ne saisi pas > le caractère apostrophe > ça continue > ' ceci est le début de ma chaine de texte et tant que je ne saisi pas le caractère apostrophe ça continue $ ``` ## TERM Cette variable contient le type du terminal de l'utilisateur. ## LOGNAME Cette variable contient le nom de l'utilisateur connecté. # Manipulation des variables d'environnement Dans cette section, nous allons apprendre à voir, définir et supprimer des variables d'environnement sous Linux. ## Consultation des variables d'environnement La commande `set` permet d'obtenir la liste des variables pour le shell courant.. ``` $ set ``` Le soucis avec "set" est que la commande liste aussi les fonctions, la commande `env` permet d'obtenir une sortie plus classique. ``` $ env BASH=/bin/bash HOME=/home/toto HOSTNAME=myhostname PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h$ PS2='> ' PS4='+ ' SHELL=/bin/bash ... ``` Le caractère $ permet d'obtenir la valeur d'une variable : ``` $ echo $BASH /bin/bash ``` On peut également filtrer la sortie de la commande `set` ``` $ set | grep EDITOR EDITOR=/usr/bin/nano ``` ou de la commande `env` ``` $ env | grep EDITOR EDITOR=/usr/bin/nano ``` ou `env` ## Création d'une variable d'environnement On peut facilement créer une variable d'environnement pour le shell en cours avec la commande suivante : ``` $ export DIR_APPLI=/etc/appli ``` On peut vérifier ensuite que la variable est créée : ``` $ echo $DIR_APPLI ``` Cela devrait renvoyer selon l'exemple "/etc/appli". On pourra alors utiliser cette variable dans un fichier de configuration (par exemple). Il est important de savoir que la création d'une variable d'environnement n'est valable que pour la session en cours. Pour rendre cette création permanente, il faut saisir cette même commande dans le fichier "/home/$USER/.bashrc" de l'utilisateur en cours (si l'on veut que la variable ne soit que pour l'utilisateur) ou dans le fichier "/etc/bash.bashrc", pour tous les utilisateurs. ## Suppression d'une variable d'environnement La suppression d'une variable peut se faire avec la commande "unset" qui est faite pour effacer complètement une variable d'environnement (pour la session en cours !) : ``` $ unset $VAR ``` On pourra ensuite vérifier que la variable à été correctement supprimée avec la commande d'affichage des variables d'environnement : ``` $ env ``` Si la variable à juste été définie pour une session, elle sera effacée au prochain redémarrage. # Les fichiers d'environnement Les fichiers d'environnement sont utilisés pour stocker de manière permanente tout le paramétrage de l'environnement de l'utilisateur. Ce sont des scripts shell qui contiennent un ensemble de commandes Linux. Certains scripts sont exécutés uniquement par le shell de connexion et d'autres par un shell ordinaire. Le shell de connexion est lancé immédiatement après l'identification de l'utilisateur. Le shell de connexion exécute en premier le script /etc/profile. Ce script contient le paramétrage commun à tous les utilisateurs. Il recherche ensuite dans le répertoire d'accueil de l'utilisateur un script dont le nom dépend du shell utilisé. ## En sh/ksh Le script de connexion se nomme ~/.profile ## En bash L'un des 3 scripts suivants dans l'ordre : ~/.bash_profile ~/.bash_login ~/.profile En bash, le shell de connexion exécute en premier le script /etc/profile, puis le script ~/.profile et enfin le script ~/.bashrc. C'est dans ce dernier fichier, ~/.bashrc, que l'on peut définir de nouveaux alias, exporter automatiquement de nouvelles variables, paramétrer l'auto-complétion, définir les variables PS1 et PS2, paramétrer le nombre de commandes à historiser, etc etc. Par exemple, en BASH, pour utiliser le programme nano (éditeur de texte) comme éditeur par défaut du programme mutt (client mail en ligne de commande), il suffit d'inscrire dans son fichier ~/.bashrc : ``` export EDITOR=/usr/bin/nano ```