Linux

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

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

Обновлено 17 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 11+CentOS/RHEL 8+Bash 4.0+Zsh 5.0+

Введение / Зачем это нужно

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

Требования / Подготовка

  • Операционная система: Любой дистрибутив Linux (Ubuntu, Debian, CentOS, Fedora, Arch и т.д.).
  • Командная оболочка (Shell): Руководство ориентировано на bash (по умолчанию в большинстве дистрибутивов) и zsh. Синтаксис export стандартен.
  • Права доступа: Для редактирования файлов в домашнем каталоге (~/.bashrc, ~/.profile) нужны стандартные права пользователя.
  • Текстовый редактор: Рекомендуется familiarity с nano (простой) или vim/vim.tiny (мощный).

Шаг 1: Просмотр текущих переменных окружения

Прежде чем что-то изменять, нужно понять, что уже есть. Для этого есть несколько команд:

  • env — выводит все переменные окружения текущей сессии.
  • printenv — работает аналогично env, но может принимать имя переменной: printenv PATH.
  • echo $VAR_NAME — показывает значение конкретной переменной в текущей оболочке. Удобно, но переменная должна быть уже определена в оболочке.
# Показать все переменные
env

# Показать только PATH
echo $PATH

# Проверить, существует ли переменная
printenv HOME

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

Шаг 2: Создание временной переменной (для текущей сессии)

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

  1. Присвоение значения: MY_VAR="значение".
  2. Экспорт в окружение: export MY_VAR.
# Создаём переменную и экспортируем её
export FAVORITE_EDITOR="nano"
export PROJECT_PATH="/home/user/myproject"

# Проверяем, что она доступна
echo $FAVORITE_EDITOR
# Вывод: nano

# Запускаем дочерний процесс (например, другой скрипт), который увидит эту переменную
./some_script.sh

⚠️ Важно: Если вы просто выполните MY_VAR="value" без export, переменная будет существовать только в текущей оболочке, но не будет передана запускаемым из неё программам.

Шаг 3: Изменение переменной PATH

Одна из самых частых задач — добавить собственный каталог с исполняемыми файлами в PATH. Всегда добавляйте новый путь к существующему значению $PATH, а не перезаписывайте его, иначе сломаете доступ к системным командам (ls, cd, apt и т.д.).

# Правильно: добавляем каталог ~/bin в конец PATH
export PATH="$PATH:$HOME/bin"

# Проверяем результат
echo $PATH
# В выводе в конце будет :/home/ваш_логин/bin

# Можно добавить в начало (высший приоритет), но будьте осторожны
# export PATH="$HOME/bin:$PATH"

Шаг 4: Создание постоянных переменных через ~/.bashrc

Файл ~/.bashrc (точка в начале — скрытый файл) выполняется при каждом запуске нового интерактивного не-логического shell. Это идеальное место для переменных, которые нужны вам в каждом новом терминале.

  1. Откройте файл в текстовом редакторе:
    nano ~/.bashrc
    
  2. Добавьте в конец файла строки с командами export для ваших переменных:
    # Мои кастомные настройки
    export EDITOR="nano"
    export LANG="ru_RU.UTF-8"
    export PATH="$PATH:$HOME/.local/bin"
    
  3. Сохраните файл (Ctrl+O в nano, затем Enter) и закройте редактор (Ctrl+X).
  4. Примените изменения к текущей сессии, не перезапуская терминал:
    source ~/.bashrc
    
    Или просто откройте новое окно терминала.

Шаг 5: Создание глобальных переменных через ~/.profile (или ~/.bash_profile)

Если вам нужно, чтобы переменная была доступна при любом входе в систему (включая графический вход, запуск скриптов через cron или другие программы, запускаемые из меню), используйте файл ~/.profile (или ~/.bash_profile в некоторых системах). Этот файл читается при запуске login shell.

  1. Откройте (или создайте) файл:
    nano ~/.profile
    
  2. Добавьте туда нужные export-команды. Пример для JAVA_HOME:
    # Настройка Java
    export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
    export PATH="$JAVA_HOME/bin:$PATH"
    
  3. Сохраните файл. Изменения вступят в силу после следующего входа в систему (перезагрузки или выхода/входа). Чтобы применить их сейчас в текущем терминале, выполните:
    source ~/.profile
    

💡 Совет: Для большинства пользователей, работающих в основном в терминале, достаточно ~/.bashrc. Используйте ~/.profile для настроек, которые должны быть видны всем программам, запущенным от вашего имени.

Шаг 6: Создание переменной для одной команды (Inline)

Иногда нужно задать переменную только для выполнения одной конкретной команды, не засоряя окружение. Синтаксис: VAR=value command.

# Выполнить команду 'make' с указанием конкретного компилятора
CC=gcc-11 make

# Запустить скрипт с временной локалью
LANG=ru_RU.UTF-8 ./setup_script.sh

# Проверить, что глобальная переменная не изменилась
echo $LANG
# Вывод будет прежним, если он был задан в .bashrc/.profile

Проверка результата

После выполнения настроек убедитесь, что всё работает:

  1. Перезапустите терминал (или выполните source для соответствующего файла).
  2. Проверьте наличие ваших переменных:
    echo $MY_VAR
    printenv MY_VAR
    
  3. Проверьте, что PATH содержит нужные пути и в правильном порядке:
    echo $PATH | tr ':' '\n'  # Вывод каждого пути с новой строки
    
  4. Проверьте, что команды из добавленного каталога доступны:
    which my_custom_tool  # Должен показать полный путь к исполняемому файлу
    

Возможные проблемы

  • «Команда не найдена» после добавления в PATH: Убедитесь, что вы добавили путь к каталогу, а не к самому исполняемому файлу. Проверьте, что файл действительно существует и имеет права на выполнение (chmod +x файл).
  • Изменения в .bashrc/.profile не применяются: Вы уверены, что редактировали правильный файл? Проверьте, какой shell вы используете (echo $SHELL). Убедитесь, что вы выполнили source ~/.bashrc или перезапустили терминал. Для .profile может потребоваться полный выход/вход в систему.
  • Конфликт имён переменных: Избегайте использования общих имён (PATH, HOME, USER) для своих переменных, если только вы не уверены в последствиях. Используйте префикс, например, MYAPP_DEBUG.
  • Проблемы с правами: При запуске скриптов или программ, которые зависят от ваших переменных, убедитесь, что у вас есть права на выполнение. Ошибки доступа могут возникать, если скрипт запущен через sudo — переменные текущего пользователя по умолчанию не передаются. Используйте sudo -E для сохранения окружения (осторожно!) или настройте переменные системно в /etc/environment (требует прав root).
  • Кодировка/локализация: Если после установки LANG или LC_* символы отображаются некорректно, убедитесь, что соответствующая локальная генерация установлена в системе (sudo locale-gen ru_RU.UTF-8 в Debian/Ubuntu).

Часто задаваемые вопросы

В чём разница между .bashrc и .profile?
Почему мои переменные не сохраняются после перезагрузки?
Как добавить каталог в переменную PATH?
Могу ли я задать переменную окружения только для одной команды?

Полезное

Просмотр текущих переменных окружения
Создание временной переменной
Добавление каталога в PATH
Создание постоянной переменной (для Bash)
Создание постоянной переменной (для всех сессий)