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.