Votre IP: 38.107.179.244 
  
 
Google
 
Accueil e-mail Linux
Linux
Perl
Perl
C
Langage C
Dico
Dictionnaire
Biblio liens
Bibliothèque de liens
Index articles
Index articles
 

Date création : 10-07-2006 00:00:00
Date de la dernière modification : 05-01-2008 22:17:35
Linux  Vous êtes dans : GNU/Linux Tutoriels / Shell Bash

La variable d'environnement PATH



I. Préambule table de matières

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 repé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 ? table de matières

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 ce 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 modifier 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 table de matières

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 table de matières

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 :

$ 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 s'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éer 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 table de matières

- 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 utiliser 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'adminstration(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... table de matières

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

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

Pour faire ça vous avez à votre dispostion plusieurs commandes

printenv
env
set
export


Création : octobre 2007  © Tous droits réservés 2007 linux-perl-c
Valid HTML 4.01 TransitionalValid CSS