Page suivante Page précédente Table des matières

3. Généralités

Tous les processus sous Unix possèdent un environnement. C'est une liste de variables contenant un nom et une valeur, les deux sous la forme de chaînes (pouvant contenir la majorité des caractères). Tous les processus Unix possèdent un processus parent, celui qui les a créés. Les processus fils héritent de l'environnement de leurs parents. Ils peuvent ensuite y faire quelques modifications avant de le passer à leurs propres processus fils.

Une variable importante de l'environnement est la variable PATH qui se présente sous la forme d'une liste de répertoires séparés par le caractère deux-points (':'). Ces répertoires sont parcourus pour rechercher les commandes. Si vous essayez de lancer la commande bidule, tous les répertoires contenus dans PATH seront examinés (dans l'ordre), à la recherche de l'exécutable bidule (un fichier avec le bit exécutable positionné). Si un tel fichier est trouvé, il sera exécuté.

Dans ce document, j'utilise le terme de commande pour un programme exécutable qui est appelé sans indication de son chemin, utilisant donc le mécanisme de PATH.

Sous Linux, même les appels de bas niveau pour lancer des processus (la famille des exec) se basent sur la variable PATH pour trouver les exécutables : vous pouvez donc utiliser le mécanisme de PATH n'importe où, où vous voulez exécuter une commande. Si un appel de exec reçoit le nom d'un fichier qui ne contient pas de '/', il cherchera dans la variable d'environnement PATH. Même si cette variable n'existe pas, les répertoires /bin et /usr/bin seront examinés à la recherche de cette commande.

Pour créer ou modifier l'environnement, on utilisera export avec sh ou setenv avec csh. Par exemple :

 sh:
     export PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.

 csh:
     setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.
Les programmes C peuvent utiliser la fonction setenv() pour modifier l'environnement. Perl, quand à lui, conserve l'environnement dans le tableau associatif %ENV, et vous pouvez donc modifier PATH avec :
    $ENV{PATH}="/bin"
La commande env est le moyen le plus facile pour connaître les variables de l'environnement courant. Elle peut également être utilisée pour les modifier.

Pour trouver plus d'information sur les commandes d'accès à l'environnement, vous pouvez regarder les pages de manuel de environ, execl, setenv, le fichier info env, ainsi que la documentation des shells.

Quand Linux démarre, le premier processus a être lancé est init. C'est un processus particulier car il n'a pas de parent. De plus, il s'agit de l'ancêtre de tous les autres processus. Son environnement restera celui des autres processus tant qu'ils ne le modifieront pas. La plupart le modifieront.

Le programme init lance un groupe de processus spécifiés dans le fichier /etc/inittab. Ces processus travaillent dans un environnement directement hérité de init. Ce sont d'habitude des processus comme getty, le programme qui écrit 'login:' à l'écran. Si vous lancez une connexion PPP ici, vous devez savoir que vous travaillez avec l'environnement de init. L'initialisation du système est souvent effectuée par un script lancé à cet endroit. Dans le cas de la Debian 1.3, il s'agit de /etc/init.d/rc qui est chargé de lancer à son tour, les scripts d'initialisation.

Le système comprend plusieurs démons qui peuvent ou non utiliser l'environnement par défaut. La plupart de ceux-ci sont lancé par les scripts d'initialisation et possèdent donc l'environnement de init.

Quand un utilisateur se connecte, l'environnement est modifié par les paramètres contenus dans les programmes, les scripts d'initialisation communs à tous, et ceux spécifiques à l'utilisateur. C'est assez compliqué et la situation n'est pas complètement satisfaisante. En effet, le comportement est totalement différent suivant que l'utilisateur se connecte à partir du terminal texte, de XDM ou du réseau.


Page suivante Page précédente Table des matières