Proměnná prostředí
Author
Albert FloresProměnné prostředí jsou v operačních systémech nastavení, kterými lze ovlivňovat fungování spouštěných programů. Na rozdíl od příkazových parametrů, které je nutné uvádět při každém zadání příkazu, se proměnné prostředí nastavují předem, mohou být používány různými programy, a v prostředí, ve kterém byly nastaveny (například v příkazovém okně) i v prostředích z něho odvozených, platí až do provedení příkazu pro jejich změnu nebo zrušení. Proměnné prostředí byly představeny v Unixu, ale jsou používané i v Microsoft Windows a různých verzích DOSu stejně jako ve všech unixových systémech, včetně Linuxu a macOSu.
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. +more V roce 1982 firma Microsoft zavedla podporu proměnných prostředí do systému PC DOS 2. 0, a od té doby jsou dostupné 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). +more Proces vlastní svoje vlastní proměnné prostředí, může zjistit jejich hodnotu, změnit je nebo je zrušit. Proměnné prostředí mohou obsahovat důležité informace, které mohou používat různé programy. Takže například proměnná TEMP obsahuje cestu k adresáři, kam lze ukládat dočasné soubory nebo proměnná HOME (v Microsoft Windows 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í. Při vytváření procesu nový proces implicitně zdědí svého rodičovského procesu, toto prostředí však může rodičovský proces explicitně změnit. +more 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říkazu * HOME - domácí adresář v unixových systémech * %UserProfile% - domácí adresář v systémech řady Windows NT * EDITOR nebo VISUAL - 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ř. +more VT100 nebo hloupý terminál (anglicky dumb terminal)) * PS1 - specifikuje, jak se zobrazuje nápověda v Bourne shellu * MAIL - používá se k nalezení místa, kde se nachází email uživatele * TEMP - 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. +more 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. +more 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ě inicializová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á. +more 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í. +more 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.