Flux rss
Collection CommentÇaMarche.net

[Bash] La variable d'environnement PATH

Bookmark Ajouter aux favoris / Partager
Dernière mise à jour le 14 octobre 2008 à 10:35 par Nilou17
Publié par lami20j

La variable d'environnement PATH




I. Préambule


Sous les systèmes GNU/Linux qu'on le veuille ou non, nous devenons des administrateurs de notre système. De plus en plus, on voit sous GNU/Linux l'apparition d'utilitaires graphiques permettant d'exécuter des tâches d'administration.

Cependant, l'obscure ligne de commande connue sous plusieurs appellations (shell, terminal, console, etc.) reste un utilitaire très puissant et facile à manipuler.

Une fois les bases apprises, vous serez étonné de la facilité d'utilisation de la ligne de commande.

<parenthèse>
L'emploi de la ligne de commande reste beaucoup plus rapide que l'utilisation d'un utilitaire graphique. Si vous comptez le temps de chargement de l'interface, la recherche (physique) de la souris sur votre bureau, et sans compter que par ailleurs vous serez tout de même obligé de faire de la saisie, alors vous vous priverez de quelques avantages que vous offre ladite "ligne de commande", et de ce fait, vous ne bénéficierez ni de la touche tab pour la complétion de commande, ni de l'historique vous permettant de répéter une commande, ni d'alias pour les commandes longues, etc.

L'inconvénient pour le shell sera le fait que vous ne pourrez pas tenir votre tasse de café ou la cigarette dans une main tandis que l'autre sera en train de saisir au clavier.
Avec la souris c'est faisable, jusqu'au moment où vous devrez remplir les zones proposées par votre cher utilitaire graphique.

Mais peut être qu'avec le shell arrêterez-vous de fumer...
Le shell est moins cher que Niquitin, etc.?!

Mais vous êtes toujours sous GNU/Linux et le choix vous appartient.
</parenthèse>

Comme la liberté a un prix, ben, il faut le payer.
Dans le cas des systèmes GNU/Linux le prix à payer est la liberté de lire la documentation disponible sur votre système, voir les pages "man" et la commande "info", pour mieux exploiter votre système.

On peut aussi voir le pages "man" avec le navigateur Konqueror en utilisant l'URL man:/
Sur Internet on trouve des traductions en français pour les pages "man".
www.linux-france.org/article/man-fr/
www.linux-kheops.com/doc/man/manfr/man-html-0.9/
manpagesfr.free.fr/

II. C'est quoi le shell ?


C'est un logiciel qui fait partie du système et qui a le rôle de traiter des commandes ou lignes de commandes entrées au clavier.

Pour voir la liste des shells disponibles sur votre système, consultez le ficher /etc/shells
cat /etc/shells
Un utilisateur sous Linux détient par défaut un shell de connexion.

Consultez le fichier /etc/passwd et vous verrez que le dernier champ est quelque chose du genre /bin/<quelquechose>. Il s'agit de votre shell de connexion.

Pour voir les shells des utilisateurs, on peut utiliser la commande
cat /etc/passwd | cut -d: -f1,7
Pour un utilisateur en particulier, on complétera la commande de cette manière :
cat /etc/passwd | cut -d: -f1,7 | grep utilisateur


Si vous êtes en mode graphique vous pouvez ouvrir un terminal (xterm,gterm,konsole,...) et ensuite écrire vos lignes de commandes.

A savoir que sous GNU/Linux on dispose de 6 consoles virtuelles, dont l'accès depuis l'interface graphique se fait avec les combinaisons de touches suivantes Ctrl+ALT+Fn ou
n
est un chiffre de 1 à 6.

Depuis une console virtuelle, vous pouvez passer dans une autre avec la combinaison ALT+Fn, (avec n de 1 à 6).
Pour revenir en mode graphique depuis une console virtuelle, faites ALT+F7.

Dans un shell, on voit une invite de commande (prompt) du genre :
utilisateur@debian: ~$

Si à la place de $ vous voyez un #, alors sachez que vous êtes connecté en tant que root, à moins que vous n'ayez modifié votre configuration.

L'invite de commande diffère en fonction du système d'exploitation et peut être modifié grâce à une autre variable d'environnement PS1.

III. Définition


Commençons d'abord avec le terme générique de variable.

Une variable, c'est un conteneur mémoire qui stocke une donnée qui pourra changer pendant l'exécution d'un programme.

Donc une variable a un nom et un contenu. Nous n'entrerons pas dans les détails de la programmation pour expliquer le type de variable et leur contenu.

Nous nous contenterons pour l'instant de savoir que la variable dont on parle s'appelle PATH et que son contenu est une chaîne qui contient des chemins de répertoires séparés par deux-points :

Pour afficher le contenu d'une variable dans le shell, vous devez écrire
echo $variable
Dans le cas de la variable PATH, vous devrez écrire
echo $PATH
IMPORTANT! Respectez la casse. GNU/Linux différencie les MAJUSCULES des minuscules.

Pour un affichage plus agréable vous pouvez utiliser la commande
echo $PATH | tr : \\n
Voici d'autres façons pour afficher le contenu de PATH (à titre indicatif, juste pour vous signaler qu'il existe presque toujours, plusieurs alternatives pour arriver à ses fins...).
printenv PATH
env | grep -i PATH | cut -d= -f2
perl -e 'print $ENV{PATH},"\n"'
perl -e '$,="\n" and print split(":",$ENV{PATH}),""'
perl -e '($_=$ENV{PATH})=~s/:|$/\n/g and print'
Bien sûr que la
plus courte est préférable.

IV. Séance de dissection


On a vu que la variable PATH contient une liste de répertoires séparés par deux-points :

Ce sont les répertoires dans lesquels le shell cherche la commande qu'on écrit au clavier.
La recherche se fait dans l'ordre des répertoires contenus dans la variable PATH.

Exemple :
lami20j@debian: ~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/lami20j/bin
Quand on écrit une commande le shell va chercher d'abord dans /usr/local/bin, puis dans /usr/bin, puis dans /usr/bin/X11, puis dans /usr/games et pour finir dans /home/lami20j/bin.
Dès que le shell trouve la commande, alors il stoppe la recherche en exécutant la commande trouvée.

Une commande on peut l'écrire en utilisant :
- son nom
- le chemin absolu ( /bin/cat /etc/passwd )
- le chemin relatif ( on utilise le "." ou ".." en général pour des programmes ou scripts ne se trouvant pas dans PATH)

. c'est le répertoire courant
.. c'est le répertoire parent

En écrivant une commande, on peut se trouver dans plusieurs situations :
1. la commande est unique et se trouve dans un des répertoires
2. la commande n'est pas unique et se trouve dans plusieurs répertoires
3. la commande ne se trouve dans aucun des répertoires

1. Dans le 1er cas, les choses sont simples.
Si vous avez une erreur à l'exécution, c'est sûrement à cause de la syntaxe.
Solution : consulter le manuel de la commande

2. Dans le 2ème cas, les choses ne sont pas non plus compliquées.
Supposons qu'on dispose d'une commande qui se trouve dans /usr/bin et que nous avons installé depuis les sources une version plus récente de la commande dont l'exécutable se trouve dans /usr/local/bin.

Si on appelle la commande par son nom, que se passera-t-il ?

Le shell regarde dans PATH en commençant par le 1er répertoire rencontré.
Dans notre cas, il trouve la commande dans /usr/local/bin donc ce sera /usr/local/bin/prog qui s'exécutera.

En revanche, si on veut tout de même exécuter la commande prog qui se trouve dans /usr/bin, alors il faut utiliser le chemin absolu /usr/bin/prog

3. Le 3ème cas comprend 2 situations

- la commande existe mais ne se trouve dans aucun répertoire de notre PATH
- la commande n'existe pas

Dans les 2 cas, le message d'erreur sera 'command not found'

Mais l'interprétation ne sera pas la même.

Il y a des commandes que seul root peut utiliser.
Solution : connectez vous en root avec su ou su -
linux utiliser la commande su

Il y a des commandes qui se trouvent dans un répertoire qui ne se trouve pas dans votre variable PATH.
Solution: - utiliser le chemin absolu
- ajouter le répertoire à votre PATH

Vous avez créé un script et vous n'arrivez pas à l'exécuter quelque soit le chemin spécifié ?

Solution : - vérifier les droits d'exécution sur le script ( ls -l script )

La commande n'existe pas, en ce cas je suppose que vous savez ce qu'il faut faire. Et si vous ne savez pas, voilà la solution.
Tapez sur les épaules de l'administrateur pour lui demander de vous installer le programme.

On peut chercher l'existence d'une commande en utilisant soit whereis soit which
whereis commande
which -a commande
Dans le cas de which l'option -a nous permet de voir tous les chemins correspondants.
Sans l'option -a ce n'est que le 1er répertoire qui contient la commande qui sera affiché, chose qu'on ne voudra sûrement pas si la commande se trouve dans plusieurs répertoires.

V. Ajouter un répertoire à la variable PATH


- seulement pour la session en cours

Si on veut ajouter par exemple /home/user/mes_prog à la variable PATH, dans le shell écrivez
export PATH=$PATH:/home/user/mes_prog
pour avoir le répertoire en dernier dans PATH.

ou
export PATH=/home/user/mes_prog/:$PATH
pour avoir votre répertoire en premier dans PATH.

Maintenant, vous pouvez utilisez votre programme en écrivant tout simplement son nom.

A la déconnexion PATH reprendra sa valeur par défaut, donc /home/user/mes_prog n'existera plus dans PATH.

- de manière permanente

Si vous voulez configurer PATH de façon permanente, vous devez éditer le fichier de configuration de votre shell de connexion.
Comme le plus souvent c'est le shell BASH qui est utilisé, vous devez éditer votre fichier /home/user/.bashrc.

Pour ça, vous utiliserez un éditeur de texte ou tout simplement une commande pour vous faciliter la tâche.
Eh oui, souvent l'utilisation de la ligne de commande rend les choses bien plus facile que l'utilisation de la souris, surtout dans les tâches d'administration (opinion perso).

Voila la commande
echo 'export PATH=$PATH:/home/user/mes_prog' >> /home/user/.bashrc 
Ainsi à chaque connexion votre PATH contiendra votre répertoire /home/user/prog

Cette opération peut être exécutée par l'utilisateur user vu qu'il s'agit de son environnement.

VI. Et puis...


La variable PATH n'est qu'une variable parmi plusieurs dizaines que contient le shell.

Vous pouvez afficher les variables de votre environnement sans se soucier de leur nom (que peut être vous ne connaissez même pas).

Pour faire ça vous avez à votre disposition plusieurs commandes

printenv
env
set
export
Help pour config fic variable environnement (Résolu) Bonjour, J'ai une Redhat 9.1 je voudrais connaitre les fichiers de config qui concernent les variables environnements des users. pour que lorsque je tape une commande par exemple mkdir , que je n'ai plus à le faire depuis /usr/sbin. ou... www.commentcamarche.net/forum/affich-4684870-help-pour-config-fic-variable-environnement
Comment changer ma variable PATH sur linux Bonjour, je suis debutant sur linux. Je viens d'installer un compilateur GNUARM dans mon dossier personnel Home et je voudrais savoir comment inclure le bin de mon compilateur en permance dans ma variable d'environnement PATH. J'ai essayé avec export... www.commentcamarche.net/forum/affich-4119939-comment-changer-ma-variable-path-sur-linux
[Cygwin] variable d'environnement PATH Bonsoir! Je voudrais éviter de changer la variable PATH à chaque lancement de cygwin, est-ce possible? www.commentcamarche.net/forum/affich-1343408-cygwin-variable-d-environnement-path
[VBA/VB6] Rép. Mes Documents+Variables EnvironnementDans l'explorateur de fichiers, le dossier Mes Documents semble être sur le root, or ce n'est pas le cas. Il est situé dans un sous-répertoire de C:\Documents and Settings. Le hic, c'est que le premier sous-répertoire prend le nom de l'utilisateur et... www.commentcamarche.net/faq/sujet-12901-vba-vb6-rep-mes-documents-variables-environnement
[Shell] Tester une variable numériqueTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à... www.commentcamarche.net/faq/sujet-4605-shell-tester-une-variable-numerique
Environnements graphiques 2DEnvironnements graphiques 2D Enlightenment FVWM - Crystal GNOME KDE Xfce Sur le réseau Contrairement à certaines solutions propriétaires (Windows et Mac), GNU/Linux offre nativement la possibilité de choisir son bureau de travail.... www.commentcamarche.net/faq/sujet-5599-environnements-graphiques-2d
Variable d'environnement PATH (vista)Bonjour, Par erreur, j'ai en voulant installer un programme, j'ai supprimé le path d'orginie de vista. Apparement ca pose quelques problemes... Est ce que quelqu'un sait me donner ce path d'orginie pour que je le remette ? Si la solution n'est pas... www.commentcamarche.net/forum/affich-3019417-variable-d-environnement-path-vista
Configuration de variable d'environnementBonjour, je me suis confronté à un problème de variable d'environnement sur l'installtion de apache ant sous linux. voilà le contenu de mon ficgier de configuration /etc/profile export ANT_HOME=/root/repinstall/apache-ant-1.7.0 export... www.commentcamarche.net/forum/affich-6637363-configuration-de-variable-d-environnement
[script/bash] variable environnement via sshBonjour, alors voici mon problème: Lorsque je me connecte en ssh de mon client à mon serveur, les variables d'environnement définie ne sont pas rechargées. Je m'explique: en tapant env ou ssh IP_Serveur "env" les valeurs retournées sont les mêmes bien... www.commentcamarche.net/forum/affich-3048720-script-bash-variable-environnement-via-ssh
Envoyer ses voeux virtuellement pour respecter l'environnement(Paris - Relax news) - Les Français envoient chaque année des milliers de cartes de voeux avant le passage à la nouvelle année. Ce sont autant de déchets à recycler et autant d'arbres abattus. Pour préserver l'environnement, il existe une solution :... www.commentcamarche.net/actualites/envoyer-ses-voeux-virtuellement-pour-respecter-l-environnement-4338012-actualite.php3
Variables d'environnementVariables d'environnement Une variable d'environnement est une valeur dynamique, chargée en mémoire, pouvant être utilisée par plusieurs processus fonctionnant simultanément. Sur la plupart des systèmes d'exploitation, les emplacement de certaines... www.commentcamarche.net/contents/systemes/variables-environnement.php3
PHP - Les variables d'environnementNotion de variable d'environnement Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du script... www.commentcamarche.net/contents/php/phpenv.php3
CGI - Les variables d'environnementNotion de variable d'environnement Les variables d'environnement sont des données stockées dans des variables du système et permettent aux programmes d'avoir des informations sur son environnement. Dans le cas du programme CGI, l'environnement est... www.commentcamarche.net/contents/cgi/cgienv.php3