Гид по технологиям

Как просмотреть переменные окружения в Linux

10 min read Linux Обновлено 28 Dec 2025
Как просмотреть переменные окружения в Linux
Как просмотреть переменные окружения в Linux

Терминал Linux с командной строкой

Быстрые ссылки

  • Что такое переменные окружения в Linux?
  • Как показать значение переменной окружения
  • Как перечислить переменные с помощью printenv
  • Общие переменные окружения
  • Диагностика и проверки окружения

Краткое содержание

Переменные окружения — это пары “имя=значение”, которые процессы читают и наследуют. В терминале чаще всего используют echo, printenv и env. Для поиска удобны grep и просмотрщик less. Если переменная не видна, проверьте, экспортирована ли она, где она задана (локально в shell или в файле профиля) и не перекрывается ли системными настройками.

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

Коротко: переменная окружения — это именованное значение, доступное процессу и его дочерним процессам. Процесс читает значение по имени. Если переменная не экспортирована, дочерние процессы её не увидят.

  • Environment variable (переменная окружения): строка формата NAME=VALUE, доступная процессу.
  • Shell (оболочка): программа, принимающая команды и управляющая переменными в интерактивной сессии.
  • Экспорт (export): операция, делающая локальную переменную видимой дочерним процессам.

Понимание этих трёх понятий помогает при диагностике проблем с окружением.

Как показать значение конкретной переменной

Если вы знаете имя переменной, используйте echo:

echo $HOME
echo $USER

echo подставляет значение переменной в строку и печатает его в stdout. Если переменная не задана, echo выведет пустую строку.

Короткая проверка на существование переменной:

if [ -z "$FOO" ]; then
  echo "FOO не задана или пуста"
else
  echo "FOO=$FOO"
fi

printenv против env: в чём разница

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

Примеры:

printenv
env  # покажет список, но чаще используется как: env VAR=value command

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

env LANG=C.UTF-8 my_app

Это запустит my_app с локалью C.UTF-8, не меняя глобальные значения.

Как использовать printenv: опции и поведение

Основные сценарии работы с printenv:

  • Показать все переменные:
printenv
  • Использовать null-терминатор (редко нужно):
printenv -0

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

Чтобы пролистывать вывод удобнее, используйте less:

printenv | less

Для поиска по имени переменной используйте grep:

printenv | grep DISPLAY

Пример: если вы ищете всё, что связано с языком и локалью:

printenv | grep -i lang

Когда переменная не отображается: типичные причины

  • Переменная задана локально в shell, но не экспортирована. Локальная переменная видна только в текущей оболочке.
  • Переменная установлена в конфигурации, которая ещё не выполнена (например, в ~/.bashrc для некорректного типа сессии).
  • Переменная переопределяется позже при запуске процесса.
  • Переменная удалена или переименована.

Проверьте локальные переменные и функцию declare:

declare -p VAR 2>/dev/null || echo "VAR не найдено"

Или используйте set для просмотра всех переменных и функций в текущей shell-сессии:

set | less

set выведет гораздо больше (включая функции и локальные переменные), тогда как printenv показывает только экспортированные переменные.

Как установить и сделать переменную постоянной

Чтобы в текущей сессии задать переменную и экспортировать её дочерним процессам:

export FOO=bar

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

  • Для интерактивной Bash-сессии: ~/.bashrc или ~/.bash_profile (в зависимости от дистрибутива и типа сессии).
  • Для системного уровня: /etc/environment или /etc/profile.d/*.sh (требуется sudo).

Пример записи в ~/.bashrc:

# Добавлено вручную: переменные окружения
export EDITOR=nano
export PATH="$HOME/bin:$PATH"

После изменения ~/.bashrc перезапустите сессию или выполните:

source ~/.bashrc

Просмотр окружения процесса: /proc//environ

Иногда нужно посмотреть переменные окружения уже запущенного процесса. Для этого можно прочитать /proc//environ. Там значения разделены нулевыми байтами.

Пример (требуются права чтения для соответствующего PID):

tr '\0' '\n' < /proc/1/environ | grep -i PATH

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

Частые переменные окружения и их назначение

Ниже — перевод и пояснения распространённых переменных, которые вы чаще всего встретите.

  • BASHOPTS: опции, с которыми запущен bash.
  • BASH_VERSION: версия bash.
  • COLUMNS: ширина терминала в колонках.
  • DIRSTACK: стек директорий для pushd/popd.
  • HISTFILESIZE: максимальный размер файла истории (строки).
  • HISTSIZE: максимальное количество строк истории в памяти.
  • HOME: домашняя директория пользователя.
  • HOSTNAME: имя компьютера.
  • IFS: разделитель полей для парсинга (обычно пробел).
  • LANG: локаль и кодировка по умолчанию.
  • LS_COLORS: коды цветов для ls.
  • MAIL: путь к почтовому ящику пользователя.
  • OLDPWD: предыдущая рабочая директория.
  • PS1: основной формат командной строки (prompt).
  • PATH: список директорий через двоеточие, в которых ищутся исполняемые файлы.
  • PWD: текущая рабочая директория.
  • SHELL: путь к вашей оболочке (например, /bin/bash).
  • TERM: эмуляция терминала.
  • UID: идентификатор пользователя.
  • USER: имя текущего пользователя.
  • _: последний выполненный командный аргумент (в контексте printenv чаще равен printenv).

Обратите внимание: набор переменных зависит от дистрибутива, оконной среды и конфигурации.

Вывод printenv с опцией -0 делает строку нечитабельной

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

Вывод printenv: стандартный читаемый формат одна переменная на строку

Полезные приёмы и шаблоны (cheat sheet)

  • Показать всё и поиск по ключевому слову:
printenv | grep -i "user"
  • Посмотреть локальные (неэкспортированные) переменные и функции:
set | less
  • Прочитать окружение конкретного процесса:
tr '\0' '\n' < /proc//environ | less
  • Экспортировать переменную временно:
export TMP_VAR=value
  • Запустить команду с изменённым окружением без изменения текущего:
env VAR=value command

Диагностика проблем: чек‑лист и рабочий процесс

Шаги для быстрого поиска причин некорректного окружения:

  1. Убедитесь, что переменная экспортирована: export VAR.
  2. Проверьте, где она задана: grep -n "VAR" ~/.bashrc ~/.profile /etc/environment /etc/profile.d/*.
  3. Проверьте локальные переменные в текущей сессии: set | grep VAR.
  4. Посмотрите окружение целевого процесса: tr '\0' '\n' < /proc//environ | grep VAR.
  5. При изменении конфигурационных файлов перезапустите сессию или выполните source.
  6. Если проблема с PATH, временно проверьте echo $PATH и запустите which .

Краткий playbook для восстановления PATH:

  • Если пропали системные утилиты (например, ls, cp):
    • Выполните echo $PATH и убедитесь, что присутствуют /usr/bin и /bin.
    • Если их нет, временно восстановите: export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.
    • Исправьте файл, где PATH был перезаписан (например, в ~/.bashrc), заменив конструкции PATH="$HOME/bin" на PATH="$HOME/bin:$PATH".

Ролевые чек‑листы

Для разработчика:

  • Проверить переменные, связанные с локалью и билд-средой (LANG, LC_*).
  • Убедиться, что PATH включает путь к инструментам сборки.
  • Не хранить секреты в открытом виде в ~/.bashrc; использовать менеджеры секретов.

Для системного администратора:

  • Проверить системные файлы: /etc/environment, /etc/profile.d/*.
  • Проверить, не задаёт ли systemd юнит переменные через Environment=.
  • Убедиться, что при обновлениях пакетов не переписываются профили пользователей.

Для специалиста по безопасности:

  • Исключить хранение паролей и токенов в глобальных файлах конфигурации.
  • Ограничить читабельность файлов с секретами правами доступа.
  • Проверить процессы на утечки через /proc/*/environ.

Когда перечисление переменных не помогает: альтернативные подходы

  • Если программа использует собственный конфиг, проверьте её конфигурационные файлы. Переменные окружения — не единственный источник настроек.
  • Для сервисов systemd: изучите юниты и директивы Environment= и EnvironmentFile=.
  • Для контейнеров: проверьте переменные, заданные в Dockerfile или в docker-compose.

Безопасность и приватность

  • Не публикуйте вывод printenv/ env в публичных логах — там могут быть ключи и токены.
  • Используйте утилиты вроде pass, secret‑store или Vault для секретов.
  • Ограничивайте права на файлы, где хранятся переменные (chmod 600).

Совместимость между оболочками

  • Bash/zsh/sh: используют export для экспорта переменных.
  • Fish: синтаксис иной — set -x VAR value.
  • Systemd: переменные можно задать в unit‑файлах через Environment=.

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

Тесты и критерии приёмки

Чтобы убедиться, что изменение переменной прошло успешно:

  • Acceptance 1: После добавления export VAR=val дочерний процесс (например, bash -c 'echo $VAR') должен вывести val.
  • Acceptance 2: После внесения изменения в ~/.bashrc и выполнения source ~/.bashrc вывод echo $VAR должен вернуть ожидаемое значение.
  • Acceptance 3: Для системных изменений (например, /etc/environment) перезагрузка или новая логин-сессия должна сохранить значение.

Примеры и типичные команды (практическая подборка)

  • Показать PATH красиво, разбив по строкам:
echo $PATH | tr ':' '\n' | nl
  • Показать только переменные с подстрокой HOME или USER:
printenv | grep -E 'HOME|USER'
  • Найти все переменные, содержащие слово password/secret (предупреждение: это может найти ложные срабатывания):
printenv | grep -i -E 'pass(word)?|secret|token'
  • Просмотреть переменные окружения процесса с PID 1234:
sudo tr '\0' '\n' < /proc/1234/environ | less

Короткая галерея исключительных случаев

  • Переменная существует в интерактивной shell-сессии, но printenv её не показывает — значит, она не экспортирована.
  • PATH был перезаписан в конфиге без приставки :$PATH — в этом случае системные пути будут потеряны.
  • Службы systemd не видят изменения в ~/.bashrc — systemd не читает пользовательские dotfiles, используйте EnvironmentFile или unit‑файл.

Краткое руководство по откату изменений (runbook)

Если изменение переменной привело к сбою:

  1. Откатите файл конфигурации до резервной копии (если есть) или удалите внесённую строку.
  2. Восстановите PATH временно:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  1. Перезапустите сервис или сессию.
  2. Проанализируйте логи, найдите причину некорректного присваивания.

Краткая методология проверки окружения (минимум шагов)

  1. Запустить printenv | less.
  2. Сузить поиск grep по ключевым словам.
  3. Проверить, экспортирована ли переменная (declare/set).
  4. Если требуется — посмотреть окружение процесса в /proc//environ.
  5. Исправить конфигурационный файл и применить изменения (source или перезапуск).

Бокс с ключевыми идеями

  • Переменные окружения — средство передачи конфигурации процессам.
  • Printenv показывает только экспортированные переменные.
  • Set/declare дают более полный взгляд на локальное состояние shell.
  • Env запускает программу в модифицированном окружении.

1‑строчный глоссарий

  • export: команда для пометки переменной как экспортируемой.
  • printenv: выводит экспортированные переменные и их значения.
  • env: запускает процесс с модифицированным окружением или выводит окружение при отсутствии аргументов.

Короткое объявление для команды (100–200 слов)

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

В Linux для просмотра переменных окружения используйте printenv. Для поиска по имени переменной пропускайте вывод через grep, а для удобного чтения — через less. Помните: printenv показывает только экспортированные переменные; если переменная не видна, проверьте, не задана ли она локально без export. Изменения постоянного характера вносятся в ~/.bashrc, /etc/environment или systemd unit (EnvironmentFile). Для просмотра окружения запущенного процесса используйте /proc//environ (заменяя нулевые байты на переносы строк).

Итог

Переменные окружения — простой и мощный инструмент настройки поведения приложений и оболочки. Для большинства задач достаточно printenv, grep, echo и базовых правок в ~/.bashrc или /etc/environment. При диагностике обращайте внимание на область видимости (локальная vs экспортированная), на то, где именно задаётся переменная, и на возможные перезаписи.

| | Linux Commands | | Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr | | | Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | | | Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld | |

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как подключить Android к машине и слушать музыку
Автомобиль

Как подключить Android к машине и слушать музыку

Создание качественного AI-арта: советы и приёмы
AI Art

Создание качественного AI-арта: советы и приёмы

Как исправить буферизацию в Kodi
Руководство

Как исправить буферизацию в Kodi

Обновите буфер обмена Windows 10 с Ditto
Windows

Обновите буфер обмена Windows 10 с Ditto

Восстановление, обновление и сброс Windows 8
Windows

Восстановление, обновление и сброс Windows 8

Как использовать iCloud на Android при переходе с iPhone
Мобильные инструкции

Как использовать iCloud на Android при переходе с iPhone