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

  Дмитрий Бушуев  | 

  Обновл. 23 Окт 2021  | 

 1449

 ǀ   2 

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

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

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

Переменные окружения и переменные оболочки

Переменные можно разделить на две основные категории:

   Переменные окружения (или «переменные среды») — это переменные, доступные в масштабах всей системы и наследуемые всеми дочерними процессами и оболочками.

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

Все переменные имеют следующий формат:

KEY=значение1
KEY="Какое-то другое значение"
KEY=значение1:значение2

При этом также следует придерживаться определенных правил:

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

   При присвоении переменной нескольких значений они должны быть разделены символом :.

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

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

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

   команда printenv — выводит список всех переменных окружения (или какую-то отдельно заданную переменную);

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

   команда unset — удаляет переменные оболочки и переменные окружения;

   команда export — создает переменную окружения.

Поиск и вывод переменных окружения


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

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

$ printenv HOME

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

Вы также можете передать команде printenv сразу несколько аргументов, например:

$ printenv LANG PWD

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

$ printenv

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

   USER — текущий пользователь.

   PWD — текущая директория.

   OLDPWD — предыдущая рабочая директория. Используется оболочкой для того, чтобы вернуться в предыдущий каталог при выполнении команды cd -.

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

   SHELL — путь к оболочке текущего пользователя (например, bash или zsh).

   EDITOR — заданный по умолчанию редактор. Этот редактор будет вызываться в ответ на команду edit.

   LOGNAME — имя пользователя, используемое для входа в систему.

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

   LANG — текущие настройки языка и кодировки.

   TERM — тип текущего эмулятора терминала.

   MAIL — место хранения почты текущего пользователя.

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

Наиболее распространенные переменные оболочки:

   BASHOPTS — список задействованных параметров оболочки, разделенных двоеточием.

   BASH_VERSION — версия запущенной оболочки bash.

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

   DIRSTACK — стек директорий, к которому можно применять команды pushd и popd.

   HISTFILESIZE — максимальное количество строк для файла истории команд.

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

   HOSTNAME — имя текущего хоста.

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

   PS1 — определяет внешний вид строки приглашения ввода новых команд.

   PS2 — вторичная строка приглашения.

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

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

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

$ set

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

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

$ printenv | grep [ИМЯ_ПЕРЕМЕННОЙ]

Ниже представлен пример поиска переменных, в названии которых содержится строка USER:

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

$ echo $BASH_VERSION


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

Чтобы создать новую переменную оболочки с именем, например, NEW_VAR и значением Ravesli.com, просто введите:

$ NEW_VAR='Ravesli.com'

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

$ echo $NEW_VAR

либо

$ set | grep NEW_VAR

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

$ printenv NEW_VAR

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

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

$ bash -c 'echo $NEW_VAR'

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


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

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

$ export NEW_VAR

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

$ printenv NEW_VAR

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

$ bash -c 'echo $NEW_VAR'

Результат:

Ravesli.com

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

$ export MY_NEW_VAR="My New Var"

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

Как сделать переменные окружения постоянными?

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

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

$ sudo nano ~/.bashrc

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

export [ИМЯ_ПЕРЕМЕННОЙ]=[ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ]

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

$ source ~/.bashrc

Чтобы задать постоянные переменные окружения для всех пользователей, создайте .sh-файл в каталоге /etc/profile.d:

$ sudo nano /etc/profile.d/[имя_файла].sh

Синтаксис добавления переменных в файл такой же, как и в случае с файлом .bashrc:

Сохраните и закройте файл. Изменения будут применены при следующем входе в систему.

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


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

$ unset NEW_VAR


Заключение

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

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

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


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (3 оценок, среднее: 5,00 из 5)
Загрузка...

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

  1. newpson:

    > TERM — текущий эмулятор терминала.
    А не будет правильней назвать это типом терминала? xterm, vt100, linux, screen и прочие из /usr/share/terminfo/* — это ли не они хранятся в этой переменнной? Поправьте, если ошибаюсь.

    1. Юрий:

      Спасибо, исправил)

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

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