Переменные среды
Обновлено 7 ноября 2026
Страница актуальна для Portage 3.0.82 и Calculate Utilities 3.8.
Введение
Переменная среды — это именованный объект, содержащий информацию, которую используют одно или несколько приложений. С помощью переменных среды можно легко менять настройку одной или нескольких программ.
Важные примеры
В следующей таблице перечислен ряд переменных, используемых в системе Linux, и описано их назначение. Примеры значений приведены после таблицы.
| Переменная | Описание |
|---|---|
| PATH | Список каталогов через двоеточие, в которых система ищет исполняемые файлы. Если введено имя исполняемого файла (например, ls, rc-update или emerge), которого нет ни в одном из перечисленных каталогов, система его не выполнит — если только команда не задана полным путём, например /bin/ls. |
| ROOTPATH | Та же функция, что у PATH, но перечислены только каталоги, которые просматриваются при вводе команд пользователем с правами root. |
| LDPATH | Список каталогов через двоеточие, в которых динамический компоновщик ищет библиотеки. |
| KDEDIRS | Список каталогов через двоеточие, содержащих ресурсы KDE. |
| CONFIG_PROTECT | Список каталогов через пробел, которые Portage защищает при обновлении пакетов. |
| CONFIG_PROTECT_MASK | Список каталогов через пробел, которые не должны защищаться Portage при обновлении пакетов. |
Ниже представлен пример определения всех этих переменных:
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin" ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" LDPATH="/lib:/usr/lib:/usr/local/lib" MANPATH="/usr/share/man:/usr/local/share/man" INFODIR="/usr/share/info:/usr/local/share/info" PAGER="/usr/bin/less" EDITOR="/usr/bin/vim" KDEDIRS="/usr" # Каталоги, защищаемые при обновлении пакетов. CONFIG_PROTECT="/etc /usr/share/config /var/bind /var/calculate/etc" # Каталоги, которые НЕ защищаются при обновлении пакетов. CONFIG_PROTECT_MASK="/etc/gconf"
Глобальное определение переменных
Каталог /etc/env.d
Для централизованного определения этих переменных в Calculate Linux служит каталог /etc/env.d. В нём лежит немало файлов — например, 50baselayout или gcc/config-x86_64-pc-linux-gnu: каждый содержит переменные, нужные программе, указанной в его названии.
Так, при установке sys-devel/gcc ebuild создаёт файл /etc/env.d/gcc/x86_64-pc-linux-gnu-16, где 16 — номер версии компилятора:
GCC_PATH="/usr/x86_64-pc-linux-gnu/gcc-bin/16" LDPATH="/usr/lib/gcc/x86_64-pc-linux-gnu/16:/usr/lib/gcc/x86_64-pc-linux-gnu/16/32" MANPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/16/man" INFOPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/16/info" STDCXX_INCDIR="g++-v16" CTARGET="x86_64-pc-linux-gnu" GCC_SPECS="" MULTIOSDIRS="../lib64:../lib"
В том же каталоге лежит /etc/env.d/gcc/config-x86_64-pc-linux-gnu с единственной строкой CURRENT=x86_64-pc-linux-gnu-16 — в ней указана текущая версия компилятора.
Другие дистрибутивы часто предлагают системному администратору менять или добавлять определения переменных среды в /etc/profile или других местах. Calculate, напротив, упрощает сопровождение переменных среды и работу с ними Portage: не нужно следить за множеством файлов, в которых они могут содержаться.
Например, когда sys-devel/gcc обновляется, связанные файлы в /etc/env.d/gcc обновляются автоматически, без участия администратора.
Иногда администратору всё же нужно задать переменную глобально — например, http_proxy. Вместо правки /etc/profile создайте файл /etc/env.d/99local и запишите определение в него:
/etc/env.d/99local
http_proxy="proxy.server.com:8080"
Храня все собственные переменные в одном файле, администратор получает быстрый обзор всех определённых им настроек.
Сценарий env-update
Несколько файлов в /etc/env.d добавляют определения в переменную PATH — и это не ошибка: при запуске env-update эти определения объединяются, после чего каждая переменная среды обновляется атомарно. Так пакетам (и системным администраторам) легко добавлять собственные значения, не вмешиваясь в уже существующие.
Сценарий env-update объединяет значения в алфавитном порядке имён файлов /etc/env.d — имена файлов должны начинаться с двух десятичных цифр. Порядок обновления на примере:
09sandbox 50baselayout 51dconf
+------------+----------------+-----------+
CONFIG_PROTECT_MASK="/etc/sandbox.d /etc/gentoo-release /etc/dconf ..."
Объединение выполняется не всегда, а только для следующих переменных: ADA_INCLUDE_PATH, ADA_OBJECTS_PATH, CLASSPATH, KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK, PKG_CONFIG_PATH и PYTHONPATH. Для всех остальных переменных используется значение, определённое в последнем по алфавиту файле из /etc/env.d.
Добавить переменную в список объединяемых можно, дописав её имя в COLON_SEPARATED или SPACE_SEPARATED — тоже в файле внутри /etc/env.d.
При запуске env-update создаёт все переменные среды и помещает их в /etc/profile.env (его использует /etc/profile). Кроме того, из значения LDPATH формируется /etc/ld.so.conf, после чего запускается ldconfig, чтобы заново создать /etc/ld.so.cache, нужный динамическому компоновщику.
Чтобы изменения проявились сразу после env-update, обновите среду текущей сессии:
env-update && source /etc/profile
Только для текущей сессии
Приведённая команда обновляет переменные лишь в текущем терминале, новых консолях и их потомках. Если вы работаете в X11, выполняйте source /etc/profile в каждом новом терминале или перезапустите X, чтобы все новые терминалы получили обновлённые значения. При использовании диспетчера входа нужно стать пользователем с правами root и перезапустить службу /etc/init.d/xdm.
Без подстановки одних переменных в другие
При определении переменных нельзя использовать переменные оболочки: запись вида FOO="$BAR", где BAR — другая переменная, не сработает.
Переменные для отдельных пакетов
По умолчанию при сборке пакетов используются переменные среды, определённые в make.conf, — например CFLAGS и MAKEOPTS. Иногда отдельным пакетам нужны другие значения. В Calculate файл /etc/portage/package.env по умолчанию отсутствует — создайте его самостоятельно.
Portage поддерживает такие настройки через файлы окружения: /etc/portage/package.env содержит список пакетов, для которых нужны отклоняющиеся переменные, и идентификатор набора; формат строки — <пакет> <идентификатор>. Имя идентификатора выбирается свободно, и Portage ищет файл с точно таким же (с учётом регистра) именем в каталоге /etc/portage/env. Этот механизм дополняет каталожную структуру /etc/portage/make.conf, описанную на странице Настройка с помощью переменных.
Чтобы включить отладочные флаги сборки для отдельного пакета, задайте переменные в файле /etc/portage/env/debug-cflags (имя файла отражает назначение набора). Если каталога /etc/portage/env ещё нет, создайте его:
mkdir /etc/portage/env
# Добавить -ggdb в CFLAGS для отладки CFLAGS="-O2 -ggdb -pipe" FEATURES="${FEATURES} nostrip"
Затем «отметьте» пакет, указав в /etc/portage/package.env строку, которая применит к нему набор debug-cflags:
media-video/mplayer debug-cflags
Возможность nostrip и другие ключи FEATURES описаны на странице Возможности Portage.
Локальное определение переменных
Пользовательские переменные
Не всегда нужно определять переменную глобально. Например, можно добавить каталог /home/my_user/bin и текущий рабочий каталог в переменную PATH только для себя — без влияния на PATH остальных пользователей системы. Для локального определения переменных служат ~/.bashrc (для всех интерактивных сеансов оболочки) или ~/.bash_profile (для сеансов входа):
~/.bashrc
# Двоеточие без последующего указания каталога означает текущий рабочий каталог PATH="${PATH}:/home/my_user/bin:"
После выхода из системы и обратного входа переменная PATH будет обновлена.
Переменные сеанса
Иногда нужны ещё более ограниченные определения. Например, пользователю требуется запускать программы из временного каталога — без полного пути к ним и без временной правки ~/.bashrc.
В этом случае просто определите переменную PATH в текущем сеансе командой export: пока сеанс не завершён, переменная будет использовать временные значения.
export PATH="${PATH}:/home/my_user/tmp/usr/bin"