Зачем нужны переменные окружения

от admin

. что такое переменная среды PATH?

Когда операционная система запускает какую-нибудь программу, она стартует новый процесс и каким-то образом передаёт ему информацию о настройках среды, или окружения (в английском языке используется термин environment). Эта информация состоит из набора переменных, содержащих некоторые значения. Процесс может получить эти значения, обратившись к нужной переменной по имени. Например, чтобы узнать, где находится директория, которую операционная система рекомендует использовать для хранения временных файлов, необходимо получить значение переменной среды TEMP .

Как посмотреть значения переменных среды?

В консоли Windows можно посмотреть значение этой переменной, выполнив команду echo %TEMP% , в консоли PowerShell необходимо для этого выполнить команду echo $Env:TEMP , а в консоли Linux или MacOS – команду echo $TEMP .

Если вы пишете программу на языке программирования Python, значение этой переменной можно получить так:

В языке Java это можно сделать следующим образом:

В языке C# аналогичное действие выглядит следующим образом:

На что влияет переменная среды PATH ?

При помощи переменных среды можно передавать информацию не только запускаемым процессам, но и самой операционной системе. Она тоже читает и использует значения переменных среды, поэтому можно управлять некоторыми аспектами поведения операционной системы, изменяя эти переменные.

Переменная PATH содержит список директорий, в которых операционная система пытается искать исполняемые файлы, если пользователь при запуске не указал явно путь к нужному исполняемому файлу.

Давайте представим себе, что на компьютере с операционной системой Windows установлено две разных версии интерпретатора языка программирования Python. Это можно сделать, если установить их в разные директории, например, C:\Python27 и C:\Python34 . Исполняемый файл для обоих версий называется python.exe .

Для того, чтобы запустить исполняемый файл нужной версии, можно указать полный путь к нему, например, C:\Python34\python.exe :

Но каждый раз указывать полный путь лень, да ещё и помнить его надо.

Альтернатива – добавить в переменную среды PATH путь к директории, где находится этот исполняемый файл, и тогда его можно будет запускать, указывая только имя. А чтобы узнать, где он (по мнению операционной системы) находится, можно использовать команду where в операционной системе Windows либо команду which в операционной системе Linux или MacOS.

Переменная PATH содержит список директорий, в которых операционная система должна искать исполняемые файлы. В качестве разделителя используется точка с запятой (;) в операционной системе Windows и двоеточие (:) в операционных системах Linux и MacOS.

Обратите внимание, что в переменную PATH нужно добавлять не пути к исполняемым файлам, а пути к директориям, где они находятся!

Переменная PATH и программы-утилиты

Не обязательно добавлять в переменную PATH пути ко всем директориям, в которых находятся исполняемые файлы на вашем компьютере. Скорее всего большинство программ вы запускаете “через меню старт”. На этот способ запуска переменная PATH никакого влияния не оказывает. Её важно настроить так, чтобы можно было быстро и удобно запускать программы из консоли.

Например, в эту переменную обычно включается путь к “стандартным” местам, где расположены различные программы-утилиты. В операционной системе Windows это директория C:\Windows\system32 , в операционных системах Linux и MacOS директория /usr/bin .

Именно благодаря этому мы можем, например, в консоли Windows использовать утилиту find для поиска файлов или утилиту telnet для установления удалённого соединения по одноимённому протоколу, просто указывая их имя, а не полный путь c:\Windows\system32\telnet.exe .

Когда у вас появляется новая программа-утилита, возникает вопрос – куда её поместить? С одной стороны, её можно положить в C:\Windows\system32 или /usr/bin . Но если вы не любите “засорять” стандартные директории, тогда сделайте какую-нибудь специальную директорию, складывайте все такие программы в неё, и добавьте путь к этой директории в переменную среды PATH .

Как изменять значения переменных среды?

Пользователям других операционных систем предлагаю погуглить 🙂

Переменную поменял, но эффекта нет. Почему?

Когда вы меняете значение некоторой переменной среды, об этом узнаёт только операционная система. При запуске новых программ она сообщит им новые значения переменных. Но ранее запущенные программы будут продолжать использовать те значения переменных среды, которые были актуальны на момент запуска программы.

Поэтому после изменения переменных среды придётся перезапустить те программы, которым необходимо сообщить новые значения переменных.

Алексей Баранцев

Автор: Алексей Баранцев

Если вам понравилась эта статья, вы можете поделиться ею в социальных сетях (кнопочки ниже), а потом вернуться на главную страницу блога и почитать другие мои статьи.
Ну а если вы не согласны с чем-то или хотите что-нибудь дополнить – оставьте комментарий ниже, может быть это послужит поводом для написания новой интересной статьи.

Environment variables (Русский)

Переменная окружения — именованный объект, содержащий текстовую информацию, которую могут использовать запускаемые программы. Проще говоря, это переменная с именем и значением. Значением такой переменной может быть, например, место размещения исполняемых файлов в системе, имя предпочитаемого текстового редактора или настройки системной локали. Новые в Linux пользователи часто находят такой способ хранения настроек неудобным. Однако переменные окружения позволяют простым и надёжным способом передавать настройки сразу для множества приложений.

Утилиты

Пакет coreutils содержит программы printenv и env. Программа printenv позволяет отобразить список текущих переменных окружения:

Программа env может быть использована для запуска команд с указанием нового значения переменной окружения. В следующем примере будет запущен xterm, для которого переменная окружения EDITOR имеет значение vim . Такой вызов не затронет переменную окружения EDITOR в текущем сеансе терминала.

Встроенная в командную оболочку команда set(1p) позволяет вам устанавливать значения переменных окружения в текущем сеансе терминала, а также отображать имена и значения переменных окружения текущего сеанса.

Чтобы увидеть переменные окружения конкретных процессов, откройте файл /proc/pid/environ , где pid — числовой идентификатор интересующего процесса. Записи в этом файле отделены друг от друга нулевым байтом ( \x0 ), который обычно не виден в терминале. Вы можете использовать, например, sed для отображения переменных окружения процесса в более читабельном формате, заменив нулевые байты на переносы строки: sed ‘s:\x0:\n:g’ /proc/$PID/environ

Установка переменных

На системном уровне

Большинство дистрибутивов Linux советуют изменять или добавлять переменные окружения в /etc/profile или других местах. Имейте в виду, что сразу множество файлов могут содержать переменные окружения и переопределять их, вроде /etc/locale.conf . По сути, любой скрипт может быть использован для этого, однако по принятым в UNIX соглашениям следует использовать для этого только определённые файлы.

Для установки переменных окружения на уровне всей системы можно использовать следующие файлы (каждый со своими ограничениями):

  • /etc/environment используется модулем pam_env. Он не привязан к командным оболочкам, поэтому скрипты или glob-выражения использовать здесь нельзя. Здесь можно указывать только пары имя=значение .
  • /etc/profile устанавливает переменные только в оболочках входа (когда пользователь выполняет вход в систему). В нём можно запускать скрипты и он может использоваться в оболочках, совместимых с Bourne shell.
  • Файлы настроек, специфичные для конкретных командных оболочек — глобальные файлы для вашей командной оболочки, инициализирует переменные и запускает скрипты. Например, Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы Запуска/Завершения.

Ниже приведён пример скрипта, который создаёт функцию для добавления нескольких каталогов (например,

/scripts ) в PATH . Чтобы это сделать, просто поместите код в один из системных файлов инициализации окружения ( /etc/profile или /etc/bash.bashrc ):

На уровне пользователя

Не всегда требуется устанавливать переменные окружения на уровне системы. Например, вы можете добавить ваш каталог /home/пользователь/bin в PATH , однако не хотите, чтобы это затрагивало других пользователей системы. Переменные окружения пользователя можно устанавливать во многих других файлах:

Например, чтобы добавить каталог в PATH , поместите следующее в

Для применения изменений перезайдите в командную оболочку или используйте команду source: $ source

/.bashrc . Это означает, что, например, активируемые через dbus программы вроде Gnome Files не будут использовать их по умолчанию. Смотрите systemd/Пользователь#Переменные окружения.

Графические приложения

Если переменная окружения влияет только на графические приложения, можно ограничить область её применения, установив её только в рамках графического сеанса.

Чтобы установить переменные окружения только для определённого приложения вместо целого сеанса, измените .desktop файл этого приложения. Смотрите Ярлыки приложений#Изменение переменных окружения.

Использование скрипта запуска

Некоторые графические окружения (например, KDE Plasma), поддерживают запуск скриптов при входе: можно использовать их для установки переменных окружения. Пример есть в статье KDE (Русский)#Автозапуск приложений.

Окружение Xorg

Установка переменных окружения для сеанса Xorg зависит от того, каким конкретно способом он запускается:

    Большинство экранных менеджеров выполняют source файла xprofile. и SLiM выполняют xinitrc. выполняет

/.bash_profile для bash или

Хотя конец скрипта зависит от того, какой это файл, а любой расширенный синтаксис зависит от используемой оболочки, базовое использование универсально:

Окружение Wayland

Так как Wayland не использует Xorg-специфичные файлы, GDM и KDE Plasma вместо них загружают пользовательские переменные окружения systemd.

Другие экранные менеджеры (например, SDDM) пока что не поддерживают это. Однако SDDM выполняет source скриптов оболочек входа и для сеансов Wayland тоже.

На уровне сеанса

Иногда разумно установить переменную окружения только для текущего сеанса. Например, если нужно временно запускать исполняемые файлы из определённого каталога, но не хочется вводить абсолютный путь к каждому из них или редактировать настройки командной оболочки на время работы с ними.

В таком случае можно определить переменную PATH в текущем сеансе с помощью команды export. Пока командная оболочка продолжает работать, все запускаемые в ней процессы будут использовать изменённое значение переменной.

С помощью pam_env

PAM-модуль pam_env(8) загружает переменные для прописывания в окружение из этих файлов в указанном порядке: /etc/security/pam_env.conf и /etc/environment .

    Эти файлы считываются перед другими файлами, в частности перед

/etc/environment должен содержать только простые пары вида ПЕРЕМЕННАЯ=значение на отдельных строках, например:

/etc/security/pam_env.conf имеет формат:

@ и @ являются специальными переменными, значение которых берётся из /etc/passwd . Следующий пример показывает, как использовать переменную HOME внутри другой переменной:

Формат также позволяет расширить уже определённые переменные значениями из других переменных с помощью $<ПЕРЕМЕННАЯ> , например:

Пары ПЕРЕМЕННАЯ=значение тоже допускаются, но расширение переменных здесь не поддерживается. Подробнее смотрите pam_env.conf(5) .

Примеры

В этом разделе описываются типовые переменные окружения, используемые в Linux.

Как читать и определять переменные окружения и оболочки на Linux

Как читать и определять переменные окружения и оболочки на Linux главное изображение

В этой статье будет описано взаимодействие с окружением, а также чтение и установка переменных окружения и оболочки напрямую и через конфигурационные файлы. Все дальнейшие действия должны быть релевантны на любой системе Linux.

Введение

Когда происходит взаимодействие через сессию оболочки, имеется множество информации, которую консольная оболочка обрабатывает для определения своего поведения и доступа к сторонним ресурсам. Некоторые из этих настроек находятся в конфигурационных настройках, а другие определены самим пользователем.

Место, в котором оболочка держит пути всех этих настроек, называется окружением. Окружение — это место, которое оболочка определяет каждый раз, когда запускается сессия. В ней заключены переменные, созданные свойствами системы.

Как работает окружение и его переменные

Окружение обеспечивает набор переменных, через которые оболочка может получать или определять настройки, и пропускать их через дочерние процессы. Различные системные и пользовательские файлы могут обращаться к окружению.

Окружение реализовано как строка, состоящая из пары ключ-значение. Если определяется несколько значений, то они последовательно разделены знаком двоеточия. Каждая пара будет выглядеть как:

Если значение содержит пробелы, тогда используют кавычки

Ключами в данных примерах являются переменные. Они могут быть одним из двух типов: переменной окружения и переменной оболочки.

Переменные окружения это переменные, определенные для текущей оболочки — они наследуются любым потомком оболочки и запущенного процесса. Эти переменные используются, чтобы пропускать информацию в процессы, которые образуются от самой оболочки.

Переменные оболочки это переменные, которые содержатся исключительно в оболочке, где они были определены или установлены. Они часто используются для хранения путей, например, как текущая рабочая директория.

По правилам — эти типы переменных определяются, используя заглавные символы. Эта особенность помогает пользователям определять контекст употребления переменных.

Вывод переменных оболочки и окружения

Каждая сессия оболочки хранит пути своих собственных переменных и переменных окружения. Их достигнуть можно разными способами.

Можно распечатать список всех переменных окружения используя env или printenv . По умолчанию они должны делать все то же самое:

Как правило, этот вывод довольно типичен для обоих команд. Различия между ними в функциональности. Например, в printenv можно запрашивать значения определенной переменной.

С другой стороны env позволяет изменять окружение, указывая определение переменной. Например:

Дочерние процессы, как правило, наследуют переменные окружения от родительского процесса, и это дает возможность переписывать значения или добавлять дополнительные переменные для потомков.

Если посмотреть на вывод команды printenv , то там есть несколько переменных окружения, которые установлены через нашу файловую систему и процессов без нашего ввода.

Это были переменные окружения, но выглядят как переменные консольной оболочки.

Существует команда set , которую можно использовать для отображения. Если ввести set без дополнительных параметров, будет выводиться список всех переменных консольной оболочки, переменные окружения, локальные переменные и функции оболочки:

Вывод этой команды довольно огромен. Для удобства работы с этими переменными можно использовать пейджеры more или less .

В принципе, отсутствует особая необходимость знать все функции, определенные для bash . Поэтому — можно очистить вывод, указав, что set должен проводить операции в режиме POSIX , которые опускают отображение функций консольной оболочки. Это можно выполнить в дочерней оболочке, чтобы наше текущее окружение оставалось прежним:

Возникнет список всех определенных переменных окружения и оболочки.

Можно попробовать сравнить этот вывод с выводом команд env или printenv , тем самым получив список только переменных оболочки. Возможно, вывод будет довольно кривым:

Отображение будет до сих пор включать несколько переменных окружения, в связи с тем фактом, что set команда выводит значения в кавычках, в то время как команды printenv и env показывают значения, опуская их.

Все это должно давать правильное понимание переменных окружения и оболочки.

Эти переменные используются для всех необходимых вещей. Они обеспечивают альтернативный способ определения постоянных значений для сессии — между процессами, тем самым избегая изменений в файле.

Общие переменные окружения и консольной оболочки

Некоторые переменные окружения и оболочки очень полезны и к ним часто обращаются. Здесь перечислены общие переменные окружения, которые зачастую используются:

SHELL: отображает путь к оболочке, которая занимается интерпретацией тех или иных команд, которые вводит пользователь. Как правило, по умолчанию, это будет интерпретатор bash , но возможно и применение других значений, которые можно указать.

TERM: указывает тип терминала, который эмулируется, когда запускается консольная оболочка. Могут эмулироваться различные терминалы для необходимых операционных требований.

USER: имя текущего пользователя оболочки.

PWD: переменная отображает значение текущей рабочей директории.

OLDPWD: предыдущая рабочая директория. Оболочка держит эту переменную для обратного переключения, когда запускается команда cd — .

LS_COLORS: определяет цвет кодов, которые используются для вывода команды ls . Чтобы различать типы файлов и директорий.

MAIL: отображает электронную почту текущего пользователя.

PATH: список директорий, которые будет проверять система, когда будет идти обращение к той или иной команде. Когда пользователь вводит команду, система смотрит указанные директории, в последовательном порядке.

LANG: текущий язык и локализационные настройки, включая кодировку символов.

HOME: текущая домашняя директория пользователя.

_: отображает вывод последней запущенной команды.

В дополнение к этим переменным окружения, имеются некоторые переменные оболочки, которые также будут часто встречаться:

BASHOPTS: список опций, которые используются при запуске bash . Это может быть полезно для выяснения, каким конкретно способом будет оперировать консольная оболочка.

BASH_VERSION: отображает конкретную версию bash .

BASH_VERSINFO: мажорная версия bash .

COLUMNS: число колон, используемых для отображения вывода в оболочке.

DIRSTACK: директории, которые доступны для команд pushd и popd .

HISTFILESIZE: количество линий, хранящиеся в файле истории набранных команд.

HISTSIZE: количество линий, которые можно хранить в памяти.

HOSTNAME: имя компьютера системы на данный момент.

IFS: внутренний разделитель поля в командной строке. По умолчанию — это пробел.

PS1: строка приглашения на ввод. Эта переменная используется для того, чтобы определить, как будет выглядеть эта строка. Еще есть вторая строка PS2 которая используется, когда команда многострочная.

SHELLOPTS: опции оболочки, которые можно определять с помощью команды set .

UID: идентификатор текущего пользователя.

Установка переменных окружения и оболочки

Для лучшего понимания различий между двумя видами переменных и представления синтаксиса их определения, мы покажем примеры этого процесса.

Создание переменной оболочки

Определение этой переменной будет происходить в пределах текущей сессии консольной оболочки.

Кавычки здесь используются, поскольку значение переменной содержит пробел. В дальнейшем будут использоваться одинарные кавычки — это позволит сделать так, что особые знаки в bash будут правильно отображаться.

Определенная выше переменная теперь доступна в текущей сессии, но в дочернем процессе она будет отсутствовать. Увидеть ее можно при помощи команды grep на вывод set :

Если запустить команду exit , тогда оболочка выходит на родительскую сессию, в которой уже определена данная работающая переменная. Также можно убедиться в отсутствии данной переменной в окружении, сделав ту же проверку:

Чтобы получить значение той или иной переменной, используется следующая конструкция:

Команда echo делает вывод введенной строки как аргумента. Но, в данном случае применяется знак $ , в совокупности с ключом переменной, который возвращает ее значение.

Создание переменной окружения

Чтобы обернуть созданную переменную оболочки в переменную окружения, можно ее экспортировать:

Если создать новую дочернюю сессию, то можно увидеть, что в ней также существует эта переменная:

Дочерний процесс принял переменную, созданную предыдущей сессией. Также можно попробовать определить переменную в текущем процессе и проверить ее наличие в родительском:

Переменные окружения проходят только в дочерние процессы. Переменная NEW_VAR была определена в дочернем окружении переменных. Она была бы также доступна любым другим дочерним сессиям от этой текущей. Вернувшись обратно — в основную сессию, — через команду exit , предыдущее окружение вместе с этой переменной было стерто.

Отвязка переменный

На данный момент переменная TEST_VAR находится в окружении. По необходимости можно делать отвязку переменных.

Теперь, если посмотреть в окружение, то удаленная переменная там будет отсутствовать.

При этом она до сих пор существует в переменной оболочки:

Если возникает потребность окончательно сделать отвязку переменной из оболочки и окружения, то можно применить команду unset :

Проверить результат команды можно с помощью echo :

Отсутствует какое-либо возвращаемое значение, потому что переменная была отвязана.

Установка переменных окружения по логину

Как упоминалось выше, множество программ используют переменные окружения, чтобы решать, как конкретно производить операции. И вместо того, чтобы каждый раз делать вручную определение всех переменных, лучше определять переменные автоматически.

На самом деле, это более сложная проблема, чем кажется сперва, поскольку различные конфигурационные файлы, которые bash читает при запуске — и это зависит от того, как все запущено.

Читать:
Выберите число модуль которого наименьший

Различие между логин, не-логин, интерактивной и не-интерактивной сессией оболочки

Bash оболочка читает различные конфигурационные файлы в зависимости от того, какая сессия запущена.

Логин-сессия оболочки запускается по аутентификации пользователя. Если пользователь входит в сессию терминала или через SSH и аутентифицируется, тогда эта сессия оболочки будет определена как логин-оболочка.

Если начинается новая сессия bash-оболочки в пределах аутентифицированной сессии, подобно вызову команды bash из консоли, тогда такая оболочка определяется без логина и сразу запускается.

Помимо этих типов сессий, существуют интерактивный и не-интерактивный подход. Первый прикрепляется к терминалу, второй же — наоборот.

Таким образом сессии оболочки могут различаться по этим двум типам.

Обычная сессия, начинающаяся с SSH, обычно является интерактивной оболочкой с логином. Скрипты, запускающиеся из командной строки, обычно являют собой не-интерактивной и не-логин оболочкой. Терминальная сессия может быть составлена из любых комбинаций этих двух свойств.

В независимости от того, какая сессия определена как логин или не-логин, существуют некоторые заявления, по которым происходит инициализация сессии оболочки.

Логин сессия при запуске в первую очередь будет читать конфигурационные заявления из файла /etc/profile . Затем она будет смотреть данные в первом конфигурационном файле и пользовательской домашней директории, чтобы получить особые настройки пользователя.

Читаются исключительно файлы, которые располагаются в

В не-логин сессии оболочка читает файл /etc/bash.bashrc и пользовательский

/.bashrc файл для построения своего окружения.

Не-интерактивные оболочки читают переменную окружения под названием BASH_ENV и читают указанный файл, чтобы определить новое окружение.

Реализация переменных окружения

Как можно увидеть выше, существуют различные отдельные файлы для настроек.

Это обеспечивает гибкость, которая может помочь в особых ситуациях, где будут необходимы конкретные настройки для логин и не-логин оболочки. Хотя, обычно, настройки одинаковы в обоих ситуациях.

Большинство Linux-дистрибутивов производят конфигурацию файлов к источнику не-залогиненых конфигурационных файлов. Это значит, что можно определять окружение переменных внутри них. И они будут прочитаны в обоих случаях.

Обычно в конфигурациях указываются особые переменные окружения для пользовательских нужд. Эти настройки указываются в

Внутри этого файла будет уже содержаться определенные данные. Большинство из определений нужны для настройки bash-опций, которые мало связаны с окружением переменных. Переменные внутри файла устанавливаются так же, как и в командной оболочке:

Любое новое окружение переменных может быть добавленно в этот файл. Желательно добавлять новые данные в конец файла — это позволит быстрее их найти в случае, если нужно что-либо изменить. При следующем запуске оболочки, после изменения этого файла, указанные переменные будут прочитаны и пропущены в окружение оболочки. Возможно также и текущую сессию обновить, прочитав файл, введя следующую команду:

Если необходимо установить системные переменные, то можно добавить их в /etc/profile , /etc/bash.bashrc или /etc/environment .

Заключение

Переменные окружения и оболочки всегда представляются в сессиях оболочки и могут быть довольно полезными. Они являются интересным способом установки конфигурационных деталей родительских процессов для их дочерних, а также позволяют удобно производить настройку через внешние файлы.

Существуют различные сценарии, по которым необходимо читать окружение на системе. Эти инструменты и приемы должны дать хорошее основание для создания этих изменений и корректное их использование.

Переменные среды

Переменные средыПеременные среды́ (ударение на «Ы») – специальные текстовые переменные в операционной системе, которые хранят, как правило, определённые настройки или системные пути. Также сущность имеет альтернативное название – «переменная окружения» (англ. «environment variable»).

Переменные среды в основном создаются сценариями оболочки операционной системы или самим пользователем. В Windows переменные окружения хранятся в реестре, а управляются через специальную оснастку в разделе «Свойства системы». Как и любая классическая переменная, переменная среды состоит из короткого названия, по которому к ней производится доступ, и значения, которое используется в различных операциях.

Большинство переменных окружения Windows хранят в себе адреса различных системных папок, к которым можно получить быстрый доступ из командной строки, сценария, штатного Проводника или любого продвинутого файлового менеджера. Зная хотя бы часть системных переменных и создавая собственные, Вы можете значительно автоматизировать работу с файлами на Вашем ПК. И наша статья расскажет как именно.

Что такое переменные окружения Windows

Что такое переменные окружения Windows

Хотите быстро открывать любые нужные Вам папки, запускать Командную строку из любой директории или создавать автоматические сценарии для перемещения файлов? Тогда Вам просто необходимо знать, что такое переменные среды!

Сегодняшняя статья, думаю, будет интересна, в первую очередь, продвинутым пользователям Windows. Хотя, в принципе, знать о предмете разговора не помешает никому. Речь идёт о такой сущности операционной системы как переменные средЫ (ударение на последнем слоге).

Исполняемой средой в Windows является оболочка Командной строки (CMD.EXE). Соответственно переменные эти будут работать в первую очередь в консоли. Однако, поскольку Командная строка поддерживается на уровне системы всеми штатными средствами Windows, переменные окружения будут также отлично работать, например, в Проводнике, в Планировщике заданий или в любых BAT-файлах. Это даёт широкий простор для их применения в сфере автоматизации рутинных процессов при работе с файлами.

Общие данные о переменных окружения

Переменные среды чаще всего разделяют на системные и локальные. Системные могут, в свою очередь, быть встроенными в Windows изначально (имеют наивысший приоритет) или добавлены различными установленными программами. Такие переменные доступны из любой учётной записи и хранятся в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

Локальные переменные среды тоже могут создаваться программно, однако, часто их создают сами пользователи вручную. Такие переменные доступны только в рамках активной в данный момент учётной записи пользователя, а в реестре хранятся в ветках HKEY_CURRENT_USER\Environment и HKEY_CURRENT_USER\Volatile Environment.

Физически переменная окружения являет собой строковый или мультистроковый параметр реестра. Имя его одновременно является именем переменной, а значение, соответственно, её содержимым. В качестве содержимого может выступать любая текстовая информация, команды, пути к папкам или даже ссылки на другие переменные. В последнем случае имя переменной, на которую ссылаются, обрамляется с двух сторон символами «%»:

Переменные среды в реестре

Кстати, вышеупомянутый способ обрамления имени переменной среды знаками процента используется для вызова её значения в окружении Windows. Например, если в Командной строке Вы хотите вывести текущую дату, Вы можете воспользоваться командой ECHO и переменной DATE в формате: «echo %date%» (без кавычек). Значения переменных можно произвольно комбинировать с любым текстом или значениями других переменных, при условии, что Вы их имена тоже заключите в конструкцию «%. %»:

Переменные среды в Командной строке

Думаю, общее представление о том, что такое переменные среды у Вас уже есть, поэтому давайте углубимся в их изучение и рассмотрим более подробно.

Переменные среды Windows

Смотреть существующие переменные среды, как мы уже выяснили, можно в реестре. Однако, это не совсем удобно, поскольку они раскиданы по нескольким веткам. Гораздо проще ознакомиться с полным списком доступных переменных окружения через Командную строку. Для этого вызовите её (WIN+R – cmd – Enter) и введите команду SET без каких-либо дополнительных параметров:

Список переменных среды в Командной строке

Стоит сказать, что список здесь немного неполный, поскольку не содержит ряда встроенных системных переменных, вроде DATE, TIME, RANDOM и т.п. Начнём, пожалуй, с них.

Системные переменные среды
Переменная Типичное значение Назначение
APPDATA C:\Documents and Settings\%UserName%\Application Data или C:\Users\%UserName%\AppData\Roaming (Windows 7 и выше) Хранит путь к папке с данными установленных программ.
CMDEXTVERSION число Выдаёт версию расширений обработчика команд (Command Processor Extensions).
COMMONPROGRAMFILES Обычно: %ProgramFiles%\Common Files Хранит путь к каталогу Common Files.
COMMONPROGRAMFILES(x86) Обычно: %ProgramFiles(x86)%\Common Files Хранит путь к 32-битной версии каталога Common Files в 64-битных системах.
COMPUTERNAME Текст Хранит имя Вашего компьютера, используемое для идентификации в сетях.
COMSPEC C:\Windows\system32\cmd.exe Содержит путь к файлу запуска Командной строки. При вводе переменной в адресной строке Проводника запускает консоль из текущей папки.
DATE Текущая дата Выдаёт полную текущую дату в формате, заданном в настройках Даты и времени.
ERRORLEVEL Число или 0 Хранит числовой код ошибки произошедшей в последней использованной команде. При отсутствии ошибок выдаёт 0.
HOMEDRIVE C:, D:, E: или иные буквы Выдаёт букву диска, на котором хранится профиль пользователя.
HOMEPATH Обычно: \Users\%USERNAME% Выдаёт путь до каталога с профилем пользователя.
HOMESHARE Путь, если есть Если задана, хранит путь до общей папки в каталоге с профилем пользователя.
LOCALAPPDATA Обычно: C:\Users\%UserName%\AppData\Local Хранит путь до папки с локальными данными установленных программ.
NUMBER_OF_PROCESSORS Число Отображает количество ядер процессора в системе.
OS Текст Отображает название архитектуры Вашей версии Windows (чаще всего Windows_NT для систем старше Windows 2000).
PATH Ряд путей Хранит (через точку с запятой) список путей к различным папкам с исполняемыми файлами системных и прочих приложений.
PATHEXT Расширения файлов (.COM; .EXE; .BAT и т.д.) Хранит (через точку с запятой) список расширений файлов, которые воспринимаются системой как исполняемые.
PROCESSOR_ARCHITECTURE Текст Выдаёт код архитектуры процессора, установленного в системе (например, AMD64).
PROCESSOR_IDENTIFIER Текст Выдаёт код архитектуры процессора, а также ряд дополнительных сведений о нём (модельный ряд, версия модели и т.п.).
PROCESSOR_LEVEL Число Выдаёт код уровня архитектуры процессора (модельный ряд).
PROCESSOR_REVISION Число Выдаёт номер ревизии процессора.
PROGRAMDATA Обычно: C:\ProgramData\ Хранит путь до каталога с данными установленных программ.
PROGRAMFILES Обычно: C:\Program Files\ Хранит путь до каталога установки программ по умолчанию.
PROGRAMFILES(x86) Обычно: C:\Program Files (x86)\ Хранит путь до каталога установки 32-битных программ в 64-битной Windows по умолчанию.
PUBLIC Обычно: C:\Users\Public\ Хранит путь до общего каталога системы (папка «Общие»).
RANDOM Число от 0 до 32767 Выдаёт случайное число от 0 до 32767.
SAFEBOOT_OPTION Текст Существует только в режиме Безопасной загрузки и хранит код текущего режима работы (например, в режиме загрузки «с поддержкой командной строки» – Minimal или «с поддержкой сетевых драйверов» – Network).
SYSTEMDRIVE C:, D:, E: или иные буквы Хранит букву диска, на котором установлена система (обычно совпадает с %HOMEDRIVE%).
TEMP и TMP Обычно: C:\Users\%USERNAME%\AppData\Local\Temp\ Хранит путь к временной папке пользователя. Переменная является одновременно и системной и пользовательской для обеспечения доступа к папкам из-под других учётных записей.
TIME Текущее время Выдаёт текущее время в формате: часы:минуты:секунды.миллисекунды.
WINDIR Обычно: C:\Windows\ Хранит путь до системного каталога Windows.
Локальные переменные среды

Если системные переменные окружения доступны всегда по всей системе, то локальные работают только в рамках конкретной учётной записи пользователя. Их количество может быть значительным, а состав отличаться даже для разных пользователей одного и того же ПК. Однако, есть ряд переменных, которые обычно присутствуют везде.

Переменная Типичное значение Назначение
ALLUSERSPROFILE Обычно: C:\All Users (до Windows XP) или C:\Program Data (Windows 7 и выше) Хранит путь к папке с данными установленных программ.
CD Путь Хранит путь к текущей активной директории, в которой исполняются команды.
CLIENTNAME Текст (если существует) Если задана, хранит имя компьютера, заданное в настройках текущего пользователя.
CMDCMDLINE Текст Выдаёт полную команду (с параметрами), которая была использована для последнего запуска Командной строки.
LOGONSERVER Текст Хранит имя контроллера домена текущего пользователя.
PROMPT Обычно: $P$G Выдаёт параметры командной строки для текущего интерпретатора.
SESSIONNAME Обычно: Console Выдаёт название типа текущей сессии Командной строки. При запуске с локального ПК имеет значение «Console». При удалённом вызове – «RDP-Tcp#<номер сеанса>».
USERDOMAIN Текст Хранит имя домена (компьютера), в котором работает пользователь.
USERNAME Текст Хранит имя учётной записи активного пользователя.
USERPROFILE Обычно: C:\Users\%USERNAME% Выдаёт путь до каталога с профилем пользователя.

Создание и правка переменных среды

Как видим, переменных окружения уже изначально существует довольно много. Однако, это не значит, что Вы будете их использовать все и должны помнить наизусть. Более того, на практике Вам может недоставать каких-нибудь значений и Вы, возможно, захотите создать собственные переменные окружения. Благо, что в Windows для этого есть, как минимум, три штатных способа!

Создание переменных среды в Редакторе реестра

Как мы уже говорили, переменные среды хранятся в реестре Windows. Соответственно, там же мы их можем создавать и править. Это не самый правильный способ, но, тем не менее, такая возможность есть.

Чтобы создать, к примеру, локальную переменную окружения откройте Редактор реестра (WIN+R – regedit – Enter) и в ветке HKEY_CURRENT_USER\Environment создайте новый параметр расширяемого строкового, строкового или мультистрокового типа с нужным именем и значением. К примеру, создадим переменную MYNAME со значением «Руслан»:

Переменная среды в Редакторе реестра

Чтобы переменная стала доступна в системе нужно либо перезагрузить Windows, либо только сам Проводник. Последнее можно довольно просто сделать при помощи Диспетчера задач (CTRL+SHIFT+ESC). Достаточно только найти процесс «Проводник» (или explorer.exe) и перезапустить его (либо, в более ранних версиях Windows, снять задачу и создать её заново):

Перезапуск Проводника

После перезапуска оболочки Windows добавленная переменная будет доступна во всех системных компонентах. Проверить же доступность можно, как всегда, в Командной строке через команду ECHO (echo %myname%).

Создание переменных среды в Командной строке

Если Вы уже привыкли к работе в консоли Windows, то создавать переменные среды Вы сможете и прямо в ней. Для создания и правки переменных в Командной строке используется уже знакомая нам команда SET. Только, если для вывода списка переменных мы использовали её без каких-либо параметров, то теперь нам потребуется дополнить команду именем переменной и её значением. Например, создать переменную MYSURNAME со значением «Тертышный» можно так: SET MYSURNAME=Тертышный:

Создание переменной окружения в консоли

Запись переменной среды в реестр из консоли

Проверить доступность переменной можно не только уже знакомой командой ECHO но и при помощи всё той же SET с указанием имени переменной: SET MYSURNAME. Если же Вы к предыдущей команде припишите знак » ct2″>

Создание переменных среды через Свойства системы

Наиболее безопасным и удобным для простого пользователя, на мой взгляд, является работа с переменными среды через одноимённую оснастку. Чтобы получить к ней доступ вызовите «Свойства системы» (контекстное меню значка «Компьютер» – «Свойства»), перейдите на вкладку «Дополнительно» и нажмите кнопку «Переменные среды» в самом низу:

Оснастка Переменные среды

В открывшемся окне можно управлять некоторыми уже существующими системными и локальными переменными окружения, а также создавать новые. В принципе, здесь ничего сложного нет – всё весьма наглядно. Для создания новой переменной достаточно заполнить всего два поля с её именем и значением. Как и в случае с добавлением переменной через реестр, здесь также требуется перезапуск среды для полноценной работы.

Примеры использования переменных среды

Наконец-то мы разобрались (надеюсь :)) с принципами создания и изменения переменных среды и сейчас рассмотрим несколько практических примеров их применения. Скажу сразу, что применений Вы можете придумать сами большое множество. А, если Вы понимаете синтаксис BAT-файлов, то возможности перед Вами откроются весьма обширные.

Одной из самых полезных системных переменных окружения, на мой взгляд, является %COMSPEC%. Если взглянуть на её значение, то мы увидим, что она запускает Командную строку. Однако, если Вы введёте данную переменную в адресной строке открытой в данный момент папки, то консоль автоматически откроется из этой директории. Такой «фокус» очень удобен, если Вы работаете с консольными приложениями и не хотите каждый раз вводить вручную адрес папки с исполняемыми файлами:

Системная переменная COMSPEC

Часто при работе с консолью требуется получить путь или имя рабочей папки. Чтобы не вводить его, опять же, вручную, намного удобнее воспользоваться системной переменной среды %CD%. Данная переменная, как мы знаем, хранит путь активной в данный момент директории.

Переменные, хранящие в своём значении пути, довольно удобно использовать для быстрого перехода к нужным папкам в том же Проводнике. Например, чтобы открыть директорию временных файлов пользователя достаточно ввести в адресную строку %TMP%, а для доступа к папке Windows%WINDIR% и нажать Enter. Здесь можете создать и свои переменные, например, %DWNLD% для открытия папки загрузок, %DSK% для Рабочего стола и т.п.

Рассмотрим популярную практическую задачу, использующую вышеупомянутый тип переменных – очистка каталога с временными файлами. Как мы знаем, часто различные программы не «убирают» за собой «мусор». В результате этого директория временных файлов медленно но верно увеличивается в объёме. Если Вам хочется автоматизировать её очистку, создайте BAT-файл следующего содержания:

Первая команда удалит каталог временных файлов со всеми подпапками, не спрашивая Вашего подтверждения. Вторая же заново создаст его. Стоит, однако, заметить, что, если Вы запустите такой «батник» во время работы системы, то папка TEMP полностью может и не удалиться, поскольку в ней могут находится ресурсы, используемые активными программами. В принципе, это не смертельно, но консоль выдаст ошибки.

Если же хотите чтобы всё прошло безупречно, лучше запускать очистку при старте Windows, закинув BAT-файл в папку «Автозагрузка» (путь обычно: %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup). Таким образом очистка будет происходить автоматом при каждом запуске системы и не будет стопориться активными процессами, поскольку они ещё не запущены.

В ряде случаев полезной бывает и переменная %RANDOM%. По умолчанию она генерирует случайное число от 0 до 32767. Однако, диапазон можно ограничить приписав после переменной конструкцию » %% число», где «число» – максимальная нужная величина диапазона. Например, получить число от 0 до 10 можно так: «ECHO %RANDOM% %% 11» (в диапазоне всего 11 чисел, включая 0). Немного «заморочившись» можно даже написать простенькую игру «Угадай число» в виде следующего BAT-файла:

SET /a GUESS=%RANDOM% %% 101

SET /p «try=Ваше число: «

if «%try%»==»» goto begin

if %try% LSS %GUESS% (echo Загаданное число больше.& goto begin)

if %try% GTR %GUESS% (echo Загаданное число меньше.& goto begin)

if %try%==%GUESS% echo Вы угадали!& pause

Вышеприведённый код реализует игру на угадывание числа от 0 до 100, которое получается как раз из системной переменной окружения %RANDOM%. Для нормального отображения кириллицы набор команд нужно сохранить в виде BAT-файла с кодировкой OEM 866 или DOS (в разных Блокнотах она обозначена по-разному). Быстро запустить его на выполнение можно из любой папки при помощи вышеупомянутого способа с использованием переменной %COMSPEC% и ввода имени BAT-файла:

Игра Угадай число в Командной строке

Выводы

Несмотря не то, что переменные среды в большинстве случаев используют лишь системные администраторы и программисты, они могут здорово пригодиться и простым пользователям! Зная всего несколько из них и умея создавать собственные, Вы без особых проблем сможете, как минимум, получать быстрый доступ к любым нужным папкам.

Если же Ваш интерес будет большим, нежели просто попробовать, что это такое, то Вы можете пойти дальше и писать уже собственные пакетные файлы, автоматизирующие процессы удаления, перемещения и создания файлов с нужными Вам данными. И, пускай Командная строка не так функциональна как, скажем, консоль Linux bash, в умелых руках она может творить буквально чудеса! Не верите? Попробуйте сами!

Похожие статьи