- Переменные окружения в Linux
- Зачем нужны переменные окружения?
- Получение информации о переменных окружения
- Виды переменных окружения
- Системные переменные
- Пользовательские переменные
- Временные или переменные сеанса
- Установка переменных окружения
- Как установить и посмотреть переменные окружения Linux
- Переменные среды и переменные оболочки
- Список переменных среды
- Установка переменных среды
- Постоянные переменные среды
Переменные окружения в Linux
В системах Linux для хранения и использования некоторых настроек и параметров используются специализированные контейнеры данных — переменные окружения. Они представляют собой именованные переменные, в которых хранится текстовое значение. В качестве значения могут использоваться пути, имена команд, файлов и. т. д. Переменные окружения можно редактировать, т. е. изменять их значения, удалять или создавать новые. Переменными окружения пользуются как система, так и программы, скрипты или демоны для своей работы.
Зачем нужны переменные окружения?
Если коротко, то они необходимы для организации различного рода окружений: системных, пользовательских, сеансовых, т. е. для хранения настроек соответствующих сред внутри системы. К примеру, программы для своей работы используют библиотечные функции, являющиеся одним из важнейших системных ресурсов. Или, например, интерпретатор команд способен находить соответствующие командам исполняемые файлы без необходимости каждый раз указывать соответствующие пути.
Но как программы «узнают», где можно найти те или иные ресурсы? Из переменных окружения. Таким же образом происходит запуск и исполнение команд в командной консоли, т. к. благодаря переменной окружения PATH интерпретатор bash (или любая другая командная оболочка) находит программу (исполняемый файл или библиотеку) по указанному в PATH пути. И таким же образом, к примеру, команда man «знает», что запрашиваемые страницы справочных руководств нужно искать согласно значению переменной окружения MANPATH.
Получение информации о переменных окружения
В работе, тесно связанной с системным администрированием довольно часто приходится сталкиваться с такими ситуациями, когда необходимо узнать значения некоторых переменных окружения или же вывести список полный список таковых. Для этой цели существует несколько специализированных утилит. В подавляющем большинстве случаев соответствующие пакеты уже предустановлены в системе. Самыми распространёнными из таких утилит являются printenv, env, а также export. Так, например, для того, чтобы вывести список действующих переменных окружения нужно дать следующую команду:
В данном выводе представлен сильно сокращённый список переменных окружения для 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:
Для вывода значения конкретной переменной:
В последнем случае будет выведены все переменные, содержащие фразу «PATH».
Виды переменных окружения
Как уже отмечалось, в системе существуют, образно выражаясь, различные рабочие среды для разных уровней доступа и продолжительности действия переменных. Для организации работы пользователей действует пользовательская среда (окружение), для корректного функционирования компонентов системы — системное окружение, доступное только суперпользователю. В процессе работы также можно устанавливать временные переменные окружения, доступные текущему пользователю и только на время действия текущего сеанса.
Ниже приведены некоторые наиболее часто используемые переменные окружения:
Имя | Описание |
HOME | Определяет путь к домашнему каталогу текущего пользователя |
PWD | Определяет текущий активный каталог |
OLDPWD | Предыдущий активный каталог |
SHELL | Определяет программу-командную оболочку |
TERM | Содержит имя текущей запущенной программы-терминала |
PAGER | Определяет программу для постраничного вывода страниц справочных руководств |
EDITOR | Определяет программу для редактирования текстовых файлов |
VISUAL | Определяет программу для редактирования текстовых файлов с расширенными возможностями (vim, emacs) |
Определяет путь к каталогу, в котором должны храниться файлы входящей электронной почты. | |
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 – для использования модулем
Временные или переменные сеанса
Переменные окружения также можно устанавливать временно. Это значит, что переменная будет действовать только во время действия текущего сеанса пользователя. В таких случаях удобно иметь определённый скрипт, содержащий код с необходимыми переменными, который можно в любое время запускать командой:
Или же устанавливать их вручную командой export.
Установка переменных окружения
Чтобы установить временную (для сеанса) переменную окружения достаточно выполнить команду со следующим синтаксисом:
Если нужно временно модифицировать переменную PATH, то можно выполнить export:
Для того, чтобы удалить временную переменную можно воспользоваться командой unset:
Для установки системных или пользовательских переменных окружения следует помещать код с нужными переменными в соответствующие файлы инициализации окружения. Например, чтобы добавить на системном уровне какой-либо пользовательский каталог (пусть это будет
/bin), нужно один из файлов (/etc/profile или /etc/bash.bashrc) дополнить следующим кодом:
В случае, если нужно выполнить то же самое для пользовательского уровня переменных окружения, то редактировать нужно файл (для локального входа)
/.bashrc (для удалённого входа, например по SSH –
Этот код включит использование командным интерпретатором вышеупомянутой команды drush (предварительно установленной по указанному пути, конечно) для CMS Drupal.
Чтобы можно было видеть сделанные изменения, нужно их зафиксировать:
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как установить и посмотреть переменные окружения Linux
В системах на базе Linux и Unix переменные среды представляют собой набор именованных динамических значений. Они хранятся в системе и используются приложениями, запущенными в оболочках. Проще говоря, переменная среды — это переменная с именем и связанным значением, доступная из ОС.
Переменные среды позволяют настраивать работу системы и поведение приложений в ней. Например, переменная среды может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам или языковых параметрах системы и раскладки клавиатуры. В этом руководстве мы объясним, как смотреть и устанавливать переменные среды и оболочки.
Переменные среды и переменные оболочки
Обычно, переменные имеют такой формат:
Несколько основных правил для работы с переменными:
- Имена переменных чувствительны к регистру. Все переменные среды должны называться С ЗАГЛАВНОЙ БУКВЫ.
- Чтобы назначить несколько значений для одной переменной используйте знак «двоеточия» в качестве разделителя.
- Символ «=» не должны окружать пробелы.
Переменные можно классифицировать на две основные категории: переменные среды и переменные оболочки:
- Переменные среды — это такие переменные, которые доступны для всей системы и наследуются всеми дочерними процессами и оболочками.
- Переменные оболочки(shell) — переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, такая как zsh и bash, имеет свой собственный набор внутренних переменных.
Есть несколько доступных команд, которые позволяют вам устанавливать и просматривать переменные среды в Linux:
- env — Эта команда позволяет запускать другую программу в пользовательской среде без изменения текущей. Если использовать её без дополнительных аргументов, она выведет список текущих переменных среды.
- printenv — Команда выведет на экран все или часть переменных.
- set — Команда устанавливает или отменяет переменные оболочки. Если её использовать без аргумента, тогда она выведет список всех переменных, включая переменные окружения и оболочки, а также некоторые функции оболочки.
- unset — Удаляет переменные оболочки и среды.
- export — Устанавливает переменные среды.
Список переменных среды
Наиболее часто используемая команда для отображения переменных среды — printenv. Если имя переменной передается в качестве аргумента команды, то отображается только значение этой переменной. Если же аргумент не указан, printenv выводит список всех переменных.
Например, чтобы отобразить значение переменной среды HOME, вы должны выполнить:
Выходные данные выведут домашний путь текущего пользователя системы:
Вы также можете передавать команде printenv более одного аргумента:
Если вы запустите команду printenv или env без аргументов, тогда вы получите список всех переменных среды:
Ниже приведены несколько наиболее популярных имен переменных среды:
- USER — Текущий пользователь системы.
- HOME — Домашняя директория пользователя.
- EDITOR — Редактор по умолчанию. Это редактор, который будет использоваться при вводе edit в терминале.
- SHELL — Путь к оболочке текущего пользователя, такой как bash или zsh.
- LOGNAME — Имя текущего пользователя
- PATH — Список каталогов, которые нужно обойти при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах исполняемый файл и использовать первый найденный.
- LANG — Настройки языка.
- TERM — Текущий терминал.
- MAIL — Местоположение, где хранится почта текущего пользователя.
Команды printenv и env выводят только переменные окружения. Если вы хотите получить список всех переменных, включая окружение, оболочку и переменные, а также функции оболочки, вы можете использовать команду set без аргументов:
Команда отобразит большой список всех переменных, поэтому правильнее будет направить вывод в команду less.
Конечно, можно использовать echo для вывода переменной оболочки. Например, чтобы вывести значение переменной BASH_VERSION выполните:
Установка переменных среды
Чтобы лучше показать разницу между переменными оболочки и среды, попробуем начать с установки переменных оболочки, а затем перейдем к переменным среды.
Создадим новую переменную оболочки с именем MY_VAR и значением Abuzov, для этого введём:
Вы можете проверить, что переменная установлена, используя echo $MY_VAR. Для фильтрации вывода команды set с помощью grep set | grep MY_VAR:
Используйте команду printenv, чтобы проверить, является ли эта переменная переменной среды:
Вывод окажется пустым — это говорит о том, что переменная не является переменной окружения. Также можно напечатать переменную в под-оболочке, и вы получите пустой вывод.
Команда export используется для установки переменных окружения. Чтобы создать переменную, просто экспортируйте переменную оболочки как переменную среды:
Теперь выполнение команды printenv MY_VAR выведет на экран значение Abuzov. Дополнительно, можно устанавливать переменные среды командой в одну строку:
Переменные среды, созданные таким образом, доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из системы, все переменные будут потеряны.
Постоянные переменные среды
Для создания постоянных переменных окружения, нужно определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
- /etc/environment — Используйте этот файл для настройки общих системных переменных. Переменные в этом файле устанавливаются в следующем формате
- /etc/profile — Переменные, заданные в этом файле, загружаются при каждом входе в оболочку bash. Чтобы объявить переменные окружения в этом файле вам нужно использовать команду экспорта:
- Конфигурационные файлы для отдельных пользовательских оболочек. Например, если вы используете Bash, вы можете объявить переменные в
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду source:
В этом руководстве мы показали, как устанавливать и перечислять переменные окружения и оболочки.
Источник