Разное

Для чего нужны переменные среды: Переменные окружения — Основы командной строки

Содержание

Переменные окружения — Основы командной строки

Напомним, что команда cd без аргументов делает домашнюю директорию пользователя рабочей (working directory). Возникает вопрос, каким образом она узнаёт о том, где находится домашняя директория? Можно предположить, что команда cd каким-то образом обращается к операционной системе и узнаёт у неё эту информацию или смотрит напрямую в конфигурационных файлах. Но ни первого, ни второго она не делает. Эта команда ориентируется на так называемую переменную окружения. Переменные окружения похожи на переменные в языках программирования. Они существуют в рамках запущенной сессии командного интерпретатора, подгружаются туда во время его инициализации (но это не единственный путь их появления). Посмотреть установленные переменные можно командой env (environment). Ниже неполный список этих переменных, которые доступны на одном из серверов Хекслета.

$ env
TERM=xterm-256color
SHELL=/bin/bash
LC_ALL=en_US.
UTF-8 USER=kirill.m HEXLET_VERSION=v2711 PATH=/home/kirill.m/bin:/home/kirill.m/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin PWD=/home/kirill.m LANG=en_US.UTF-8 SHLVL=1 HOME=/home/kirill.m LOGNAME=kirill.m

Формат вывода очень простой: слева от знака равно расположено имя переменной, справа — значение. Вывод команды env в вашем случае будет отличаться не только значениями этих переменных, но и их составом. Например, у вас точно не будет HEXLET_VERSION, но наверняка будет HOME, только с другим значением.

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

HOME. Как она попала в систему — не важно. Без переменной окружения пришлось бы делать одну из двух вещей:

  • При вызове cd каждый раз указывать, где находится домашняя директория. Например, так: cd --home-dir /home/kirill.m. Но такой способ убивает весь смысл быстрого перехода в домашнюю директорию.
  • Договариваться о том, что где-то будет храниться специальный файл с настройками (в том числе домашней директории), которые будут читаться командой cd при каждом запуске.

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

# Для вывода переменной используется echo,
# а перед самой переменной ставится знак $.
$ echo $HOME
/home/kirill.m
# Для установки знак $ не нужен.
# Очень важно чтобы не было пробелов вокруг знака равно
$ HOME=/tmp
$ echo $HOME
/tmp

Теперь проведём эксперимент: попробуем установить HOME и выполнить переход в эту директорию с помощью команды cd, которая должна отправить нас в домашнюю директорию.

# Достаточно выполнить присваивание слева от запускаемой команды
$ HOME=/tmp cd
/tmp$ pwd
/tmp

Команда cd выполнила переход по пути, указанном в переменной HOME. Теперь снова сделаем cd, но не добавляя определение переменной слева.

$ cd
~$ pwd
/home/kirill.m
~$ echo $HOME
/home/kirill.m

В этот раз произошёл переход в настоящую домашнюю директорию. Получается, что вызов HOME=/tmp cd изменил переменную только для того конкретного запуска. И действительно, существует два способа задавать значение переменной окружения: локальный и глобальный. Когда мы указали

HOME=/tmp прямо перед командой cd, то переменная не была изменена для текущей сессии — она была изменена для запущенной команды, в данном случае cd. Такой трюк можно проделывать с любой командой. Другой способ установки изменяет значение глобально, для всей сессии и выполняется так:

~$ export HOME=/tmp
/home/kirill. m
$ cd
~$ pwd
/tmp
~$ echo $HOME
/tmp

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

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

Самостоятельная работа

  • Изучите переменные окружения в вашей локальной среде набрав env

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Переменные окружения в Linux — ИТ Проффи

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

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

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

Но как программы «узнают», где можно найти те или иные ресурсы? Из переменных окружения. Таким же образом происходит запуск и исполнение команд в командной консоли, т. к. благодаря переменной окружения PATH интерпретатор bash (или любая другая командная оболочка) находит программу (исполняемый файл или библиотеку) по указанному в PATH пути. И таким же образом, к примеру, команда man «знает», что запрашиваемые страницы справочных руководств нужно искать согласно значению переменной окружения MANPATH.

Получение информации о переменных окружения

В работе, тесно связанной с системным администрированием довольно часто приходится сталкиваться с такими ситуациями, когда необходимо узнать значения некоторых переменных окружения или же вывести список полный список таковых. Для этой цели существует несколько специализированных утилит. В подавляющем большинстве случаев соответствующие пакеты уже предустановлены в системе. Самыми распространёнными из таких утилит являются printenv, env, а также export. Так, например, для того, чтобы вывести список действующих переменных окружения нужно дать следующую команду:

$ printenv
GS_LIB=/home/john/.fonts
KDE_FULL_SESSION=true
LANG=ru_RU.UTF-8
DISPLAY=:0
OLDPWD=/home/john/builds/wxwidgets
PWD=/home/john
HOME=/home/john
. . .
SHELL=/bin/bash
PATH=/opt/wxwidgets/bin:/home/john/.config/composer/vendor/bin:/usr/bin

В данном выводе представлен сильно сокращённый список переменных окружения для Kubuntu 18. 04. Также следует заметить, что представленный список относится к пользовательскому набору, доступному текущему пользователю. Если выполнить команду printenv от имени суперпользователя (root), то набор переменных будет несколько отличаться.

Как следует из вышеприведённого вывода, для пользователя john используется русская локализация для сеанса (LANG), в качестве командного интерпретатора по-умолчанию используется bash (SHELL), текущим активным каталогом является /home/john (PWD), а переменная PATH модифицирована и содержит в себе (кроме дефолтного /usr/bin) значения /opt/wxwidgets/bin и /home/john/.config/composer/vendor/bin. Значение каждой переменной окружения представляет собой, как можно видеть, набор параметров, разделённых двоеточиями.

Тот же список можно вывести, если дать команду env. Также можно использовать команду export с ключом -p:

$ export -p

Для вывода значения конкретной переменной:

$ echo $PATH

или:

$ printenv | grep PATH

В последнем случае будет выведены все переменные, содержащие фразу «PATH».

Виды переменных окружения

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

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

ИмяОписание
HOMEОпределяет путь к домашнему каталогу текущего пользователя
PWDОпределяет текущий активный каталог
OLDPWDПредыдущий активный каталог
SHELLОпределяет программу-командную оболочку
TERMСодержит имя текущей запущенной программы-терминала
PAGERОпределяет программу для постраничного вывода страниц справочных руководств
EDITORОпределяет программу для редактирования текстовых файлов
VISUALОпределяет программу для редактирования текстовых файлов с расширенными возможностями (vim, emacs)
MAILОпределяет путь к каталогу, в котором должны храниться файлы входящей электронной почты.
BROWSERОпределяет веб-браузер, запускаемый по-умолчанию
ftp_proxy

http_proxy

Определяют, соответственно адреса для прокси-серверов по FTP и HTTP протоколам
MANPATHОпределяет каталог, в котором содержатся подкаталоги, содержащие man-страницы справочных руководств системной справки для команды man
INFODIRОпределяет список каталогов для поиска info-страниц для команды info
TZОпределяет временную зону. Доступные временные зоны хранятся в /usr/share/zoneinfo

Системные переменные

Согласно стандартам Linux переменные окружения для организации системной среды хранятся в нескольких файлах:

  • /etc/bash.bashrc – хранение переменных для командных оболочек;
  • /etc/profile – хранение переменных для интерактивных оболочек;
  • /etc/environment – переменные из этого файла используются модулем

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

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

Для систем, ориентированных на многопользовательский доступ, например на хостинговых площадках, конкретному пользователю полезно иметь возможность гибко настраивать своё собственное рабочее окружение, создавая новые переменные или дополняя их новыми значениями. К примеру, владельцу сайта, для его виртуального хоста, обслуживающего сайт на CMS Drupal, захотелось установить утилиту drush, которая облегчает и ускоряет обслуживание CMS. В этом случае достаточно после локальной установки (в каком-нибудь подкаталоге домашнего каталога) drush, дополнить переменную PATH значением, содержащим путь к утилите drush в файле ~/.bashrc. В результате командная оболочка сможет запускать команду drush для данного пользователя.

По стандартам соглашений для Linux-систем конфигурация для пользовательского окружения должна храниться в следующих файлах:

  • ~/.bashrc – для хранения параметров инициализации выбранной командной оболочки для пользователя;
  • ~/. profile – для инициализации доступных пользователю командных оболочек;
  • ~/.pam_environment – для использования модулем

Временные или переменные сеанса

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

$ source файл_скрипта

Или же устанавливать их вручную командой export.

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

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

ИМЯ=’значение’

Например:

$ SOMEVAR=’somevalue’
$ echo $SOMEVAR
somevalue

Если нужно временно модифицировать переменную PATH, то можно выполнить export:

$ export PATH="${PATH}:/home/john/tmp/usr/bin"

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

$ unset SOMEVAR

Для установки системных или пользовательских переменных окружения следует помещать код с нужными переменными в соответствующие файлы инициализации окружения. Например, чтобы добавить на системном уровне какой-либо пользовательский каталог (пусть это будет ~/bin), нужно один из файлов (/etc/profile  или /etc/bash.bashrc) дополнить следующим кодом:

export PATH=”$HOME/bin:$PATH”

В случае, если нужно выполнить то же самое для пользовательского уровня переменных окружения, то редактировать нужно файл (для локального входа) ~/.bashrc (для удалённого входа, например по SSH –  ~/.bash_profile):

export PATH=”$HOME/.config/composer/vendor/bin:$PATH”

Этот код включит использование командным интерпретатором вышеупомянутой команды drush (предварительно установленной по указанному пути, конечно) для CMS Drupal.

Чтобы можно было видеть сделанные изменения, нужно их зафиксировать:

$ source ~/.bashrc

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Что такое переменные среды Windows

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

При этом подразумевается, что имя переменной неизменно, а значение может изменяться с течением времени. Представим себе, что в переменной username хранится имя текущего пользователя Windows. Когда мы вошли в систему под именем Vasya, то в username оказалось соответствующее значение, однако если мы сменим пользователя на Ivan, то и значение изменится и username будет равно Ivan. Из-за этой возможности изменяться их и называют переменными.

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

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

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

Вот другой пример. Если в адресную строку Проводника ввести %localappdata% и нажать Enter, то произойдет переход в папку, которую установленные программы используют для хранения своих локальных данных. Обычно это C:\Users\имя текущей учетной записи\AppData\Local в которую можно конечно перейти обычным способом, но учитывая, что AppData является скрытой, то данный способ может оказаться быстрее и проще. К тому же можно создавать собственные переменные среды на нужные папки.

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

Переменные среды Windows бывают нескольких видов:

  • Системные переменные — работают в пределах всего компьютера, хранятся в реестре в разделе HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
  • Пользовательские переменные — действуют только для конкретной учетной записи и находятся в реестре по адресу HKCU\Environment
  • Сессионные переменные — существуют только в пределах текущего сеанса окна командной строки.

Настройка переменных среды Windows

В операционной системе имеется заранее предопределенный набор переменных окружения Windows и можно создавать собственные. Для просмотра и управления ими можно воспользоваться графическим интерфейсом. В разных версиях Windows вид окон немного отличается, но принципиально все одинаково. Правда в Windows 10 управление реализовано более удобно, чем в 7 и более старых версиях.

Настройка переменных среды Windows в графическом интерфейсе

Чтобы иметь возможность просматривать и редактировать переменные окружения в Windows 10 нужно выполнить следующие действия.

Щелкнуть правой кнопкой мыши по иконке «Этот компьютер» на рабочем столе и выбрать в меню «Свойства» или набрать в поиске на панели задач «Панель управления». Затем в левом столбце нажать на «Дополнительные параметры системы». В новом окне на вкладке «Дополнительно» есть кнопка «Переменные среды». Альтернативный вариант нажать комбинацию клавиш WIN+R и ввести systempropertiesadvanced.

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

Чтобы создать переменную окружения нажимаем кнопку «Создать» в нужной части окна и вводим ее имя, значение и затем OK. Можно воспользоваться кнопкой «Обзор каталога» чтобы не вводить путь до нужной папки вручную.

Настройка переменных окружения Windows в командной строке

Конечно, есть альтернативный вариант настройки переменных окружения с помощью командной строки Windows. Чтобы cmd правильно понял, о чем идет речь ее нужно обернуть в символы процента вот так, %имя_переменной%. Соответственно, чтобы вывести на экран значение переменной среды команда будет такой: echo %имя_переменной%.

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

Для просмотра всех существующих переменных и их значений введите set без параметров.

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

Чтобы создать пользовательскую переменную среды или отредактировать существующую общий вид команды следующий setx имя значение, использовать кавычки при наличии пробелов. Если переменной с таким именем не существует, то она будет создана, в противном случае значение будет изменено на новое. Для управления системными переменными нужно дополнить команду ключом /m и командная строка должна быть запущена с правами администратора компьютера setx mypc T-800 /m.

Впрочем, у setx имеется недостаток, с ее помощью нельзя удалить существующую переменную, максимум можно присвоить ей пустое значение setx mypc "". Хотя при этом она как бы не существует для cmd, но фактически она продолжает оставаться в реестре. Полноценное удаление возможно непосредственно в реестре или с помощью команд, обеспечивающих работу с ним, а также в графическом интерфейсе.

Для работы с сеансовыми переменными используется команда set. Синтаксис несколько отличается set имя=значение. Здесь уже используется знак равенства вместо пробела, при этом не допускается его наличие в имени. Таким образом изменить переменную окружения с именем temp в текущем окне CMD можно командой: set temp=D:\Archive\Garbage.

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

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

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

Что это такое?¶

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

Важные примеры¶

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

ПеременнаяОписание
PATHВ этой переменной содержится список каталогов, разделенных двоеточиями, в которых система ищет исполняемые файлы. Если вы вводите имя исполняемого файла например ls, rc-update или emerge), который не находится ни в одной из перечисленных здесь каталогов, этот файл не запустится (если, конечно, вы не указали полный путь, например /bin/ls).
ROOTPATHУ этой переменной такое же значение, что и у PATH, но в ней перечисляются только те каталоги, которые нужно просматривать при вводе команды пользователем с правами root.
LDPATHВ этой переменной содержится список каталогов, разделенных двоеточиями, в которых динамический компоновщик ищет библиотеки.
MANPATHВ этой переменной содержится список каталогов, разделенных двоеточиями, в которых команда man ищет страницы справки.
INFODIRВ этой переменной содержится список каталогов, разделенных двоеточиями, в которых команда info ищет info-страницы.
PAGERВ этой переменной содержится путь к программе, позволяющей постранично просматривать содержимое файлов, например less или more.
EDITORВ этой переменной содержится путь к программе, используемой для изменения файлов, например vi или nano.
KDEDIRSВ этой переменной содержится список каталогов, разделенных двоеточиями, в которых находятся ресурсы KDE.
CLASSPATHВ этой переменной содержится список каталогов, разделенных двоеточиями, в которых находятся классы Java.
CONFIG_PROTECTВ этой переменной содержится список каталогов, защищаемых Portage при обновлении, разделенных пробелами.
CONFIG_PROTECT_MASKВ этой переменной содержится список каталогов, исключаемых из защиты Portage при обновлении, разделенных пробелами.

Ниже представлен пример определения всех этих переменных:

PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin" 
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" 
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" 
MANPATH="/usr/share/man:/usr/local/share/man" 
INFODIR="/usr/share/info:/usr/local/share/info" 
PAGER="/usr/bin/less" 
EDITOR="/usr/bin/vim" 
KDEDIRS="/usr" 
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:." 
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
                /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
                /usr/share/texmf/tex/platex/config/ /usr/share/config" 
CONFIG_PROTECT_MASK="/etc/gconf" 

Глобальное определение переменных¶

Каталог /etc/env.

Для того, чтобы определить эти переменные централизованно, в Calculate существует каталог /etc/env.d. В нём находится ряд файлов, например, 00basic, 05gcc и так далее, в которых определяются переменные, необходимые программам, указанным в названии файлов.

Например, при установке gcc ebuild создает файл /etc/env.d/05gcc, содержащий следующие определения переменных:

PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" 
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" 
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man" 
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info" 
CC="gcc" 
CXX="g++" 
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" 

В других дистрибутивах вам предлагается изменять или добавлять определения переменных среды в /etc/profile или где-нибудь еще. Calculate, с другой стороны, облегчает вам поддержку и управление переменными среды, избавляя от необходимости уделять внимание многочисленным файлам, содержащим определения переменных.

Например, когда обновляется gcc, также без малейшего участия пользователя обновляется и /etc/env.d/05gcc.

От этого выигрывает не только Portage, но и вы, пользователь. Иногда от вас может потребоваться глобальная установка какой-нибудь переменной. Возьмем, к примеру, переменную http_proxy. Вместо того, чтобы возиться с /etc/profile, теперь можно просто создать файл (/etc/env.d/99local) и добавить нужные определения туда:

http_proxy="proxy.server.com:8080"

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

Сценарий env-update¶

Переменная PATH определяется в нескольких файлах в /etc/env.d. Нет, нет это не ошибка: при запуске env-update различные определения объединяются перед обновлением переменных среды, позволяя пакетам (или пользователям) добавлять собственные значения переменных, не влияя на уже существующие.

Сценарий env-update объединяет значения переменных из файлов, находящихся в /etc/env.d, в алфавитном порядке. Имена файлов должны начинаться с двух десятичных цифр. Порядок обновления, используемый env-update:

          00basic        99kde-env       99local
      +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin" 

Объединение выполняется не всегда, а только для следующих переменных: KDEDIRS, PATH, CLASSPATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH и PRELINK_PATH_MASK. Для всех остальных переменных используется значение, определенное в последнем из файлов (по алфавиту в каталоге /etc/env.d).

При запуске сценария env-update создаются все переменные среды, и помещаются в /etc/profile.env (используемый файлом /etc/profile). Кроме того, на основе значения LDPATH создается /etc/ld.so. conf. После этого запускается ldconfig, чтобы вновь создать файла /etc/ld.so.cache, используемый динамическим компоновщиком.

Если вы хотите, чтобы результаты работы env-update вступили в силу немедленно, для обновления среды выполните следующую команду:

env-update && source /etc/profile

Примечание: Эта команда обновляет переменные только в текущем терминале, в новых консолях и их потомках. То есть, если вы работаете в X11, потребуется или набирать source /etc/profile в каждом открываемом терминале, или перезапустить X, чтобы все новые терминалы обращались к новым переменным. Если вы используете диспетчер входа в систему, станьте пользователем с правами root и наберите /etc/init.d/xdm restart. Если нет, вам придется выйти и снова войти в систему, чтобы X порождала потомков, использующих новые значения переменных.

Локальное определение переменных¶

Пользовательские переменные¶

Далеко не всегда нужно определять переменные глобально. Например, вам может понадобиться добавить /home/my_user/bin и текущий рабочий каталог (где вы находитесь) к переменной PATH, но при этом не нужно, чтобы это добавление появилось и в переменной PATH у всех остальных пользователей. Если вы хотите определить переменную среды локально, используйте ~/.bashrc или ~/.bash_profile. Пример расширения PATH в ~/.bashrc для локальных нужд:

#(двоеточие без последующего указания каталога означает текущий рабочий каталог)
PATH="${PATH}:/home/my_user/bin:"

Обновление вашей переменной PATH произойдет, когда вы выйдете и снова войдете в систему.

Сеансовые переменные¶

Иногда нужны еще более жесткие ограничения. Вам может потребоваться возможность запуска исполняемых файлов из специально созданного временного каталога без указания полного пути к ним, и без изменения файла ~/.bashrc ради нескольких минут.

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

export PATH="${PATH}:/home/my_user/tmp/usr/bin"

Переменные окружения в Compose

Есть несколько частей Compose, которые имеют дело с переменными окружения в том или ином смысле. Эта страница поможет вам найти нужную информацию.

Подстановка переменных среды в Compose файлах

В оболочке можно использовать переменные среды для заполнения значений внутри файла Compose:

web:
  image: "webapp:${TAG}"

Задание переменных окружения в контейнерах

Вы можете задать переменные окружения в контейнере сервиса с помощью ключевого слова environment, также как и в случае docker run -e VARIABLE=VALUE . ..:

web:
  environment:
    - DEBUG=1

Передача переменных окружения в контейнеры

Вы можете передать переменные окружения из вашей оболочки прямо в контейнеры сервиса с помощью ключевого слова environment но не задавая значение, так же как и в docker run -e VARIABLE ...:

web:
  environment:
    - DEBUG

Значение переменной DEBUG в контейнере будет взято из значения той же переменной в оболочке из которой был запущен Compose.

Опция env_file

Вы можете передать несколько переменных окружения из внешнего файла tв контейнеры сервиса с помощью опции env_file, также как и в docker run --env-file=FILE ...:

web:
  env_file:
    - web-variables.env

Установка переменных окружения с помощью команды docker-compose run

Так же как и в docker run -e, вы можете задать переменные окружения в контейнере с помощью docker-compose run -e:

$ docker-compose run -e DEBUG=1 web python console. py

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

$ docker-compose run -e DEBUG web python console.py

Значение переменной DEBUG в контейнере будет взято из значения той же переменной в оболочке из которой был запущен Compose.

Файл .env

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

$ cat .env
TAG=v1.5

$ cat docker-compose.yml
version: '2.0'
services:
  web:
    image: "webapp:${TAG}"

Когда вы запускаете docker-compose up, сервис web определенный выше использует образ webapp:v1.5. Вы можете убедиться в этом с помощью команды настроек, которая выводит настройки вашего приложения в терминал:

$ docker-compose config
version: '2.0'
services:
  web:
    image: 'webapp:v1.5'

Значения из оболочки имеют приоритет над переменными из . env файла. Если вы установите TAG в другое значение в вашей оболочке, будет произведена следующая подстановка:

$ export TAG=v2.0

$ docker-compose config
version: '2.0'
services:
  web:
    image: 'webapp:v2.0'

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

Переменные среды, созданные по ссылкам


Комментарии:

Комментариев нет, желаете стать первым?

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

| Настройка серверов windows и linux

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

Что такое переменные среды windows

Давайте разберемся в понятии, и так переменная окружения (environment variable) это специального рода ссылки уменьшенного размера, на определенные объекты операционной системы Windows, используемые разными программами для хранения информации и взаимодействия с ней. Можно провести аналогию с относительными ссылками на сайтах, где нет явного указания на протокол. Чаще всего это пути до конкретных директорий в ОС.

Где используют переменные среды Windows

Приведу несколько примеров:

  • В скриптах > когда нужно например каждому пользователю сделать какую-то настройку, для примера положить на рабочий стол новую папку с документами. Так как для каждого пользователя путь до рабочего стола свой, вида C:\Users\lacky\Desktop, а можно обратиться и по относительному пути за счет переменной %HOMEPATH%, если вы в проводнике введете %HOMEPATH%\Desktop, то попадете на рабочий стол текущего пользователя.

  • в групповой политике, для настройки пользовательских окружений, например перемещаемые профили.
  • Оптимизация кода > если в коде очень часто используются одни и те же пути к файлам или папкам, а так же ключам реестра, вы можете легко назначить короткую переменную для дальнейшего использования. Ниже я вам приведу сводный список по переменным средам windows 10 и предыдущих версий, а так же покажу как их создавать и менять.

Все переменные среды windows 10 и других версий в своем составе имеют специальный оператор %. Он необходим, чтобы операционная система могла обработать поисковый запрос. Простой пример вы ищите папку TEMP и не знаете, где она располагается, вводите %TEMP% и поиск будет на всех локальных дисках и разделах.

 Список переменных сред windows 10

Приведенный список, в полной мере подойдет и для Windows 7 и для Windows 8.1, все проверенно лично. Уверен, что данные знания, очень сильно вам помогут оптимизировать свою работу.

  • %ALLUSERSPROFILE% > данная переменная отправит вас в папку C:\ProgramData
  • %windir% > это папка C:\Windows
  • %APPDATA% > вы попадается в скрытую папку C:\Users\Имя_пользователя\AppData\Roaming
  • %CommonProgramFiles% > папка C:\Program Files\Common Files
  • %CommonProgramFiles(x86)% > перекинет вас в C:\Program Files (x86)\Common Files
  • %CommonProgramW6432% > перекинет вас C:\Program Files\Common Files
  • %COMPUTERNAME% > Имя_компьютера, используется скриптах
  • %ComSpec% > откроет командную строку Windows 10 C:\Windows\system32\cmd.exe
  • %HOMEDRIVE% > путь к диску C:
  • %HOMEPATH% > эта переменная среды windows перекинет вас в папку пользователя \Users\Имя_пользователя
  • %LOCALAPPDATA% > эта переменная среды windows перекинет вас в папку C:\Users\Имя_пользователя\AppData\Local
  • %LOGONSERVER% > Имя_компьютера
  • %NUMBER_OF_PROCESSORS% > Количество_процессоров
  • %OS% > Windows_NT, так же используется в скриптах
  • %Path% > C:\Windows\system32;C:\Windows;C:\Windows\System32Wbem;
  • %PATHEXT% . COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
  • %PROCESSOR_ARCHITECTURE% > x86 или AMD64, архитектура Windows
  • %PROCESSOR_IDENTIFIER% > Intel64 Family 6 Model 37 Stepping 5, GenuineIntel
  • %PROCESSOR_LEVEL% > 6
  • %PROCESSOR_REVISION% > 2505 (пример)
  • %ProgramData% > папка C:\ProgramData
  • %ProgramFiles% > C:\Program Files
  • %ProgramFiles(x86)% > папка C:\Program Files (x86)
  • %ProgramW6432% > C:\Program Files
  • %PROMPT% > $P$G
  • %PSModulePath% > C:\Windows\system32\WindowsPowerShell\v1.0\Modules\ согласитесь очеь быстро
  • %PUBLIC% > C:\Users\Public
  • %SystemDrive% > диск C:
  • %SystemRoot% > C:\Windows
  • %TEMP% > C:\Users\Имя_пользователя\AppData\Local\Temp (по умолчанию)
  • %TMP% > C:\Users\Имя_пользователя\AppData\Local\Temp (по умолчанию)
  • %USERDOMAIN% > Имя_компьютера
  • %USERDOMAIN_ROAMINGPROFILE% > Имя_компьютера
  • %USERNAME% > Имя_пользователя
  • %USERPROFILE% > C:\Users\Имя_пользователя

Как вывести список всех переменных Windows

В Windows 10 и других версиях, можно вывести список всех переменных сред Windows, для этого откройте командную строку от имени администратора и введите команду SET.  В результате вы получите все переменные среды windows 10 по умолчанию для конкретной операционной системы.

Для удобства вы можете экспортировать весь этот список в текстовый файл, для этого введите:

Вот содержимое данного документы.

То же самое можно посмотреть и с помощью оболочки PowerShell, в которой нужно ввести:

Name Value
—- ——
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\Администратор\AppData\Roaming
CommonProgramFiles C:\Program Files\Common Files
CommonProgramFiles(x86) C:\Program Files (x86)\Common Files
CommonProgramW6432 C:\Program Files\Common Files
COMPUTERNAME DC01
ComSpec C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK NO
HOMEDRIVE C:
HOMEPATH \Users\Администратор
LOCALAPPDATA C:\Users\Администратор\AppData\Local
LOGONSERVER \\DC01
NUMBER_OF_PROCESSORS 4
OS Windows_NT
Path C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windo. ..
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
PROCESSOR_ARCHITECTURE AMD64
PROCESSOR_IDENTIFIER Intel64 Family 6 Model 44 Stepping 2, GenuineIntel
PROCESSOR_LEVEL 6
PROCESSOR_REVISION 2c02
ProgramData C:\ProgramData
ProgramFiles C:\Program Files
ProgramFiles(x86) C:\Program Files (x86)
ProgramW6432 C:\Program Files
PSModulePath C:\Users\Администратор\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPo…
PUBLIC C:\Users\Public
SESSIONNAME Console
SystemDrive C:
SystemRoot C:\Windows
TEMP C:\Users\836D~1\AppData\Local\Temp\1
TMP C:\Users\836D~1\AppData\Local\Temp\1
USERDNSDOMAIN ROOT.PYATILISTNIK.ORG
USERDOMAIN ROOT
USERDOMAIN_ROAMINGPROFILE ROOT
USERNAME Администратор
USERPROFILE C:\Users\Администратор
windir C:\Windows

Еще одним методом посмотреть переменные операционной системы, выступает реестр Windows. Нажимаем WIN+R и вводим regedit. В открывшемся окне редактор реестра, перейдите в ветку:

Для просмотра переменных для компьютера

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

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

HKEY_CURRENT_USER\Environment

Создаем переменные среды windows 10

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

Универсальный метод, это зайти в свойства моего компьютера или нажать сочетание клавиш WIN+Pause Breake.

С окне свойства системы, вы должны перейти в пункт «Дополнительные параметры системы»

Далее пункт переменные среды.

И перед вами два вида переменных сред Windows:

  • Временные переменные temp
  • Системные переменные

И те и другие можно легко изменить или создать.

Для примера я создам новую системную переменную, назову ее SYSPREP и укажу путь до папки C:\Windows\System32\Sysprep

Проверяю, что все добавилось. И теперь вбив переменную %SYSPREP% у меня откроется C:\Windows\System32\Sysprep.

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

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

Введение

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

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

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

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

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

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

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

KEY=value1:value2:...

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

KEY="value with spaces"

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

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

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

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

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

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

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

Output

SHELL=/bin/bash TERM=xterm USER=demouser LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:. .. MAIL=/var/mail/demouser PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games PWD=/home/demouser LANG=en_US.UTF-8 SHLVL=1 HOME=/home/demouser LOGNAME=demouser LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s _=/usr/bin/printenv

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

Output

/bin/bash

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

  • env VAR1="value" command_to_run command_options

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

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

Эти команды отображают переменные окружения, но как мы можем просмотреть переменные оболочки?

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

Output

BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() . . .

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

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

Мы можем очистить вывод, указав, что команда set должна работать в режиме POSIX, которые не подразумевает вывода функций оболочки. Также эту команду можно выполнить в субоболочке, чтобы не менять наше текущее окружение:

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

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

  • comm -23 <(set -o posix; set | sort) <(env | sort)

Он все равно будет включать несколько переменных окружения из-за того, что команда 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, который обычно использует историю bash, если не воспользоваться экранированием или одинарными кавычками.

Теперь у нас есть переменная. Эта переменная доступна в нашем текущем сеансе, но она не будет передаваться дочерним процессам.

Мы можем увидеть это, выполнив с помощью команды grep поиск новой переменной в выводе set:

Output

TEST_VAR='Hello World!'

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

Вывод должен быть пустой.

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

Output

Hello World!

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

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

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

Вернитесь к нашей оригинальной оболочке, введя exit:

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

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

Наша переменная будет превращена в переменную окружения. Мы можем убедиться в этом, снова проверив наш список переменных окружения:

Output

TEST_VAR=Hello World!

В этот раз наша переменная отображается в списке. Давайте повторим наш эксперимент с дочерней оболочкой:

Output

Hello World!

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

  • export NEW_VAR="Testing export"

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

Output

NEW_VAR=Testing export

Теперь давайте вернемся в нашу оригинальную оболочку:

Давайте посмотрим, доступна ли наша новая переменная:

Ничего не возвращается.

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

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

Понижение и сброс переменных

Наша переменная TEST_VAR все еще определена в качестве переменной окружения. Мы можем превратить ее обратно в переменную оболочки, введя следующую команду:

Она больше не является переменной окружения:

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

Output

TEST_VAR='Hello World!'

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

Мы можем убедиться, что эта переменная больше не задана:

Ничего не возвращается, потому что переменная была сброшена.

Настройка переменных окружения во время входа

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

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

Разница между сеансами оболочки входа, без входа, интерактивными и неинтерактивными сеансами

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

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

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

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

Еще одним отличием, которое можно отметить, является интерактивный или неинтерактивный характер сеанса оболочки.

Интерактивный сеанс оболочки — это сеанс оболочки, прикрепленный к терминалу. Неинтерактивный сеанс оболочки не прикреплен к сеансу терминала.

Таким образом, каждый сеанс оболочки классифицируется либо как сеанс входа или без входа, либо как интерактивный или неинтерактивный.

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

То, относится ли сеанс оболочки к оболочке входа или без входа, определяет то, какие файлы будут считываться при инициализации сеанса оболочки.

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

Сеанс считывает первый из файлов ~/.bash_profile, ~/.bash_login и ~/.profile, который ему удается найти, и не считывает остальные файлы.

В отличие от этого сеанс, определенный в оболочке без входа, будет читать файл /etc/bash.bashrc и затем использовать файл ~/.bashrc конкретного пользователя для создания окружения.

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

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

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

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

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

Чаще всего мы будем настраивать переменные окружения для конкретного пользователя, и наши настройки, как правило, будут доступны в оболочках как со входом, так и без входа. Это означает, что лучше всего использовать для определения этих переменных файл ~/.bashrc.

Откройте этот файл:

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

Любые новые переменные окружения можно добавить в любое место файла ~/.bashrc при условии, что они не помещаются внутри другой команды или цикла. Сохраните и закройте файл. В следующий раз при запуске сеанса оболочки ваше объявление переменной окружения будет считываться и передаваться в среду оболочки. Вы можете заставить ваш текущий сеанс считать файл прямо сейчас, введя следующую команду:

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

Заключение

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

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

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

Что такое переменные среды и как их использовать с Gatsby и Netlify?

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

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

Что такое переменные среды?

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

Переменная среды MY_SECRET_KEY, используемая для авторизации

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

Чем могут быть полезны переменные среды?

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

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

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

Как сохранить эти файлы в безопасности?

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

Например, ключи AWS являются ценным источником. Люди запускают ботов с единственной целью — попытаться просканировать Github на предмет ключей. Если кто-то найдет ключ AWS, он сможет использовать этот ключ для доступа к ресурсам, например, для выполнения операции с биткойнами за ваш счет. Это не для того, чтобы вас напугать, а для того, чтобы вы знали, чтобы избежать компрометации ключей.

Итак, как мы можем сохранить их в безопасности? Самый простой способ — добавить файл среды, в котором вы храните эти ключи, в файл .gitignore .

Для этого просто откройте существующий файл .gitignore или создайте новый в корне репозитория и добавьте имя файла в виде новой строки:

  # Внутри .gitignore
.env
  

Если вы хотите стать более продвинутым и убедиться, что этого никогда не произойдет с репозиторием, вы можете проверить некоторые инструменты, такие как git-secrets от AWS Labs или GitLeaks, в которых даже есть действие Github, чтобы упростить интеграцию с Github.

Gatsby и переменные среды

Gatsby по умолчанию делает два файла доступными как часть рабочего процесса переменных среды, который делает эти значения доступными в клиенте: .env.development и .env.production . Они соответствуют сценариям gatsby develop и gatsby build для разработки или создания вашего сайта.

MY_SECRET_KEY Переменная среды для разработки и производства

Чтобы использовать эти файлы в процессе разработки и сборки Gatsby, Gatsby требует, чтобы вы добавляли к этим переменным префикс GATSBY_ .Это также работает, если вы хотите, чтобы они были доступны на уровне процесса ОС.

Хотя вы можете интегрировать dotenv, если у вас есть более продвинутые потребности или вы не хотите использовать префикс GATSBY_ , ваш путь наименьшего сопротивления, вероятно, будет просто следовать пути Гэтсби при работе в Гэтсби.

Netlify и переменные среды

Netlify предоставляет возможность добавлять переменные среды как часть своих настроек Build & deploy , которые используются в процессе сборки.

Добавление переменной среды в Netlify

К счастью, Netlify позволяет легко добавить любую переменную среды, которую вы хотите, в процесс сборки! Чтобы добавить его, вы можете просто перейти в раздел Environment на странице настроек Build & deploy вашего проекта и добавить переменную в переменные среды .

Мы проведем вас через этот процесс чуть позже.

Шаг 1: Создание веб-сайта «Hello, world»

Для нашего пошагового руководства мы собираемся создать действительно простой пример веб-сайта Gatsby только для целей тестирования.

Новый веб-сайт с Gatsby Sass Starter

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

Мы собираемся использовать созданный мной Gatsby Sass Starter, который даст нам отправную точку и добавит «Hello, [Environment]» в зависимости от того, где он запущен.

Для начала создадим наш локальный проект с помощью интерфейса командной строки Gatsby.Перейдите туда, где вы хотите сохранить этот проект, и запустите:

  gatsby new my-env-project https://github.com/colbyfayock/gatsby-starter-sass
  

Вы можете изменить my-env-project на любой каталог, в котором вы хотите создать этот проект, но как только вы запустите эту команду, у вас теперь будет проект в этом новом каталоге.

Новый проект Gatsby в терминале

Для начала, войдя в этот каталог, запустите yarn develop , чтобы внести изменения локально, или yarn build , чтобы скомпилировать ваш новый сайт.

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

Шаг 2: Создание локальной переменной среды с помощью Gatsby

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

Для начала давайте сначала создадим новый файл в корне нашего проекта с именем .env.development . Вас могут спросить, действительно ли вы хотите использовать .Префикс , убедитесь, что вы сказали «да»!

Внутри этого файла добавим:

  # Внутри .env.development
GATSBY_MY_ENVIRONMENT = "Разработка"
  
Создание файла .env.development

Затем, чтобы убедиться, что мы не забыли это сделать, давайте также добавим этот файл .env.development в наш .gitignore , чтобы мы случайно не зафиксировали его в наша история git. Если у вас еще нет файла .gitignore , убедитесь, что вы создали его в корне вашего проекта.

Добавление .env.development в ваш .gitignore

Наконец, чтобы убедиться, что это работает, давайте откроем pages / index.js и заменим содержимое нашего тега

на «Hello, world!» вариант:

  

Здравствуйте, {process.env.GATSBY_MY_ENVIRONMENT}

И если мы сохраним это изменение и откроем его в нашем браузере, мы должны увидеть «Hello, Development»!

Использование переменной среды для вашего сайта Gatsby

Следуйте за фиксацией!

Шаг 3. Развертывание веб-сайта в Netlify

Итак, у нас есть веб-сайт, созданный с использованием простой переменной среды.Затем мы захотим развернуть этот сайт в Netlify. Если вы еще этого не сделали, нам нужно добавить наш веб-сайт в Github или другой провайдер Git. Убедитесь, что это настроено, прежде чем продолжить.

После создания учетной записи и входа в Netlify нажмите кнопку «Новый сайт из Git » на главной панели инструментов, следуйте инструкциям по подключению вашего Github или другого поставщика Git к Netlify, а затем найдите свой новый репозиторий.

Добавление нового репозитория Github в Netlify

После выбора репозитория вам будет предложено настроить процесс сборки.К счастью, Netlify может обнаружить, что мы используем сайт Гэтсби, и заранее заполнил его для нас. Если вы не добавили что-то особенное, сохраните базовую конфигурацию, чтобы использовать gatsby build для сборки вашего проекта и public / для вывода.

Настройка параметров сборки Netlify

Теперь, прежде чем мы перейдем к Deploy , мы хотим добавить одну вещь, а именно нашу переменную среды!

Прямо над кнопкой Deploy site находится кнопка Advanced .Нажмите на нее, и вы увидите новый раскрывающийся список с дополнительной кнопкой Новая переменная .

Настройка переменной среды в настройке Netlify

Нажмите кнопку Новая переменная , добавьте нашу GATSBY_MY_ENVIRONMENT в качестве новой переменной и добавьте Production в качестве значения. И, наконец, нажмите , разверните сайт !

Отсюда вы сможете наблюдать за развертыванием своего веб-сайта, и после завершения вы увидите свой новый сайт с надписью «Hello, Production»!

Развернутый сайт Gatsby с использованием переменной среды Netlify

Где можно добавить или обновить дополнительные переменные в Netlify?

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

Если вы когда-нибудь захотите изменить эту переменную или добавить больше, вы можете перейти к разделу Environment в настройках Build & deploy , где вы можете редактировать и добавлять любые другие переменные в разделе Environment variables .

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

Хотите узнать больше?

Вот еще несколько вещей, которые помогут вам начать изучение основ разработки!

Что такое переменные среды в Bash?

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

Хотя переменные среды применимы ко всем современным системам, в этой статье конкретно рассматриваются переменные среды в оболочке Bash в Linux, BSD, Mac и Cygwin.

Общие сведения о переменных среды

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

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

 

$ echo $ HOME
HOME = / home / seth

На Mac:

 

$ echo $ HOME
HOME = / Users / bogus

В Windows:

  C: \ Users \ bogus  

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

 

$ env | подробнее
TERM = xterm-256color
LESSOPEN = || /usr/bin/lesspipe.sh% s
USER = seth
SUDO_EDITOR = emacs
WWW_HOME = http: //mirror.lagoon.nc/pub/slackware/slackware64-current /ChangeLog.txt
VISUAL = emacs
DISPLAY =: 0
PS1 =
$ XDG_DATA_DIRS = / home / seth / .local / share / flatpak / exports / share /: / var / lib / flatpak / exports / share /: / usr / local / share /: / usr / share /
ПУТЬ = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin : / дом / сет /.local / bin: / snap / bin
GDMSESSION = gnome
MAIL = / var / spool / mail / seth
[...]

Переменные среды могут быть полезны, когда вы хотите переопределить настройки по умолчанию или когда вам нужно управлять новыми настройками, которые ваша система не имеет смысла создавать самостоятельно. Например, когда вы вводите команду, единственная причина, по которой ваш компьютер знает, как найти приложение, соответствующее этой команде, заключается в том, что переменная среды PATH сообщает ему, где искать.Эта переменная перечисляет допустимые каталоги для вашей операционной системы для поиска команд, будь то команда ls или cp, или графическое приложение, такое как Firefox или Lutris, или что-то еще.

В разных системах используются разные переменные среды. Ваша переменная PATH жизненно важна, например, для вашего эмулятора терминала, но гораздо менее важна, скажем, для Java (у которой есть свои собственные пути, которые указывают на важные библиотеки Java). Однако переменная USER используется несколькими системами как способ определить, кто запрашивает услугу.Например, если вы работаете в многопользовательской системе и вам нужно проверить свой локальный почтовый ящик, ваша почтовая команда знает, какой почтовый ящик нужно получить, на основе переменных MAIL и USER .

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

Обычно программа установки, будь то dnf в Fedora, apt в Ubuntu, brew на Mac или пользовательский установщик, обновляет переменные среды для нового приложения. Однако иногда, когда вы устанавливаете что-то, не входящее в намеченный набор инструментов вашего дистрибутива, вам, возможно, придется самостоятельно управлять переменной среды.Или вы можете добавить переменную среды в соответствии со своими предпочтениями. Если вы решили, что хотите сохранить некоторые приложения в папке bin , расположенной в вашем домашнем каталоге, вы должны добавить этот каталог в свой PATH , чтобы ваша операционная система знала, что там нужно искать приложения, которые будут запускаться при вводе команды.

Временные переменные среды

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

 

$ экспорт ПУТЬ = $ ПУТЬ: / home / seth / bin

Подтвердите результат:

 

$ echo $ PATH
ПУТЬ = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin: / home / seth / .local / bin: / snap / bin: / home / seth / bin

Закройте сеанс:


 

Откройте новый и посмотрите на переменную PATH :

 

$ echo $ PATH
ПУТЬ = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin: / home / seth / .локальный / bin: / snap / bin

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

Постоянные переменные среды

Вы можете установить свои собственные постоянные переменные среды в файле конфигурации оболочки, наиболее распространенной из которых является ~ / .bashrc . Если вы системный администратор, управляющий несколькими пользователями, вы также можете установить переменные среды в скрипте, помещенном в / etc / profile.d каталог .

Синтаксис установки переменной с помощью файла конфигурации такой же, как установка переменной в вашей оболочке:

 

экспорт ПУТЬ = $ ПУТЬ: / snap / bin: / home / seth / bin

Закройте текущую оболочку или заставьте ее загрузить обновленную конфигурацию:


 

Наконец, еще раз взгляните на свой системный путь:

 

$ echo $ PATH
ПУТЬ = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin: / home / seth / .локальный / bin: / snap / bin: / home / seth / bin

Теперь он правильно настроен для включения вашего дополнительного настраиваемого каталога.

Обнаружение других переменных среды

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

Ответ кроется в документации к приложению.Например, чтобы узнать, какие параметры доступны для вашей общей среды Bash, вы можете прочитать документацию Bash. В то время как на странице руководства Bash упоминается множество важных переменных, страница информации GNU для Bash содержит два исчерпывающих списка полезных переменных среды Bourne Shell и Bash, а также способы их использования.

Например, в списке информационной страницы:

 

'HISTCONTROL'
Список значений, разделенных двоеточиями, управляющих сохранением команд
в списке истории.Если список значений включает «ignorespace»,
строк, начинающихся с символа пробела, не сохраняются в списке истории
. Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи истории
, не сохраняются. Значение ignoreboth - это сокращение
для ignorespace и ignoredups.
[...]

Эти выходные данные говорят вам, что переменная среды HISTCONTROL управляет тем, как представлена ​​ваша история Bash, и какие значения вы можете использовать для настройки этого взаимодействия.В этом примере значение ignoredups сообщает выходным данным команды history игнорировать повторяющиеся строки.

Вы можете легко это проверить. Сначала введите одну и ту же команду дважды подряд:

 

$ echo "hello world"
hello world
$ echo "hello world"
hello world

Просмотрите свою историю или, по крайней мере, самые последние записи:

 

$ История | хвост -5
996 man bash
997 info bash
998 echo "hello world"
999 echo "hello world"
1000 история

Как видите, теперь в списке действительно есть повторяющиеся записи.

Задайте новую переменную среды в файле .bashrc на основе того, что вы читаете на информационной странице:

 

экспорт HISTCONTROL = $ HISTCONTROL: ignorespace: ignoredups

Сохраните и загрузите новую конфигурацию:


 

Выполнить две команды два раза подряд:

 

$ echo "привет один раз"
привет один раз
$ echo "привет один раз"
привет один раз

Просмотр последних записей в вашей истории:

 

$ История | tail -5
1000 история
1001 emacs ~ /.bashrc
1002 источник ~ / .bashrc
1003 echo "привет один раз"
1004 история

Повторяющиеся записи теперь сворачиваются в одну запись из-за вашей новой переменной среды, как указано на информационной странице.

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

переменных среды: что это такое?

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

Другими словами, переменная среды — это что-то, что представляет что-то еще, например местоположение на вашем компьютере, номер версии, список объектов и т. Д.

Переменные среды окружены знаком процента (% ), например, % temp% , чтобы отличать их от обычного текста.

Существует два типа переменных среды: переменных среды пользователя, и переменных среды системы.

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

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

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

Эти типы переменных среды могут быть установлены вручную любым пользователем, вошедшим в систему, но Windows и другое программное обеспечение также может их установить.

Одним из примеров переменной среды пользователя является % homepath% . Например, на одном компьютере с Windows 10 % homepath% содержит значение \ Users \ Tim , которое представляет собой папку, содержащую всю информацию, относящуюся к пользователю.

Переменная пользовательской среды тоже может быть настраиваемой. Пользователь может создать что-то вроде % data% , которое может указывать на папку на компьютере, например, C: \ Downloads \ Files .Такая переменная среды будет работать только тогда, когда этот конкретный пользователь вошел в систему.

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

Переменные системного окружения

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

Некоторые из наиболее распространенных переменных среды в системах Windows включают % path% , % programfiles% , % temp% и % systemroot% , хотя есть и многие другие.

Например, при установке Windows 8 для переменной среды % windir% устанавливается каталог, в который она установлена. Поскольку каталог установки — это что-то, что установщик (это вы…или производителя вашего компьютера) может быть определено на одном компьютере, это может быть C: \ Windows , , а на другом — C: \ Win8 .

Продолжая этот пример, предположим, что Microsoft Word установлен на каждом из этих компьютеров после завершения настройки Windows 8. В процессе установки Word необходимо скопировать ряд файлов в каталог, в котором установлена ​​Windows 8. Как может MS Word быть уверенным, что файлы устанавливаются в нужное место, если это место — C: \ Windows на одном компьютере и C: \ Win8 на другом?

Чтобы предотвратить подобную потенциальную проблему, Microsoft Word, как и большая часть программного обеспечения, был разработан для установки в % windir% , а не в какую-либо конкретную папку.Таким образом можно быть уверенным, что эти важные файлы установлены в том же каталоге, что и Windows 8, независимо от того, где это может быть.

См. Страницу Microsoft Recognized Environment Variables, где вы найдете гигантский список пользовательских и системных переменных среды, часто используемых в Windows.

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

Есть несколько способов узнать, что такое конкретная переменная среды. Однако в большинстве случаев, по крайней мере в Windows, самый простой и, вероятно, самый быстрый способ сделать это — с помощью простой команды командной строки под названием echo .

Вот как это сделать:

  1. Откройте командную строку.

  2. Точно выполните следующую команду:

    эхо% темп% 

    … конечно, заменив интересующую вас переменную окружения % temp% .

  3. Обратите внимание на значение, которое отображается сразу под ним.

Например, на моем компьютере echo% temp% выдало следующее:

C: \ Users \ Jon \ AppData \ Local \ Temp
 
data-type = «code»>

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

Запись-вывод $ env: temp 

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

Перейдите в Панель управления, затем в системный апплет. Оказавшись там, выберите Advanced system settings слева, затем Environment Variables внизу. Это неполный список переменных среды , но те, которые перечислены в списке, имеют значения рядом с ними.

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

Спасибо, что сообщили нам!

Расскажите, почему!

Другой Недостаточно подробностей Сложно понять

Список переменных среды в Linux / Unix

В этом руководстве вы узнаете:

Что такое вычислительная среда?

Вычислительная среда — это платформа (платформа = операционная система + процессор), на которой пользователь может запускать программы.

Что такое переменная?

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

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

Что такое переменные среды?

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

Переменные среды могут изменять поведение программного обеспечения / программ.

Щелкните здесь, если видео недоступно

Например, В переменной среды $ LANG хранится значение языка, понятного пользователю. Это значение считывается приложением, так что пользователю из Китая отображается интерфейс мандаринского языка, а пользователю из Америки — интерфейс на английском языке.

Давайте изучим некоторые общие переменные среды —

Переменная

Описание

ПУТЬ Эта переменная содержит разделенный двоеточием (:) список каталогов, в которых ваша система ищет исполняемые файлы.
Когда вы вводите команду в терминале, оболочка ищет команду в разных каталогах, упомянутых в переменной $ PATH. Если команда найдена, она выполняется. В противном случае он возвращается с ошибкой «команда не найдена».
ПОЛЬЗОВАТЕЛЬ Имя пользователя
ДОМ Путь по умолчанию к домашнему каталогу пользователя
РЕДАКТОР Путь к программе, которая редактирует содержимое файлов18 UID Уникальный идентификатор пользователя
TERM Эмулятор терминала по умолчанию
SHELL Оболочка, используемая пользователем

Доступ к значениям

Порядок определения значений переменной2 переменной, используйте команду

 echo $ VARIABLE 

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

Команда env отображает всех переменных среды.

Установить новые переменные среды

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

 VARIABLE_NAME = variable_value 

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

Удаление переменных

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

 unset variablename 

Этот удалит переменную и ее значение навсегда.

Обзор:

  • Переменные среды управляют поведением программ в вашей операционной системе.
_NAME

206LE
Команда Описание
echo $ VARIABLE Для отображения значения переменной
env Отображает все переменные среды
Новая переменная VARIA
unset Удалить переменную
export Variable = value Чтобы установить значение переменной среды

Environment Variable

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

Определение переменной среды

Переменные среды, определенные в этой главе повлиять на работу несколько утилит, функции и приложения.Есть и другие переменные среды, которые интересуют только к конкретным утилитам. Переменные среды, применимые только к одной утилите: определяется как часть описания утилиты. Увидеть ПЕРЕМЕННЫЕ ОКРУЖАЮЩЕЙ СРЕДЫ раздел описания служебных программ в спецификации XCU для получения информации об окружающей среде. переменное использование.

Значение переменной среды — это строка персонажей. Для программы на языке C: становится доступным массив строк, называемый средой когда начинается процесс.На массив указывает внешняя переменная Окружающая среда , который определяется как:

внешний символ ** окружающая среда;
 

Эти строки имеют вид имя = значение ; имя с не содержат символа =. Чтобы значения были переносимы между XSI-совместимые системы, значение должно состоять из символов из переносимого набора символов (кроме NUL и как указано ниже). Нет никакого смысла, связанного с порядком строк в среде.Если более одной строки в среде процесса имеет то же самое название последствия не определены.

Имена переменных среды, используемые утилитами в спецификации XCU состоят исключительно из заглавных букв, цифры и «_» (подчеркивание) из символов, определенных в Портативный набор символов . Другие символы могут быть разрешены реализацией; приложения должны допускать наличие таких имен. Верхний и строчные буквы сохраняют свою уникальность и не складываются.Пространство имен переменных среды, содержащих строчные буквы. буквы зарезервированы для приложений. Приложения могут определять любые переменные среды с именами из этого пространства имен без изменение поведения стандартных утилит.

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

Другой пары могут быть помещены в окружающую среду, например, вызов путь () функция манипулирование Окружающая среда переменная, или с помощью envp аргументы при создании процесса; видеть в спецификации XSH .

Неразумно вступать в конфликт с некоторыми переменными, которые часто экспортируется широко используемыми интерпретаторами команд и Приложения:

 
ARFLAGS IFS ПОЧТОВЫЙ ПУТЬ PS1
CC LANG ПОЧТА PS2
CDPATH LC_ALL МАКЕФЛАГИ PS3
CFLAGS LC_COLLATE MAKESHELL PS4
CHARSET LC_CTYPE ЧЕЛОВЕК PWD
КОЛОННЫ LC_MESSAGES MBOX СЛУЧАЙНО
ДАТЕМСК LC_MONETARY БОЛЬШЕ СЕКУНД
МЕРТВОЙ LC_NUMERIC MSGVERB ОБОЛОЧКА
РЕДАКТОР LC_TIME NLSPATH СРОК
ENV ЛДФЛАГИ NPROC TERMCAP
ВЫХОД LEX OLDPWD ТЕРМИНФО
FC LFLAGS OPTARG TMPDIR
FCEDIT LINENO ОПТЕРР ТЗ
FFLAGS ЛИНИЙ ОПТИНД ПОЛЬЗОВАТЕЛЬ
ПОЛУЧИТЬ ЛИСТЕР ПЕЙДЖЕР ВИЗУАЛЬНЫЙ
GFLAGS ИМЯ ПУТЬ YACC
HISTFILE LPDEST PPID YFLAGS
ИСТОРИЯ ПОЧТА ПРИНТЕР
HISTSIZE МАЙЛЧЕК ПРОКЛАНГ
ДОМ ПОЧТОВЫЙ PROJECTDIR

Если переменные в следующих в окружении присутствуют две секции во время выполнения приложения или утилиты им придается значение описано ниже.Некоторые размещены в окружающую среду путем реализации во время входа пользователя в систему; все может быть добавлено или изменено пользователем или любой предок текущего процесса. Реализация добавит или изменит среду переменные, названные в этой спецификации, устанавливаются только как указанные в данной спецификации. Если они определены в приложении среды, утилиты в спецификации XCU и функции в спецификации XSH предполагают, что они имеют указанное значение.Соответствующие приложения не должен устанавливать эти переменные среды иметь значения, отличные от описанных. Видеть getenv () а также спецификация XCU , Shell Execution Environment для методов доступа к этим переменным.

Переменные интернационализации

В этом разделе описаны переменные среды, относящиеся к работа интернационализированных интерфейсов, описанная в Спецификация CAE, Системные интерфейсы и заголовки , , выпуск 5 и спецификация CAE, Команды и служебные программы, выпуск 5 .

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

ЯЗЫК
Эта переменная определяет категорию локали для родного языка, местные обычаи и кодированный набор символов при отсутствии LC_ALL и другие LC_ * ( LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME ) переменные среды.Это может быть использовано приложения для определения языка сообщений об ошибках и инструкции, последовательности сопоставления, форматы даты и так далее.
LC_ALL
Эта переменная определяет значения для всех категорий локали. Ценность LC_ALL переменная среды имеет приоритет над любым из другие переменные среды, начинающиеся с LC_ ( LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME ) и ЯЗЫК переменная окружения.
LC_COLLATE
Эта переменная определяет категорию локали для сопоставления символов. Он определяет сопоставление информация для регулярных выражений и сортировки, в том числе классы эквивалентности и многосимвольные элементы сопоставления, в различных коммунальных службах и strcoll () а также strxfrm () функции. Дополнительная семантика этой переменной, если таковая имеется, зависит от реализации.
LC_CTYPE
Эта переменная определяет категория локали для функций обработки символов, такой как tolower () , toupper () а также isalpha () .Эта переменная среды определяет интерпретация последовательностей байтов текста данные как символы (например, одиночные, в отличие от многобайтовые символы), классификация символы (например, альфа, цифра, график) и поведение классов персонажей. Дополнительная семантика этой переменной, если таковая имеется, зависит от реализации.
LC_MESSAGES
Эта переменная определяет категорию локали для обработки положительных и отрицательные отзывы, а также язык и культурные традиции, в которых должно быть написано.Это также влияет на поведение катопен () функция определения каталога сообщений. Дополнительная семантика этой переменной, если таковая имеется, зависит от реализации. Языковые и культурные условности диагностики и информационные сообщения, формат которых не указан в соответствии с этой спецификацией, на набор должна влиять установка LC_MESSAGES .
LC_MONETARY
Эта переменная определяет категория локали для информации о числовом форматировании, связанной с денежными средствами.Дополнительная семантика этой переменной, если таковая имеется, зависит от реализации.
LC_NUMERIC
Эта переменная определяет категория локали для числового форматирования (например, разделитель тысяч и символ системы счисления) информация в различных утилитах, а также для форматированных операций ввода-вывода в printf () а также scanf () и функции преобразования строк в strtod () . Дополнительная семантика этой переменной, если таковая имеется, зависит от реализации.
LC_TIME
Эта переменная определяет категория локали для информации о форматировании даты и времени. Это влияет на поведение функций времени в strftime () . Дополнительная семантика этой переменной, если таковая имеется, зависит от реализации.
NLSPATH
Эта переменная содержит последовательность шаблонов, которые катопен () функция используется при попытке найти каталоги сообщений. Каждый шаблон состоит из необязательный префикс, одно или несколько полей подстановки, имя файла и необязательный суффикс.Например:
NLSPATH = "/ system / nlslib /% N.cat"
 
определяет это катопен () следует искать все каталоги сообщений в каталог / система / nlslib , где имя каталога должно быть построено из название параметр передан в катопен () (% № ), с суффиксом .cat . Поля подстановки состоят из «%» символ, за которым следует однобуквенное ключевое слово. В настоящее время определены следующие ключевые слова:
% N
Стоимость название параметр передан в catopen () .
% L
Значение категория LC_MESSAGES.
% л
язык элемент из категория LC_MESSAGES.
% t
The территория элемент из категория LC_MESSAGES.
% c
кодовый набор элемент из категория LC_MESSAGES.
%%
Одиночный символ%.

Пустая строка подставляется, если указанное значение не в настоящее время определено.Разделители подчеркивание (_) и точка (.) Не входят в Замены% t и% c.

Шаблоны, определенные в NLSPATH разделены двоеточием (:). Ведущие или два соседних двоеточия :: эквивалентны указав% N. Например:

NLSPATH = ":% N.cat:/nlslib/%L/%N.cat"
 
указывает на катопен () что он должен искать запрошенный каталог сообщений в имени , имя .cat и / nlslib / категория / имя .кот , где категория — значение категории LC_MESSAGES текущей локали.

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

Переменные среды LANG , LC_ALL , КОЛЛЯЦИЯ LC , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC , LC_TIME , (LC_ *) , а также NLSPATH обеспечивают поддержку интернационализированных приложений.Стандартные утилиты используют эти переменные среды, как описано в этом разделе, и физическое лицо ПЕРЕМЕННЫЕ ОКРУЖАЮЩЕЙ СРЕДЫ секции для инженерных сетей. Если эти переменные определяют категории локали которые не основаны на том же базовый кодовый набор, результаты не указаны.

Значения категорий локали определяются в порядке приоритета; первое соблюдаемое ниже условие определяет значение:

  1. Если LC_ALL переменная среды определена и не нуль, значение LC_ALL используется.
  2. Если LC_ * переменная окружения ( LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME ) определено и не равно нулю, значение переменная окружения используется для инициализации категория, соответствующая переменной среды.
  3. Если ЯЗЫК переменная среды определена и не нуль, значение ЯЗЫК используется переменная окружения.
  4. Если ЯЗЫК переменная окружения не установлена ​​или установлена в пустую строку, зависящий от реализации используется локаль по умолчанию.

Если значение локали — «C» или «POSIX», используется локаль POSIX и стандартные утилиты ведут себя в соответствии с правилами в POSIX Locale , для связанной категории.

Если значение локали начинается с косой черты, оно интерпретируется как путь к файлу, который был создан в формате вывода, используемом localedef полезность; видеть ВЫХОДНЫЕ ФАЙЛЫ под localedef . Ссылаясь на такой pathname приведет к тому, что этот языковой стандарт будет использоваться для указанной категории.

Если значение локали имеет вид:

  язык   [  _territory  ] [  .codeset  ]
  
он относится к языку, предоставленному реализацией, где настройки язык, территория и кодировка зависят от реализации.

КОЛЛЯЦИЯ LC , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC а также LC_TIME определены, чтобы принять дополнительные поле «@ модификатор «, что позволяет пользователю выбирать конкретный экземпляр данных локализации в отдельная категория (например, для выбора словаря в отличие от порядок символов данных).Синтаксис для этой среды Таким образом, переменные определяются как:

  [  язык   [  _territory  ] [  .codeset  ] [ @  модификатор  ]]
  
Например, если пользователь хочет взаимодействовать с системой на французском языке, но требуется для сортировки текстовых файлов на немецком языке, ЯЗЫК а также КОЛЛЕКЦИЯ LC можно определить как:
LANG = Fr_FR
LC_COLLATE = De_DE
 

Это может быть расширено, чтобы выбрать сортировку словаря (скажем) с помощью поле модификатора @ ; Например:

LC_COLLATE = De_DE @ dict
 
Реализация может поддерживать другие форматы.

Если значение локали не распознается реализацией, поведение не указано.

Во время выполнения эти значения привязываются к языку программы путем вызова setlocale () функция.

Дополнительные критерии для определения допустимого названия локали: зависит от реализации.

Другие переменные среды

КОЛОННЫ
Десятичное целое число> 0, используемое для обозначения предпочтительная ширина пользователя в столбцах для экрана или окна терминала.(Видеть положение столбца .) Если эта переменная не установлена ​​или равна нулю, реализация определяет количество столбцы, подходящие для терминала или окна, неопределенным образом. Когда КОЛОННЫ установлена, любая информация о ширине терминала подразумевается СРОК будет отменено. Пользователям и портативным приложениям не следует устанавливать КОЛОННЫ если они не хотят отменить выбор системы и производить выходные данные, не связанные с характеристиками терминала. Значение по умолчанию для количества позиций столбца не указано. потому что исторические реализации используют разные методы для определения значений, соответствующих размер экрана, на котором запущена утилита.Этот размер обычно известен реализации. через ценность СРОК или более сложными методами, такими как расширения stty утилита или знание того, как пользователь динамически изменяет размер окон на терминале с побитовым отображением. Пользователям не нужно устанавливать эту переменную в окружающей среды, если нет особой причины переопределить поведение реализации по умолчанию, например, чтобы отображать данные в области произвольно меньшего размера чем терминал или окно.
ДАТЕМСК
Указывает путь к файлу шаблона, используемому getdate () .
ДОМ
Система инициализирует эту переменную во время входа в систему быть путь к домашнему каталогу пользователя. Видеть .
ЛИНИИ
Десятичное целое число> 0, используемое для обозначения желаемое количество строк на страницу или вертикальный экран или размер окна в строках.Линия в данном случае представляет собой достаточно большую вертикальную меру. для хранения самого высокого символа в отображаемом наборе символов. Если эта переменная не установлена ​​или равна нулю, реализация определяет количество строки, соответствующие терминалу или окну (размер, терминальная скорость передачи данных и т. д.), неопределенным образом. Когда ЛИНИЙ установлен, любая информация о высоте терминала подразумевается СРОК будет отменено. Пользователям и портативным приложениям не следует устанавливать ЛИНИЙ если они не хотят отменить выбор системы и производить выходные данные, не связанные с характеристиками терминала.Значение по умолчанию для количества строк не указано. потому что исторические реализации используют разные методы для определения значений, соответствующих размер экрана, на котором запущена утилита. Этот размер обычно известен реализации. через ценность СРОК или более сложными методами, такими как расширения stty утилита или знание того, как пользователь динамически изменяет размер окон на терминале с побитовым отображением. Пользователям не нужно устанавливать эту переменную в окружающей среды, если нет особой причины переопределить поведение реализации по умолчанию, например, чтобы отображать данные в области произвольно меньшего размера чем терминал или окно.
ИМЯ
Система инициализирует эту переменную во время входа в систему быть логин пользователя. Видеть . Для стоимости ИМЯ быть переносимым между реализациями стандарта ISO POSIX-1 значение должно состоять из символов из переносимый набор символов имени файла.
МСГВЕРБ
Описывает, какие компоненты сообщения должны использоваться при написании сообщений fmtmsg () .
ПУТЬ
Последовательность префиксов пути что определенные функции и коммунальные услуги применять при поиске исполняемого файла, известного только по имени файла. Префиксы разделяются двоеточием (:) Когда к этому имени файла применяется префикс ненулевой длины, между префиксом и именем файла вставляется косая черта. Префикс нулевой длины — это устаревшая функция это указывает текущий рабочий каталог. Он выглядит как два соседних двоеточия (: :), в качестве начального двоеточия перед остальной частью списка или в конце двоеточие после остальной части списка.Портативное приложение должно используйте реальный путь (например,.) для представления текущего рабочего каталога в ПУТЬ . Список просматривается от начала до конца, применение имени файла к каждому префиксу, пока исполняемый файл с указанным именем и соответствующими разрешениями на выполнение. Если искомый путь содержит косую черту, поиск выполняется через префиксы пути не будут выполняться. Если имя пути начинается с косой черты, указанный путь решено (см. разрешение пути ).Если ПУТЬ не задано или установлено значение null, поиск пути зависит от реализации.
ОБОЛОЧКА
Путь к предпочтительному интерпретатору языка команд пользователя. Если этот интерпретатор не соответствует Командный язык оболочки XSI в спецификации XCU , командный язык оболочки , утилиты могут вести себя иначе, чем те, что описаны в этом наборе спецификаций.
TMPDIR
Путь к каталогу, доступному для программ которым нужно место для создания временных файлов.
СРОК
Тип терминала, для которого должен быть подготовлен вывод. Этот информация используется утилитами и прикладными программами, желающими использовать специальные возможности терминала. Формат и допустимые значения этой переменной среды не указаны.
ТЗ
Информация о часовом поясе. Содержимое переменной среды с именем ТЗ используются ctime () , по местному времени () , strftime () а также mktime () функций и различными утилитами, , чтобы переопределить часовой пояс по умолчанию.Значение ТЗ имеет одну из двух форм (вставлены пробелы для ясности):
:  символов
  
или же:
  стандартное смещение dst смещение , правило 
  
Если ТЗ имеет первый формат (то есть, если первый символ является двоеточием), символы, следующие за двоеточием: обрабатывается в зависимости от реализации. Расширенный формат (для всех TZ с чья ценность не имеет двоеточие в качестве первого символа) выглядит следующим образом:
  стандартное смещение   [  dst   [  смещение  ] [,  начало   [/ время  ] ,  конец   [2]  время 2]  время
  
Где:
std и dst

Указывает не менее трех и не более {TZNAME_MAX}, байты, которые являются обозначением стандарта ( std ) или альтернатива ( dst — например, летнее время) часовой пояс.Только std требуется; если dst пропал, отсутствует, то альтернативное время не применяется в этом регионе. Явно разрешены прописные и строчные буквы. Любые графические символы, кроме начального двоеточия (:) или цифры, запятая (,), минус (-), плюс (+), и нулевой символ разрешены появиться в этих полях, но их значение не указано.
смещение
Указывает значение, которое нужно добавить к местному времени, чтобы получить Всемирное координированное время.В смещение имеет вид:
 
hh [: мм [: SS ] ]
Минуты ( мм ) и секунды ( сс ) являются необязательными. Час ( чч ) является обязательным и может быть однозначным. В смещение следующий std требуется. Если нет смещение следует dst , предполагается, что альтернативное время на один час опережает стандартное время.Может использоваться одна или несколько цифр; значение всегда интерпретируется как десятичное число. Час от нуля до 24, и минуты (и секунды), если они есть между ноль и 59. Использование значений за пределами этих диапазонов вызывает неопределенное поведение. Если перед ним стоит -, часовой пояс находится к востоку от нулевого меридиана; в противном случае это запад (что может быть обозначено дополнительным знаком +).
правило
Указывает, когда перейти на альтернативное время и обратно. В правило имеет вид:
  дата   [/ время  ] ,  дата   [/ время  ]
  
где первый дата описывает, когда происходит переход от стандартного времени к альтернативному а второй дата описывает, когда происходит обратное изменение.Каждый раз описывает, когда по текущему местному времени изменение на другой раз сделан.

Формат дата является одним из следующих:

J n
Юлианский день n (1 n 365). Високосные дни не учитываются. То есть во все годы, включая високосные, 28 февраля — день 59, а 1 марта — 60-й день. Невозможно явно сослаться на случайное 29 февраля.
n
Юлианский день с отсчетом от нуля (0 n 365).Високосные дни засчитываются, и можно сослаться на 29 февраля.
М м . . д
В d th день (0 д 6) недели n месяца метр года (1 n 5, 1 метр 12, где 5 неделя означает «последняя д день в месяце м » что может произойти как на четвертой, так и на пятой неделе). Неделя 1 — это первая неделя, в которой наступает день.Нулевой день — воскресенье.

В раз имеет тот же формат, что и смещение за исключением того, что не допускается использование ведущего знака (- или +). По умолчанию, если раз не приводится, это 02:00:00.

о переменных среды — PowerShell

  • 8 минут на чтение

В этой статье

КРАТКОЕ ОПИСАНИЕ

Описывает, как получить доступ к переменным среды Windows в PowerShell.

ПОЛНОЕ ОПИСАНИЕ

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

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

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

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

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

В Windows переменные среды могут быть определены в трех областях:

  • Объем машины (или системы)
  • Объем пользователя
  • Объем процесса

Область Процесс содержит переменные среды, доступные в текущем процесс или сеанс PowerShell. Этот список переменных унаследован от родительский процесс и создается из переменных в Machine и Пользователь прицелов.Платформы на основе Unix имеют только область действия Process .

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

  $ Env: <имя-переменной>
  

Например, чтобы отобразить значение переменной среды WINDIR , введите следующую команду в командной строке PowerShell:

  $ Конверт: windir
  

В этом синтаксисе знак доллара ( $ ) указывает на переменную, а имя диска ( Env: ) указывает переменную среды, за которой следует имя переменной ( windir ).

Когда вы изменяете переменные среды в PowerShell, изменение влияет только на текущий сеанс. Это поведение похоже на поведение команды Set . в командной оболочке Windows и команду Setenv в ОС UNIX среды. Чтобы изменить значения в области компьютера или пользователя, вы должны использовать методы класса System.Environment .

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

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

  $ Env: <имя-переменной> = "<новое-значение>"
  

Например, чтобы добавить ; c: \ temp к значению среды Path переменной используйте следующий синтаксис:

  $ Env: Path + = "; c: \ temp"
  

В Linux или macOS двоеточие (: ) в команде отделяет новый путь от путь, предшествующий ему в списке.

  $ Env: PATH + = ": / usr / local / temp"
  

Вы также можете использовать командлеты Item, такие как Set-Item , Remove-Item и Copy-Item для изменения значений переменных среды. Например, чтобы использовать командлет Set-Item для добавления ; c: \ temp к значению Path переменная среды, используйте следующий синтаксис:

  Set-Item -Path Env: Path -Value ($ Env: Path + "; C: \ Temp")
  

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

Переменные среды, хранящие настройки

Функции

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

Переменные среды, в которых хранятся предпочтения, включают:

  • PSExecutionPolicyPreference

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

    • Запустить сеанс из командной строки с помощью ExecutionPolicy параметр, чтобы установить политику выполнения для сеанса.

    • Используйте командлет Set-ExecutionPolicy . Используйте параметр Scope с значение «Процесс».

      Для получения дополнительной информации см. About_Execution_Policies.

  • PSModuleAnalysisCachePath

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

    Расположение кеша по умолчанию:

    • Windows PowerShell 5.1: $ env: LOCALAPPDATA \ Microsoft \ Windows \ PowerShell
    • PowerShell 6.0 и выше: $ env: LOCALAPPDATA \ Microsoft \ PowerShell
    • Не в Windows по умолчанию: ~ / .cache / powershell

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

    Примечание

    Если обнаружение команд работает некорректно, например, Intellisense показывает команды, которых не существует, вы можете удалить файл кеша. Кеш воссоздается при следующем запуске PowerShell.

    Чтобы изменить расположение кеша по умолчанию, установите переменную среды перед запуском PowerShell.Изменения в этой переменной среды влияют только на дочерние процессы. Значение должно указывать полный путь (включая имя файла) что PowerShell имеет разрешение на создание и запись файлов.

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

      # `NUL` это специальное устройство в Windows, на которое нельзя писать,
    # в не-Windows вы должны использовать `/ dev / null`
    $ env: PSModuleAnalysisCachePath = 'NUL'
      

    Устанавливает путь к устройству NUL .PowerShell не может писать в путь, но ошибка не возвращается. Вы можете увидеть сообщения об ошибках, используя трассировщик:

      Trace-Command -PSHost -Name Modules -Expression {Import-Module Microsoft.PowerShell.Management -Force}
      
  • PSDisableModuleAnalysisCacheCleanup

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

    Установка этой переменной среды вступает в силу немедленно в текущем процесс.

  • PSModulePath

    Переменная среды $ env: PSModulePath содержит список папок. места, в которых выполняется поиск модулей и ресурсов.

    По умолчанию для $ env: PSModulePath назначены действующие расположения:

    • Общесистемные расположения: эти папки содержат модули, которые поставляются с PowerShell.Модули хранятся в папке $ PSHOME \ Modules . Также, Это место, где установлены модули управления Windows.

    • Модули, устанавливаемые пользователем: Это модули, установленные пользователем. Install-Module имеет параметр Scope , который позволяет вам указать установлен ли модуль для текущего пользователя или для всех пользователей. Для дополнительную информацию см. в разделе Install-Module.

      • В Windows расположение пользовательской области CurrentUser папка $ HOME \ Documents \ PowerShell \ Modules .Расположение AllUsers : $ env: ProgramFiles \ PowerShell \ Modules .
      • В системах, отличных от Windows, расположение пользовательского CurrentUser Область видимости — это папка $ HOME / .local / share / powershell / Modules . Местоположение из области AllUsers является / usr / local / share / powershell / Modules .

    Кроме того, программы установки, устанавливающие модули в другие каталоги, такие как как каталог Program Files, может добавлять их местоположения к значению $ env: PSModulePath .

    Для получения дополнительной информации см. About_PSModulePath.

Управление переменными среды

PowerShell предоставляет несколько различных методов управления средой. переменные.

  • Привод поставщика среды
  • Командлеты The Item
  • .NET System.Environment class
  • В Windows — системная панель управления

Использование поставщика среды

Каждая переменная среды представлена ​​экземпляром Система .Collections.DictionaryEntry класс. В каждом DictionaryEntry объект, имя переменной среды — ключ словаря. Значение переменной — это словарное значение.

Для отображения свойств и методов объекта, представляющего переменную среды в PowerShell используйте командлет Get-Member . Например, для отображения методов и свойств всех объектов на диске Env: , тип:

  Get-Item -Path Env: * | Get-Member
  

Поставщик среды PowerShell позволяет получить доступ к переменным среды в Диск PowerShell (диск Env: ).Этот диск очень похож на файловую систему привод. Чтобы перейти к диску Env: , введите:

  Set-Location Env:
  

Используйте командлеты Content, чтобы получить или установить значения переменной среды.

  PS Env: \> Set-Content -Path Test -Value 'Тестовое значение'
PS Env: \> Get-Content -Path Test
Значение теста
  

Вы можете просмотреть переменные среды на диске Env: из любого другого PowerShell, и вы можете перейти на диск Env: , чтобы просмотреть и изменить переменные среды.

Использование командлетов элементов

При обращении к переменной среды введите имя диска Env: , а затем по имени переменной. Например, чтобы отобразить значение COMPUTERNAME переменная среды, тип:

  Get-ChildItem Env: имя компьютера
  

Чтобы отобразить значения всех переменных среды, введите:

  Get-ChildItem Env:
  

Поскольку переменные среды не имеют дочерних элементов, вывод Get-Item и Get-ChildItem то же самое.

По умолчанию PowerShell отображает переменные среды в том порядке, в котором он их извлекает. Чтобы отсортировать список переменных среды по имени переменной, по конвейеру вывод команды Get-ChildItem командлету Sort-Object . Для Например, с любого диска PowerShell введите:

  Get-ChildItem Env: | Сортировать Имя
  

Вы также можете перейти на диск Env: с помощью командлета Set-Location :

  Set-Location Env:
  

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

  PS Env: \> Get-ChildItem
  

Чтобы отобразить значение переменной COMPUTERNAME изнутри Env: привод, тип:

  PS Env: \> Get-ChildItem имя_компьютера
  

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

Чтобы сделать постоянное изменение переменной среды в Windows, используйте Панель управления системой. Выберите Advanced System Settings .На Advanced На вкладке нажмите Переменная среды … . Вы можете добавлять или редактировать существующие переменные среды в областях User и System (Machine). Окна записывает эти значения в реестр, чтобы они сохранялись между сеансами и система перезагружается.

В качестве альтернативы вы можете добавить или изменить переменные среды в PowerShell. профиль. Этот метод работает для любой версии PowerShell на любой поддерживаемой Платформа.

Использование System.Методы окружающей среды

Класс System.Environment предоставляет GetEnvironmentVariable и SetEnvironmentVariable методы, которые позволяют указать область действия Переменная.

В следующем примере используется метод GetEnvironmentVariable для получения машинная установка PSModulePath и SetEnvironmentVariable метод чтобы добавить к значению путь C: \ Program Files \ Fabrikam \ Modules .

  $ path = [Среда] :: GetEnvironmentVariable ('PSModulePath', 'Machine')
$ newpath = $ path + '; C: \ Program Files \ Fabrikam \ Modules'
[Среда] :: SetEnvironmentVariable ("PSModulePath", $ newpath, 'Machine')
  

Для получения дополнительной информации о методах системы .Класс окружающей среды , см. Методы среды.

СМОТРИ ТАКЖЕ

переменных среды в Compose | Документация Docker

Расчетное время чтения: 6 минут

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

Заменить переменные среды в файлах Compose

В оболочке можно использовать переменные среды для заполнения значений. внутри файла Compose:

  Интернет:
  изображение: "webapp: $ {TAG}"
  

Если у вас несколько переменных среды, вы можете заменить их, добавив их в файл переменных среды по умолчанию с именем .env или предоставив путь к файлу переменных среды с помощью параметра командной строки --env-file .

Файл «.env»

Вы можете установить значения по умолчанию для любых переменных среды, указанных в Файл Compose или используется для настройки Compose в файле среды с именем .env . Путь к файлу .env выглядит следующим образом:

  • Начиная с + v1.28 , файл .env помещается в основание каталога проекта
  • Каталог проекта может быть явно определен с помощью параметра --file или COMPOSE_FILE переменная окружения.В противном случае это текущий рабочий каталог, в котором docker compose команда выполняется ( +1.28 ).
  • Для предыдущих версий могли возникнуть проблемы с разрешением файла .env с помощью - файл или COMPOSE_FILE . Чтобы обойти это, рекомендуется использовать --project-directory , который переопределяет путь к файлу .env . Это несоответствие устранено в + v1.28 путем ограничения пути к файлу в каталоге проекта.
  $ cat .env
TAG = v1.5

$ cat docker-compose.yml
версия: '3'
Сервисы:
  Интернет:
    изображение: "webapp: $ {TAG}"
  

Когда вы запускаете docker-compose up , определенная выше служба web использует изображение webapp: v1.5 . Вы можете проверить это с помощью config, которая печатает ваше разрешенное приложение config к терминалу:

  $ конфигурация docker-compose

версия: '3'
Сервисы:
  Интернет:
    изображение: 'webapp: v1.5'
  

Значения в оболочке имеют приоритет над значениями, указанными в .env файл.

Если вы установите TAG на другое значение в вашей оболочке, замена в image вместо этого использует:

  $ экспорт TAG = v2.0
Конфигурация $ docker-compose

версия: '3'
Сервисы:
  Интернет:
    изображение: 'webapp: v2.0'
  

Вы можете изменить путь к файлу среды, используя аргумент командной строки --env-file .

Использование опции «—env-file»

Передавая файл в качестве аргумента, вы можете сохранить его где угодно и назвать уместно, например, .env.ci , .env.dev , .env.prod . Передача пути к файлу выполняется с помощью параметра --env-file :

  docker-compose --env-file ./config/.env.dev вверх
  

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

  $ cat .env
TAG = v1.5

$ cat ./config/.env.dev
TAG = v1.6


$ cat docker-compose.yml
версия: '3'
Сервисы:
  Интернет:
    изображение: "webapp: $ {TAG}"
  

Модель .Файл env загружается по умолчанию:

  $ конфигурация docker-compose
версия: '3'
Сервисы:
  Интернет:
    изображение: 'webapp: v1.5'
  

Передача аргумента --env-file отменяет путь к файлу по умолчанию:

  $ docker-compose --env-file ./config/.env.dev конфигурация
версия: '3'
Сервисы:
  Интернет:
    изображение: 'webapp: v1.6'
  

Когда в качестве аргумента --env-file передается недопустимый путь к файлу, Compose возвращает ошибку:

  $ docker-compose --env-file./doesnotexist/.env.dev конфигурация
ОШИБКА: не удалось найти файл env: /home/user/./doesnotexist/.env.dev
  

Для получения дополнительной информации см. Раздел замены переменных в Составьте ссылку на файл.

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

Вы можете установить переменные среды в контейнерах службы с помощью Ключ «среда», как и с docker run -e ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ ... :

  Интернет:
  среда:
    - ОТЛАДКА = 1
  

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

Вы можете передавать переменные среды из оболочки напрямую в контейнеры службы с ключом «среда» не давая им значения, как в случае с docker run -e VARIABLE... :

  Интернет:
  среда:
    - ОТЛАДКА
  

Значение переменной DEBUG в контейнере берется из значения для та же переменная в оболочке, в которой запускается Compose.

Параметр конфигурации «env_file»

Вы можете передать несколько переменных среды из внешнего файла в контейнеры службы с опцией «env_file», как и в случае с docker run --env-file = FILE ... :

  Интернет:
  env_file:
    - веб-переменные.env
  

Задайте переменные среды с помощью команды docker-compose run

Подобно docker run -e , вы можете устанавливать переменные среды однократно. контейнер с docker-compose run -e :

  docker-compose run -e DEBUG = 1 web python console.py
  

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

  docker-compose run -e DEBUG web python console.py
  

Значение переменной DEBUG в контейнере берется из значения для та же переменная в оболочке, в которой запускается Compose.

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

  1. Составить файл
  2. Переменные среды оболочки
  3. Файл среды
  4. Dockerfile
  5. Переменная не определена

В приведенном ниже примере мы устанавливаем ту же переменную среды в Environment файл и файл Compose:

  $ cat ./Docker/api/api.env
NODE_ENV = тест

$ cat docker-compose.yml
версия: '3'
Сервисы:
  api:
    изображение: 'узел: 6-альпийский'
    env_file:
     - ./Docker/api/api.env
    среда:
     - NODE_ENV = производство
  

Когда вы запускаете контейнер, переменная среды, определенная в Compose файл имеет приоритет.

  $ docker-compose exec api node

> process.env.NODE_ENV
'производство'
  

Наличие любого параметра ARG или ENV в Dockerfile оценивает, только если есть нет записи Docker Compose для среды или env_file .

Особенности контейнеров NodeJS

Если у вас есть запись package.json для сценария : запустите как NODE_ENV = test node server.js , тогда это отменяет любые настройки в вашем docker-compose.yml файл.

Настроить Compose с использованием переменных среды

Для настройки Docker доступны несколько переменных среды.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *