Wat is Omgevingsvariabele (environment variable)?

Een van de paren „naam=waarde” die een proces bezit en waarmee het gedrag van een programma van buitenaf wordt ingesteld. Wanneer een proces wordt gestart, erft het kindproces een kopie van de omgevingsvariabelen van de ouder. In de shell worden alleen geëxporteerde variabelen, zoals bij export X=1, omgevingsvariabelen die aan kindprocessen worden doorgegeven; een variabele die alleen een waarde krijgt, wordt alleen binnen die shell gebruikt. Naast PATH (de directory's waarin naar commando's wordt gezocht), HOME (de homedirectory) en LD_LIBRARY_PATH (waar gedeelde bibliotheken worden gezocht) worden ze bijvoorbeeld ook gebruikt om de licentieserver van EDA-tools op te geven. env of printenv somt ze op.

Japanse benaming: 環境変数

“Omgevingsvariabele (environment variable)” komt voor in 5 oefenvragen uit 3 onderwerpen, bijv. Basis van Linux en de opdrachtregel, Linker, loader en uitvoerbare formaten, Basis van webtechnologie.

Vakgebied: Basis van Linux en de opdrachtregel

Nu oefenen: vragen over Omgevingsvariabele (environment variable)

Wat doet de loader van het OS bij het starten van een programma (zoals execve op Linux)?

  1. ADe broncode inlezen, ter plekke compileren en dan uitvoeren
  2. BVolgens de programmaheaders van het uitvoerbare bestand de delen in het geheugen plaatsen, argumenten en dergelijke op de stack klaarzetten en de uitvoering beginnen op het adres van de ingang
  3. CAlle symboolnamen van het uitvoerbare bestand op het scherm tonen en dan uitvoeren
Antwoord en toelichting tonen

Antwoord: B. Volgens de programmaheaders van het uitvoerbare bestand de delen in het geheugen plaatsen, argumenten en dergelijke op de stack klaarzetten en de uitvoering beginnen op het adres van de ingang

De loader leest de header van het uitvoerbare bestand en koppelt de in de programmaheaders beschreven delen (segmenten) met rechten voor lezen, schrijven en uitvoeren aan de virtuele adresruimte. Hij maakt het met 0 gevulde gebied voor BSS en de stack klaar en zet opdrachtregelargumenten en omgevingsvariabelen op de stack. Bij dynamisch linken begint de uitvoering bij de dynamische linker en anders op het adres van de ingang van het uitvoerbare bestand.

Een uitvoerbaar script run.sh in de huidige directory geeft „command not found” als het wordt gestart door „run.sh” te typen, maar wordt wel uitgevoerd als „./run.sh” wordt getypt. Wat is de reden?

  1. Arun.sh heeft geen uitvoerrecht, en alleen met ./ ervoor kan het zonder dat recht worden uitgevoerd
  2. BEen commandonaam zonder slash wordt alleen gezocht in de directory's uit de omgevingsvariabele PATH, die de huidige directory meestal niet bevat
  3. CDe #!/bin/bash op de eerste regel van run.sh (de shebang) wordt alleen gelezen als het met ./ ervoor wordt uitgevoerd
Antwoord en toelichting tonen

Antwoord: B. Een commandonaam zonder slash wordt alleen gezocht in de directory's uit de omgevingsvariabele PATH, die de huidige directory meestal niet bevat

Als de shell een commandonaam zonder slash krijgt, zoekt hij op volgorde in de directory's die, gescheiden door dubbele punten, in de omgevingsvariabele PATH staan (/usr/local/bin:/usr/bin enzovoort), en voert hij uit wat hij vindt. De huidige directory wordt meestal niet in PATH opgenomen, zodat niet per ongeluk een kwaadaardig programma met dezelfde naam wordt uitgevoerd dat ergens anders is neergezet. Een pad met een slash, zoals ./run.sh, voert dat bestand rechtstreeks uit zonder PATH te doorzoeken. De #!/bin/bash op de eerste regel (de shebang) geeft de interpreter op die het script uitvoert, op welke manier het ook wordt gestart.

“Omgevingsvariabele (environment variable)” in de toelichting

Vragen met “Omgevingsvariabele (environment variable)” (5)

  1. Wat doet de loader van het OS bij het starten van een programma (zoals execve op Linux)?
  2. Een uitvoerbaar script run.sh in de huidige directory geeft „command not found” als het wordt gestart door „run.sh” te typen, maar wordt wel uitgevoerd als „./run.sh” wordt getypt. Wat is de reden?
  3. Wat is de combinatie van de uitvoer van de twee bash -c-commando's als de bovenstaande commando's in volgorde worden uitgevoerd?
  4. De regel „30 2 * * 1 /home/alice/backup.sh” is in cron ingesteld. Wanneer wordt backup.sh uitgevoerd?
  5. Bij CGI start de webserver bij elk ontvangen verzoek het programma als een nieuw proces, en het proces eindigt als de verwerking klaar is. Wat is de belangrijkste reden dat FastCGI en de aanpak met applicatieservers veel verzoeken efficiënter kunnen afhandelen dan CGI?

Verwante termen

Shell Loader Stack (stapelgeheugen) Dynamisch linken Dynamische linker Variabele cron Bestandsrechten (permissies) Git grep

Naar de woordenlijst