Переменные окружения в Linux – ИТ Проффи

Введение

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

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

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

.bash_profile

Теперь давайте сделаем так чтобы

fortune

запускалось при каждой авторизации. Используя любимый текстовый редактор отредактируйте файл

.bash_profile

в вашей домашней директории. Если такого файла не существует, создайте его. Вставьте в его начало:

fortuneПопробуйте выйти из системы и зайдите обратно. До запуска менеджера дисплея, такого как например xdm, gdm или kdm, вы увидите веселое приветствие, когда войдете:

/etc/profile и /etc/skel

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

Aron griffis

. В свободное от программирования время Эйрон предпочитает размышлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».

Daniel robbins

Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава

, написал множество технических статей для

Export

Переменные в bash могут быть помечены таким образом, что они будут устанавливаться во всех вновь запускаемых командных оболочках. Это означает, что они обозначены как внешние (export). Вы можете заставить bash отобразить список всех таким образом обозначенных внешних переменных в вашей сессии bash:

Export и set -x

В связи с вышеописанным поведением, переменные могут быть указаны в ~/.bash_profile или /etc/profile и помечены для экспорта, для того, чтобы в дальнейшем не было необходимости указывать их снова. Но есть несколько опций которые не могут быть экспортированы, и поэтому они должны быть заданы в ~/.bashrc и в вашем профиле последовательно. Эти опции настраиваются при помощи встроенной команды set:

$ set -xОпция -x заставляет bash вывести на экран каждую команду, которую он собирается выполнить:

Unset vs. foo=


Это не то же самое, что установка переменной пустым значением, хотя порой это сложно объяснить. Один из способов эту разницу заметить — вызвать команду set без параметров, чтобы вывести список всех текущих переменных:

$ FOO=bar$ set | grep ^FOOFOO=bar$ FOO=$ set | grep ^FOOFOO=$ unset FOO$ set | grep ^FOOИспользование set без параметров похоже на использование встроенной команды export за исключением того, что set отображает все переменные, а не только обозначенные как внешние.

Виды переменных окружения

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

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

Виды переменных окружения python

Меняет местоположение стандартных библиотек Python. Изначально они находятся в prefix/lib/pythonversion и exec_prefix/lib/pythonversion, где prefix и exec_prefix — каталоги, которые зависят от установки, оба по умолчанию — /usr/local.

Если для этой переменной окружения задан один каталог, то его значение может заменить prefix или exec_prefix. Для указания разных значений установите PYTHONHOME на prefix:exec_prefix.

По умолчанию изменяет путь поиска для файлов модулей. Имеет такой же формат, как и для оболочки PATH — т. е. один или более путей каталога, разделяемых os.pathsep (например, знак «:» в Unix или «;» в Windows). Происходит автоматическое игнорирование несуществующих каталогов.

Дополнительный каталог указывается в пути поиска перед PYTHONPATH, как было рассмотрено выше в пункте «Интерфейсные опции». При необходимости изменения пути поиска нужно обратиться к переменной sys.path в программе Python.

Графические приложения

Если переменная окружения влияет только на графические приложения, можно ограничить область её применения, установив её только в рамках графического сеанса.

Чтобы установить переменные окружения только для определённого приложения вместо целого сеанса, измените .desktop файл этого приложения. Смотрите Ярлыки приложений#Изменение переменных среды.

Знакомство с «fortune»

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

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

$ fortuneNo amount of careful planning will ever replace dumb luck.(приложение fortune может быть не установлено, запустите установку в пакетном менеджере вашего дистрибутива, например apt-get install fortune — прим. пер.)

Использование «env»

К сожалению, если вы позабудете установить PAGER обратно в less, программа man (как и некоторые другие программы) будет продолжать вывод весь запрошенный текст без остановок. Если вы хотели задать PAGER значение cat только на один раз, то могли бы воспользоваться командой env:

Использование скрипта запуска

Некоторые графические окружения (например, KDE Plasma), поддерживают запуск скриптов при входе: можно использовать их для установки переменных окружения. Пример есть в статье KDE (Русский)#Автозапуск приложений.

Конфигурационные файлы

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

# Уже лучше.
from config import API_KEY
app = Flask(__name__)
app.config['API_KEY'] = API_KEY

На уровне пользователя

Не всегда требуется устанавливать переменные окружения на уровне системы. Например, вы можете добавить ваш каталог /home/пользователь/bin в PATH, однако не хотите, чтобы это затрагивало других пользователей системы. Переменные окружения пользователя можно устанавливать во многих других файлах:

Например, чтобы добавить каталог в PATH, поместите следующее в ~/.bash_profile:

export PATH="${PATH}:/home/пользователь/bin"

Для применения изменений перезайдите в командную оболочку или используйте команду source: $ source ~/.bash_profile.

Окружение wayland

Так как Wayland не использует Xorg-специфичные файлы, GDM и KDE Plasma вместо них загружают пользовательские переменные окружения systemd.

~/.config/environment.d/envvars.conf
ПЕРЕМЕННАЯ=значение

Другие экранные менеджеры (например, SDDM) пока что не поддерживают это.

:/>  Неизвестный скайп

Окружение xorg

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

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

~/.xprofile, ~/.xinitrc или ~/.xsession
...
export ПЕРЕМЕННАЯ=значение
...

Определение переменных окружения в python

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

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

Определение переменных окружения в Python
Определение переменных окружения в Python

Алгоритм, по которому проходит установка переменных окружения, напрямую зависит от платформы. Поэтому следует использовать встроенный модуль OS компании Python для считывания переменных. Функции этого модуля позволяют взаимодействовать с операционной системой вне зависимости от ее платформы.

Для доступа к таким переменным в Python используется объект os.environ — это словарь, в котором хранятся все переменные окружения программы.

Имейте в виду, что объект os.environ фиксируется при загрузке модуля OS на Python. И если вы будете изменять переменные окружения после этого, то изменения не отобразятся os.environ (например, при экспорте новой переменной окружения в терминальный эмулятор).

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

Более продвинутый подход, это использование переменных окружения. Переменные окружения это именованные переменные, содержащие текстовую информацию, которую могут использовать запускаемые программы. Например, чтобы запустить flask-приложение, вначале нужно указать в переменной окружения FLASK_APP имя нашего приложения:

Пользовательские переменные

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

К примеру, владельцу сайта, для его виртуального хоста, обслуживающего сайт на CMS Drupal, захотелось установить утилиту drush, которая облегчает и ускоряет обслуживание CMS. В этом случае достаточно после локальной установки (в каком-нибудь подкаталоге домашнего каталога) drush, дополнить переменную PATH значением, содержащим путь к утилите drush в файле ~/.bashrc. В результате командная оболочка сможет запускать команду drush для данного пользователя.

По стандартам соглашений для Linux-систем конфигурация для пользовательского окружения должна храниться в следующих файлах:

  • ~/.bashrc – для хранения параметров инициализации выбранной командной оболочки для пользователя;
  • ~/.profile – для инициализации доступных пользователю командных оболочек;
  • ~/.pam_environment – для использования модулем

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

Наша переменная TEST_VAR все еще определена в качестве переменной окружения. Мы можем превратить ее обратно в переменную оболочки, введя следующую команду:

  1. export -n TEST_VAR

Она больше не является переменной окружения:

  1. printenv|grep TEST_VAR

Однако она все еще сохранила статус переменной оболочки:

  1. set|grep TEST_VAR
TEST_VAR='Hello World!'

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

  1. unset TEST_VAR

Мы можем убедиться, что эта переменная больше не задана:

Понимание –login


Второй способ запустить bash как оболочку входа — при помощи опции —login. Время от времени эта возможность используется эмуляторами терминала (вроде xterm) чтобы их сессия bash выглядела как при изначальном входе в системе.

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

interactive login profile rc

yes           yes     source    ignore
yes           no      ignore    source
no            yes     source    ignore
no            no      ignore    ignore

Пример файла настройки файла .envrc

Вот так может выглядеть файл .envrc настроенный для разработки flask-приложения:

export VIRTUAL_ENV=venv
layout python-venv
export FLASK_APP=app.py
export FLASK_DEBUG=1

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

Примеры

В этом разделе описываются типовые переменные окружения, используемые в Linux.

  • XDG_CURRENT_DESKTOP — это переменная freedesktop.org, содержащая список разделённых двоеточиями строк, которыми идентифицируется среда рабочего стола[1]. Стандартные значения — GNOME, GNOME-Flashback, KDE, LXDE, LXQt, MATE, TDE, Unity, XFCE, EDE, Cinnamon и Pantheon[2].
  • DESKTOP_SESSION — ещё одна старая переменная, но используется реже, чем DE.
  • PATH содержит список каталогов, разделённых двоеточиями, в которых система ищет исполняемые файлы. Когда обычная команда (например, ls, systemctl или pacman) интерпретируется командной оболочкой (например, bash или zsh), оболочка ищет исполняемый файл с указанным именем в каталогах из этого списка и, если находит, запускает файл, передав ему указанные аргументы командной строки. Чтобы запускать исполняемые файлы, пути к которым не находятся в PATH, необходимо указывать относительный или абсолютный путь к файлу, например ./a.out или /bin/ls.

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

  • HOME содержит путь к домашнему каталогу текущего пользователя. Эта переменная может использоваться приложениями для определения расположения файлов настроек пользователя, который их запускает.
  • OLDPWD содержит путь к предыдущему рабочему каталогу, то есть, значение PWD перед последним вызовом cd.
  • TERM содержит тип запущенного терминала, например xterm-256color. Это используется некоторыми программами, которые хотят знать возможности текущего терминала.
  • MAIL содержит путь к каталогу, где сохраняется входящая почта. Обычно имеет значение /var/spool/mail/$LOGNAME.

Проверка на интерактивность

Иногда bash обрабатывает ваш ~/.bashrc не будучи запущенным интерактивно, например при использовании команд типа rsh или scp. Это важно помнить потому как вывод текста, как в примере с командой fortune выше, может испортить эти неинтерактивные сессии bash.

if [ -n “$PS1” ]; thenfortunefi

Программы по умолчанию

  • PAGER указывает команду для запуска программы постраничного просмотра содержимого текстовых файлов, например, /bin/less.

Работа с библиотекой python-dotenv

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

Установим пакет:

pip install python-dotenv

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

import os

from dotenv import load_dotenv

dotenv_path = os.path.join(os.path.dirname(__file__), ‘.env’)

if os.path.exists(dotenv_path):

load_dotenv(dotenv_path)

Такой файл .env можно применять для всех переменных конфигурации, но для переменных окружения FLASK_APP и FLASK_DEBUG использовать его нельзя. Дело в том, что без этих переменных не обойтись уже в начале загрузки приложения.

Итак, теперь вы понимаете, с какой целью используются и как применяются переменные окружения Python.

Работа с виртуальным окружением в direnv

Кроме загрузки переменных окружения, утилита direnv позволяет также работать с виртуальным окружением для Python.Виртуальное окружение позволяет использовать для отдельные проектов разные версии интерпретатора python и пакетов библиотек. Существует несколько способов создания виртуального окружения для python, здесь мы рассмотрим модуль venv, для другие варианты описаны в документации к direnv.

:/>  Удаление Папки и Файлов в Linux: Команда rm, rmdir

Чтобы использовать venv для автоматического создания и активирования виртуального окружения, необходимо добавить в файл ~/.config/direnv/direnvrc следующий код (см. документацию).

Работа с переменными окружения python

  • Считывание одной/всех переменных окружения

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

# Импортируем модуль osimport os# Создаём цикл, чтобы вывести все переменные средыprint(«The keys and values of all environment variables:»)for key in os.environ:print(key, ‘=>’, os.environ[key])# Выводим значение одной переменнойprint(«The value of HOME is: «, os.environ[‘HOME’])

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

Считывание одной/всех переменных окружения
Считывание одной/всех переменных окружения
  • Проверка присвоения переменной окружения ее значения

Для проверки переменных создадим Python-файл с нижеуказанным скриптом. Модуль OS будем использовать для чтения значений переменных. Модуль SYS – для завершения работы приложения.

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

Если пользователь вводит имя переменной окружения с указанным значением, то это значение будет выведено. В противном случае — будет выведено сообщение об ошибке, и процесс прервется.

# Импортируем модуль osimport os# Импортируем модуль sysimport syswhile True:# Принимаем имя переменной средыkey_value = input(«Enter the key of the environment variable:»)# Проверяем, инициализирована ли переменнаяtry:if os.environ[key_value]:print(«The value of», key_value, » is «, os.environ[key_value])# Если переменной не присвоено значение, то ошибкаexcept KeyError:print(key_value, ‘environment variable is not set.’)# Завершаем процесс выполнения скриптаsys.exit(1)

Итог работы скрипта можно увидеть на скрине. В первом случае вводилось имя переменной с определенным значением. Во втором — имя переменной с неустановленным значением. Согласно результату, переменная HOME была определена, и ее значение появилось в консоли. Для переменной API_KEY значение не указывалось, поэтому скрипт вывел сообщение и прекратил работу.

Проверка присвоения переменной окружения ее значения
Проверка присвоения переменной окружения ее значения
  • Проверка переменной на истинность

Создадим файл в Python с нижеуказанным кодом. Чтобы проверить переменную DEBUG на истину, используем функцию get(). В соответствии со значениями переменной программа будет выводить различные сообщения.

# Импортируем модуль osimport os# Проверяем значение переменной средыif os.environ.get(‘DEBUG’) == ‘True’:print(‘Debug mode is on’)else:print(‘Debug mode is off’)

При значении переменной DEBUG – False, итог работы кода будет соответствовать скрину. Используя функцию setdefault, можно менять значение переменной.

Проверка переменной на истинность
Проверка переменной на истинность
  • Наделение переменной окружения значением

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

Создадим код, изменяющий значение переменной DEBUG на True (по умолчанию установлено False), применяя функцию setdefault(). После присвоения значения осуществим проверку функцией get().

При верном написании кода появится сообщение «Режим отладки включен». При ошибочном – «Режим отладки выключен».

# Импортируем модуль osimport os# Задаём значение переменной DEBUGos.environ.setdefault(‘DEBUG’, ‘True’)# Проверяем значение переменной if os.environ.get(‘DEBUG’) == ‘True’:print(‘Debug mode is on’)else:print(‘Debug mode is off’)

На скрине ниже показан результат: переменной DEBUG было задано значение True, поэтому появилось сообщение «Режим отладки включен».

Наделение переменной окружения значением
Наделение переменной окружения значением

Разница между сеансами оболочки входа, без входа, интерактивными и неинтерактивными сеансами

Оболочка bash считывает разные файлы конфигурации в зависимости от того, как запускается сеанс.

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

Оболочка входа — это сеанс оболочки, начинающийся с аутентификации пользователя. Если вы выполняете вход в сеанс терминала или через SSH с аутентификацией, ваш сеанс оболочки будет настроен в виде оболочки со входом.

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

Еще одним отличием, которое можно отметить, является интерактивный или неинтерактивный характер сеанса оболочки.

Интерактивный сеанс оболочки — это сеанс оболочки, прикрепленный к терминалу. Неинтерактивный сеанс оболочки не прикреплен к сеансу терминала.

Таким образом, каждый сеанс оболочки классифицируется либо как сеанс входа или без входа, либо как интерактивный или неинтерактивный.

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

То, относится ли сеанс оболочки к оболочке входа или без входа, определяет то, какие файлы будут считываться при инициализации сеанса оболочки.

Сеанс, запускаемый в виде сеанса входа, будет считывать данные конфигурации сначала из файла /etc/profile. Затем он будет искать первый файл конфигурации сеанса входа в домашнем каталоге пользователя, чтобы получить данные конфигурации для конкретного пользователя.

Сеанс считывает первый из файлов ~/.bash_profile, ~/.bash_login и ~/.profile, который ему удается найти, и не считывает остальные файлы.

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

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

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

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

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

К счастью, большинство дистрибутивов Linux позволяют настраивать файлы конфигурации входа для использования файлов конфигурации без входа. Это означает, что вы можете определить переменные окружения, которые вы хотите использовать в обоих случаях, только в файлах конфигурации без входа. Затем эти файлы будут считываться в обоих сценариях.

Чаще всего мы будем настраивать переменные окружения для конкретного пользователя, и наши настройки, как правило, будут доступны в оболочках как со входом, так и без входа. Это означает, что лучше всего использовать для определения этих переменных файл ~/.bashrc.

Откройте этот файл:

  1. nano ~/.bashrc

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

  1. exportVARNAME=value

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

  1. source ~/.bashrc

Если вам потребуется задать общесистемные переменные, вы можете рассмотреть возможность их добавления в файлы /etc/profile, /etc/bash.bashrc или /etc/environment.

:/>  Как создать загрузочную флешку Windows 10 под UEFI или BIOS в Rufus (новая 3.x версия) [инструкция]

С помощью pam_env

PAM-модуль pam_env(8) загружает переменные для прописывания в окружение из этих файлов в указанном порядке: /etc/security/pam_env.conf, /etc/environment (и устаревший ~/.pam_environment).

/etc/environment должен содержать только простые пары вида ПЕРЕМЕННАЯ=значение на отдельных строках, наприммер:

EDITOR=nano

/etc/security/pam_env.conf и ~/.pam_environment имеют одинаковый формат:

ПЕРЕМЕННАЯ [DEFAULT=значение] [OVERRIDE=значение]

@{HOME} и @{SHELL} являются специальными переменными, значение которых берётся из /etc/passwd. Следующий пример показывает, как использовать переменную HOME внутри другой переменной:

XDG_CONFIG_HOME   DEFAULT=@{HOME}/.config

Примечание: Переменные ${HOME} и ${SHELL} не связаны с переменными окружения HOME и SHELL, по умолчанию они не задаются.

Формат также позволяет расширить уже определённые переменные значениями из других переменных с помощью ${ПЕРЕМЕННАЯ} , например:

GOPATH DEFAULT=${XDG_DATA_HOME}/go

Пары ПЕРЕМЕННАЯ=значение тоже допускаются, но расширение переменных здесь не поддерживается. Подробнее смотрите pam_env.conf(5).

Примечание: Эти файлы считываются перед другими файлами, в частности перед ~/.profile, ~/.bash_profile и ~/.zshenv.

Создание виртуального окружения

Если в файл .envrc добавить строчку

layout python-venv

то при переходе в папку будет direnv создаст виртуальное окружение в папке direnv, например .direnv/python-venv-3.7.3.Чтобы создать виртуальное окружение с другим путем, например в более привычной папке venv, надо задать переменную VIRTUAL_ENV:

export VIRTUAL_ENV=.venv

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

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

Теперь давайте превратим нашу переменную оболочки в переменную окружения. Мы можем сделать это с помощью экспорта переменной. Команда для выполнения этой задачи имеет соответствующее название:

  1. export TEST_VAR

Наша переменная будет превращена в переменную окружения. Мы можем убедиться в этом, снова проверив наш список переменных окружения:

  1. printenv|grep TEST_VAR
TEST_VAR=Hello World!

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

Ссылки

Не забудьте посмотреть ресурсы c Linux документацией, использованные в этом руководстве, в особенности

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

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

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

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

Чтобы установить временную (для сеанса) переменную окружения достаточно выполнить команду со следующим синтаксисом:

ИМЯ=’значение’

Например:

Установка переменных с «set»

Команда set может также использоваться для задания значений переменных, но при этом указание самой этой команды не является обязательным. Команда в bash «set FOO=foo» делает то же самое, что и «FOO=foo». Сброс значения переменной осуществляется встроенной unset:

Установка переменных среды


Чтобы лучше проиллюстрировать разницу между переменными Shell и Environment, мы начнем с установки переменных Shell, а затем перейдем к переменным Environment.

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

MY_VAR='Linuxize'

Утилита direnv

Переменные среды могут быть автоматически загружены при входе в папку с проектом, это особенно удобно при работе с несколькими проектами одновременно. Сделать это позволяет утилита direnv. Direnv — это менеджер переменных среды для терминала, поддерживает bash, zsh, tcsh и др. оболочки.

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

Установка direnv

sudo apt-get install direnv

Далее необходимо в нести изменения для настройки нашей оболочки, для bash необходимо в конец файла ~/.bashrc добавить следующее и перезапустить консоль:

eval "$(direnv hook bash)"

Часть i:

  1. BASH, основы навигации
  2. Управление файлами и директориями
  3. Ссылки, а также удаление файлов и директорий
  4. Glob-подстановки

Часть ii:

  1. Регулярные выражения
  2. Назначения папок, поиск файлов
  3. Управление процессами
  4. Обработка текста и перенаправления
  5. Модули ядра

Часть iii

  1. Документация
  2. Модель прав доступа
  3. Управление аккаунтами
  4. Настройка окружения

Экспортирование переменных


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

Экспортирование переменных для изменения поведения программ.

Часто поведение команд можно изменить установкой переменных окружения. Так же, как в случае новых сессий bash, запускаемые программы из вашей командной строки будут видеть только переменные окружения, помеченные на экспорт. Например, команда man проверяет переменную PAGER, чтобы выяснить какую программу использовать для постраничного просмотра текста.

$ PAGER=less$ export PAGER$ man manКогда переменная PAGER установлена в less, вы будете видеть сначала одну страницу, а нажатие пробела будет перемещать вас а следующую страницу. Если вы измените переменную PAGER в cat, то весь текст отобразится сразу, без остановок на страницах.

$ PAGER=cat$ man man

Заключение

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

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

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

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

Каждый сеанс оболочки отслеживает собственные переменные оболочки и окружения. Мы можем получить доступ к этим переменным разными способами.

Мы можем просмотреть список всех наших переменных окружения с помощью команд env или printenv. В состоянии по умолчанию они должны работать одинаково:

  1. printenv

Итоги

Ну вот самое время поздравить вас с завершением 3-ей части руководства. Вы уже должны знать как находить информацию в системе и интернет документации, а так же иметь хорошее представление о модели прав доступа в Linux, управлении учетными записями пользователей и окружением.

Вывод

В этом руководстве мы показали, как устанавливать и перечислять переменные среды и оболочки.

Оставьте комментарий