Proměnná prostředí
Proměnná prostředí (anglicky environment variable) je v informatice dynamická proměnná, která je v operačním systému vlastností běžícího procesu. Proměnných prostředí je obvykle více, lze je měnit a jejich obsah může ovlivnit práci běžícího procesu. Proměnné prostředí jsou používány v unixových systémech i v systémech DOS nebo Microsoft Windows, avšak jejich názvy se v jednotlivých systémech liší.
Charakteristika
Proměnné prostředí jsou součástí běhového prostředí, ve kterém proces běží. Proměnné prostředí byly ve své moderní formě představeny v roce 1979 v systému Unix verze 7 (Version 7 Unix) a od té doby jsou součástí všech unixových systémů včetně Linuxu a systému OS X. V roce 1982 firma Microsoft zavedla podporu proměnných prostředí do systému PC DOS 2.0 a od té doby jsou používány ve všech jejích systémech včetně systémů Microsoft Windows.
Proměnná prostředí je nastavena v operačním systému a procesy je přebírají. Při vzniku nového procesu jsou proměnné prostředí děděny od rodičovského procesu do potomka (do nového procesu). Proces vlastní svoje vlastní proměnné prostředí, může zjistit jejich hodnotu, změnit je nebo je zrušit. Proměmnné prostředí mohou obsahovat důležité informace, které je potřeba procesům sdělit. Takže například proměnná TEMP
obsahuje cestu, která určuje vhodné místo pro uložení dočasných souborů nebo proměnná HOME
nebo USERPROFILE
obsahuje cestu k domácímu adresáři uživatele, který proces spustil.
Unixové systémy
Ve všech Unixových systémech má každý proces vlastní sadu proměnných prostředí. Defaultně je nastaveno, že když je vytvořen proces, zdědí stejné prostředí, jako jeho rodičovský proces, až na explicitní změny, které rodičovský proces udělá, když potomka vytvoří. Na úrovni API musí být tyto změny provedeny mezi použitím příkazů fork
a exec
. Při použití příkazového shellu jako je bash, může uživatel změnit proměnné prostředí pro volání jednotlivých příkazů tak, že je nepřímo zavolá pomocí env
nebo ENVIRONMENT_VARIABLE=VALUE
.
Použití
Proměnné prostředí mají různá použití, například:
PATH
– seznam prohledávaných adresářů při spuštění příkazuHOME
– domácí adresář v unixových systémech%UserProfile%
– domácí adresář v systémech řady Windows NTEDITOR
neboVISUAL
– výběr textového editoru (např. pro příkaz crontab, edquota)TERM
– specifikuje typ terminálu či emulátoru terminálu, který počítač používá (např. VT100 nebo hloupý terminál (anglicky dumb terminal))PS1
– specifikuje, jak se zobrazuje nápověda v Bourne shelluMAIL
– používá se k nalezení místa, kde se nachází email uživateleTEMP
– používá se k nalezení adresáře, kam mohou procesy ukládat dočasné soubory
Shellové skripty a dávkové soubory používají proměnné prostředí ke komunikaci s daty a nastavování preferencí pro procesy potomků. Také mohou byt použity k uložení dočasných hodnot pro pozdější použití v shellovém skriptu. V unixu se však pro tyto účely většinou využívají jiné proměnné.
Pokud v Unixu dojde ke změně proměnné prostředí pomocí skriptu nebo kompilovaného programu, tato změna ovlivní pouze samotný proces, případně procesy potomků. Rodičovský proces a ostatní nesouvisející procesy nejsou ovlivněny. Při změně nebo odstranění hodnoty proměnné v dávkovém souboru u MS-DOS, zůstane proměnná pozměněna po dobu, kterou je spuštěn COMMAND.COM
.
V Unixu jsou proměnné prostředí standardně inicalizovány pomocí systémových skriptů během spouštění systému, jsou tedy zděděny všemi ostatními procesy v systému. Uživatel je může rozšířit v profilovém skriptu příkazového shellu, který používá. V systému Microsoft Windows jsou hodnoty proměnných prostředí uloženy v registru Windows nebo nastaveny v systémovém souboru AUTOEXEC.BAT
.
Při spuštění procesu v Unixu, který má nastaven příznak setuid, je seznam proměnných prostředí redukován, protože proces běží s jinými oprávněními, než má volající uživatel. Za běžných okolností nahraje dynamický linker do paměti kód z umístění určených proměnnými prostředí LD_LIBRARY_PATH
a LD_PRELOAD
a teprve pak proces spustí. Kdyby tímto způsobem fungoval i proces s nastaveným atributem setuid, mohlo by dojít k narušení bezpečnosti, protože volající uživatel by mohl zneužít oprávnění, kterými normálně nedisponuje. Z tohoto důvodu standardní knihovna jazyka C při spuštění procesu s příznakem setuid odstraní voláním funkce unset
proměnné prostředí a nastaví je na jiné hodnoty.
Reference
V tomto článku byl použit překlad textu z článku Environment variable na anglické Wikipedii.