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

    Команда Simple-Server
    03.06.2026
    9 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Общая информация по окружению и переменным

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

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

    Если в значении имеются пробелы, его закрывают кавычками:

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

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

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

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

    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

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

    Теперь вывод примет иной вид:

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

    env VAR1="value" command_to_run command_options

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

    Результат исполнения представлен следующим образом:

    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=()

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

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

    Теперь команда отображает переменные. Для примера сравним выводимые данные командами set и env:

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

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

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

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

    • SHELL – описание оболочки, где интерпретируются вводимые команды – обычно это bash, но пользователь вправе указать иной способ;
    • TERM – указание вида терминала, используемого при старте;
    • USER – наименование аккаунта, который использовался для входа в систему;
    • PWD – рабочая папка;
    • OLDPWD – папка, используемая ранее (необходима для возможности вернуться в нее при помощи cd-);
    • LS_COLORS – коды, выделяющие различными цветами файлы в соответствии с их типом (для удобства восприятия больших объемов информации при беглом осмотре);
    • MAIL – путь, где размещен почтовый ящик активного аккаунта;
    • PATH – перечень папок, где система ищет команды;
    • LANG – поддерживаемый язык;
    • HOME – домашняя папка пользователя;
    • _ – команда, которую выполнила система последней.

    Теперь рассмотрим популярные переменные оболочки:

    • BASHOPTS – опции, которые использовались при обращении к bash;
    • BASH_VERSION – текущая версия bash в понятном для чтения виде;
    • BASH_VERSINFO – то же, но в виде машинного кода;
    • COLUMNS – количество столбцов, которые надо отображать при выводе;
    • DIRSTACK – стек директорий, доступных командам pushd и popd;
    • HISTFILESIZE – количество строк, сохраняемых в журнале исполненных команд;
    • HISTSIZE – то же, но относится к лимиту хранения уже в памяти;
    • HOSTNAME – действующее имя сервера;
    • IFS – разделитель поля, без указания применяется пробел;
    • PS1 – вид приглашения при старте текущего сеанса;
    • PS2 – то же, но для случаев использования нескольких строк;
    • SHELLOPTS – опции, задаваемые командой set;
    • UID – ID активного аккаунта.

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

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

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

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

    Команда задает пустую строку. Раз в значении есть пробел, мы его заключили в кавычки. И так как в конце стоит восклицательный знак (спецсимвол bash), использован их одинарный вид. Текущая только что заданная переменная доступна только в активном сеансе, передать дочерним процессам ее не получится.

    Чтобы подтвердить это, попробуем найти новую переменную:

    Повторим действие командой printenv:

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

    В этом случае вывод будет таким:

    Вывод простой – чтобы обратиться к значению переменной, достаточно добавить знак $. Откроем новый bash, чтобы проверить, передается ли информация «дочкам».

    Значение не возвращается, это ожидаемо. Теперь вернемся к изначальной оболочке:

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

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

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

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

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

    export NEW_VAR="Testing export"

    Проверим результат экспорта:

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

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

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

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

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

    printenv | grep TEST_VAR set | grep TEST_VAR

    Можно целиком сбросить значения переменных:

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

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

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

    Сеансы оболочки с входом и без него, интерактивные и не интерактивные

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

    Можно разделить сеансы оболочки на интерактивные и не интерактивные. Первый вариант – всегда прикреплен к терминалу. Второй, наоборот, не прикреплен к нему. Вернемся к разделению «вход – не вход». Варианты отличает еще и различный набор считываемых файлов. Так, при осуществлении входа система обращается сначала к файлу /etc/profile.

    Затем будет осуществлен поиск конфигурационного файла в домашней директории пользователя, откуда оболочка считает его индивидуальные настройки. В списке – ~/.bash_profile, ~/.bash_login и ~/.profile/. Если речь идет об оболочке без входа, система обратится к файлу /etc/bash.bashrc, а следом к ~/.bashrc (важно учитывать, что /etc/bash.bashrc используется только в Debian и дистрибутивах, созданных на его основе). Подробнее читайте в официальной документации по Bash.

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

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

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

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


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны