Qu'est-ce que Variable d'environnement ?

Chacune des paires « nom=valeur » que possède un processus, utilisées pour configurer de l'extérieur le comportement d'un programme. Quand un processus est lancé, l'enfant hérite d'une copie des variables d'environnement de son parent. Dans le shell, seules les variables exportées, comme avec export X=1, deviennent des variables d'environnement et sont transmises aux processus enfants ; une variable seulement affectée ne sert qu'à l'intérieur de ce shell. Outre PATH (les répertoires où l'on cherche les commandes), HOME (le répertoire personnel) et LD_LIBRARY_PATH (où l'on cherche les bibliothèques partagées), elles servent aussi, par exemple, à indiquer le serveur de licences des outils EDA. env ou printenv en affichent la liste.

Nom japonais: 環境変数

« Variable d'environnement » apparaît dans 8 questions d'entraînement réparties sur 4 thèmes, dont Bases du cloud et des conteneurs, Bases de Linux et de la ligne de commande, Éditeurs de liens, chargeurs et exécutables.

Domaine: Bases de Linux et de la ligne de commande

S'entraîner : questions sur Variable d'environnement

Que fait le chargeur de l'OS au démarrage d'un programme (execve sous Linux notamment) ?

  1. AIl lit le code source, le compile sur place puis l'exécute
  2. BIl dispose chaque partie en mémoire selon les en-têtes de programme de l'exécutable, prépare les arguments sur la pile, etc., et lance l'exécution à l'adresse du point d'entrée
  3. CIl affiche à l'écran tous les noms de symboles de l'exécutable avant de l'exécuter
Afficher la réponse et l'explication

Réponse : B. Il dispose chaque partie en mémoire selon les en-têtes de programme de l'exécutable, prépare les arguments sur la pile, etc., et lance l'exécution à l'adresse du point d'entrée

Le chargeur lit l'en-tête de l'exécutable et projette dans l'espace d'adressage virtuel chaque partie (segment) décrite dans les en-têtes de programme, avec ses droits de lecture, écriture et exécution. Il prépare la zone de zéros du BSS et la pile, et empile les arguments de ligne de commande et les variables d'environnement. Pour un programme à liens dynamiques, il lance l'éditeur de liens dynamique ; sinon, il commence l'exécution à l'adresse du point d'entrée de l'exécutable.

Le script exécutable run.sh, situé dans le répertoire courant, donne « command not found » quand on le lance en tapant « run.sh », mais s'exécute quand on tape « ./run.sh ». Quelle en est la raison ?

  1. Arun.sh n'a pas le droit d'exécution, et c'est seulement avec ./ devant qu'il peut s'exécuter sans ce droit
  2. BUn nom de commande sans barre oblique n'est cherché que dans les répertoires de la variable d'environnement PATH, qui en général ne contient pas le répertoire courant
  3. CLe #!/bin/bash de la première ligne de run.sh (le shebang) n'est lu que lorsqu'on l'exécute avec ./ devant
Afficher la réponse et l'explication

Réponse : B. Un nom de commande sans barre oblique n'est cherché que dans les répertoires de la variable d'environnement PATH, qui en général ne contient pas le répertoire courant

Quand le shell reçoit un nom de commande sans barre oblique, il cherche dans l'ordre les répertoires énumérés, séparés par des deux-points, dans la variable d'environnement PATH (/usr/local/bin:/usr/bin, etc.), et exécute ce qu'il trouve. En général, on ne met pas le répertoire courant dans PATH, pour ne pas exécuter par erreur un programme malveillant portant le même nom et placé ailleurs. Écrire un chemin contenant une barre oblique, comme ./run.sh, exécute directement ce fichier sans chercher dans PATH. Le #!/bin/bash de la première ligne (le shebang) indique l'interpréteur qui exécute le script, quelle que soit la façon de le lancer.

« Variable d'environnement » dans les explications

Questions mentionnant « Variable d'environnement » (8)

  1. Comme ci-dessus, la destination de connexion à la base de données n'est pas écrite dans l'image, mais transmise sous forme de variable d'environnement au démarrage du conteneur. Quel est le principal avantage de cette conception ?
  2. Que fait le chargeur de l'OS au démarrage d'un programme (execve sous Linux notamment) ?
  3. Le script exécutable run.sh, situé dans le répertoire courant, donne « command not found » quand on le lance en tapant « run.sh », mais s'exécute quand on tape « ./run.sh ». Quelle en est la raison ?
  4. Si l'on exécute dans l'ordre les commandes ci-dessus, quelle est la combinaison des sorties des deux commandes bash -c ?
  5. La ligne « 30 2 * * 1 /home/alice/backup.sh » a été enregistrée dans cron. Quand backup.sh est-il exécuté ?
  6. En CGI, le serveur web lance le programme dans un nouveau processus à chaque requête reçue, et le processus se termine à la fin du traitement. Quelle est la principale raison pour laquelle FastCGI et les serveurs d'application traitent beaucoup de requêtes plus efficacement que CGI ?
  7. Le mot de passe d'une base de données est stocké dans un Secret Kubernetes. Quelle description d'un Secret est correcte ?
  8. Une image de conteneur construite par une chaîne CI/CD a été testée dans l'environnement de préproduction (staging) et validée. Quelle est la manière la plus appropriée de mettre cette image en production ?

Termes associés

Conteneur Kubernetes Shell Chargeur (loader) Pile (stack) Argument Éditeur de liens dynamique Point d'entrée Variable cron

Retour au glossaire