Кіріспе

Көптеген операциялық жүйелерде әрбір іске қосылған процеске сәйкес келетін пайдаланушы анықтаған айнымалы – қоршаған орта айнымалысы. Қоршаған орта айнымалысы – компьютерде іске қосылған процестердің қалай жұмыс істейтініне әсер ететін пайдаланушы анықтаған мән. Қоршаған орта айнымалылары – процесс іске қосылатын ортаның бір бөлігі. Мысалы, іске қосылған процесс TEMP қоршаған орта айнымалысының мәнін сұрап, уақытша файлдарды сақтауға қолайлы жерді анықтай алады, немесе HOME немесе USERPROFILE айнымалысы арқылы процесс іске қосылып жатқан пайдаланушыға тиесілі каталог құрылымын таба алады. Олар 1979 жылы Unix 7 нұсқасымен қазіргі түрінде енгізілді, сондықтан Linux және macOS-ты қоса алғанда, барлық Unix операциялық жүйелерінің түрлері мен нұсқаларында қолданылады. 1982 жылы PC DOS 2.0 нұсқасынан бастап, Microsoft Windows және OS/2 сияқты барлық келесі Microsoft операциялық жүйелері де оларды мүмкіндік ретінде қосты, бірақ синтаксисі, қолданылуы және стандартты айнымалы атаулары шамалы өзгеше.

Дизайн

Барлық Unix және Unix-қа ұқсас жүйелерде, сондай-ақ Windows-та, әр процестің өз жеке орта айнымалылары болады. Көбінесе процесс құрылғанда, ол ата-ана процесінің орындалу ортасын мұра етеді, бірақ ата-ана процесі бала процесті құрғанда жасаған нақты өзгерістерден басқа. API деңгейінде, бұл өзгерістер fork және exec командалары орындалғаннан кейін жасалуы керек. Әйтпесе, bash сияқты командалық қабықшалардан пайдаланушы, env командасы арқылы немесе ENVIRONMENT VARIABLE=VALUE <command> түрінде орта айнымалыларын өзгерте алады. Іске қосылған бағдарлама конфигурация үшін орта айнымалыларының мәндерін пайдалана алады. Shell скрипттері мен пакеттік файлдар орта айнымалыларын қолданады, сондай-ақ кейінірек сілтеме жасау үшін уақытша мәндерді сақтау үшін де қолданылуы мүмкін. Дегенмен, Unix жүйесінде экспортталмаған айнымалылар артықшылыққа ие, себебі олар процесс шегінен тыс жайылып кетпейді. Unix-те скрипт немесе компиляцияланған бағдарламада өзгертілген орта айнымалы тек сол процесске және мүмкін, оның туыс процестеріне ғана әсер етеді. Ата-ана процесіне және басқа байланыссыз процестерге әсер етпейді. Сол сияқты, DOS немесе Windows пакеттік файлында айнымалының мәнін өзгерту немесе жою, COMMAND.COM немесе CMD.EXE жұмыс істеу кезеңінде ғана осы айнымалыны өзгертеді. Unix жүйесінде орта айнымалылары әдетте жүйелік бастапқы скрипттер арқылы жүйе іске қосылғанда инициализацияланады және осылайша жүйедегі барлық басқа процестер мұра етеді. Пайдаланушылар оларды өздері қолданатын командалық қабықтың профиль скриптінде қосып, жиі өзгертеді. Microsoft Windows жүйесінде әр орта айнымалысының бастапқы мәні Windows тіркелімінде сақталады немесе AUTOEXEC.BAT файлында орнатылады. Unix жүйесінде setuid бағдарламасына шақырушы таңдаған орта беріледі, бірақ ол шақырушыдан өзге билікпен жұмыс істейді. Динамикалық байланыстырушы әдетте $LD_LIBRARY_PATH және $LD_PRELOAD орта айнымалыларында көрсетілген орындардан кодты жүктейді және оны процесс билігімен орындайды. Егер setuid бағдарламасы осылай істесе, ол қауіпсіз болмас еді, себебі шақырушы оны кез келген кодты орындауға мәжбүрлей алады және осылайша оның билігін дұрыс пайдаланбауға мүмкіндік береді. Осы себепті libc setuid процесінде бастау кезінде осы орта айнымалыларын жояды. setuid бағдарламалары әдетте белгісіз орта айнымалыларын жойып, басқаларын тексереді немесе оларды дұрыс мәндерге орнатады. Жалпы, орта айнымалыларының жиынтығы ассоциативтік массив ретінде жұмыс істейді, онда кілттер мен мәндер жолдар болып табылады. Екі жолдағы символдардың мағынасы жүйелер арасында өзгеше болуы мүмкін. Тізімдер сияқты дерек құрылымдарын көрсету қажет болғанда, екі нүктелі (Unix және Unix-қа ұқсас жүйелерде) немесе нүктелі-сызық (Windows және DOS жүйелерінде) тізімдерді пайдалану жиі кездеседі.

Синтаксисі

Айнымалыларды скрипттерде де, командалық жолда да пайдалануға болады. Олар әдетте айнымалы атауының алдына немесе айналасына арнайы белгілер қойылып сілтеме жасалады. Қоршаған ортаның айнымалы атауларын әдетте толық үлкен әріптермен жазады. Бағдарламалау кодексарында мұндай жазу, қоршаған ортаның айнымалыларын кодтағы басқа атаулардан ажыратуға көмектеседі. Unix сияқты операциялық жүйелерде қоршаған ортаның айнымалы атаулары әріптердің үлкен-кішкендігіне сезімтал, ал DOS, OS/2 және Windows жүйелерінде сезімтал емес.