Как сделать переменные окружения linux

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

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

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

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

Как работает среда и ее переменные

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

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

Если же значение содержит пробелы, нужно использовать двойные кавычки:

КЛЮЧ="значение с пробелами"

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

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

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

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

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

Каждая сессия отслеживает свои переменные оболочки и среды. Вывести их можно несколькими способами.

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

printenv
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

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

printenv SHELL
/bin/bash

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

env VAR1="blahblah" command_to_run command_options

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

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

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

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

Как правило, этот список достаточно длинный. Чтобы вывести его в более удобном формате, откройте его с помощью программы-пейджера:

Этот список содержит огромное количество дополнительной информации, которая в данный момент не нужна (к примеру, некоторые функции bash).

(set -o posix; set)

Данное действие выведет все переменные среды и оболочки.

Можно также сравнить этот результат с результатом команд env/printenv и попробовать вывести список только переменных оболочки, но такой список не будет идеальным, поскольку данные команды выводят информацию по-разному:

Скорее всего, список будет содержать несколько переменных среды, поскольку команда set выводит значения в кавычках, а команды printenv и env – нет.

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

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

Основные переменные среды и оболочки

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

Ниже приведен список основных переменных среды:

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

Ознакомившись со списком переменных среды, изучите список переменных оболочки:

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

Установка переменных оболочки и среды

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

Создание переменных оболочки

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

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

Итак, полученная переменная оболочки действительна в текущей сессии, но не передается ее дочерним процессам.

Чтобы в этом убедиться, используйте команду grep на результат команды set:

set | grep TEST_VAR
TEST_VAR='Hello World!'

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

printenv | grep TEST_VAR

Данное действие не выведет никакого результата.

Это можно использовать, чтобы открыть значение любой переменной оболочки или среды.

echo $TEST_VAR
Hello World!

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

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

bash
echo $TEST_VAR

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

Чтобы вернуться в исходную оболочку, введите exit:

Создание переменных среды

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

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

printenv | grep TEST_VAR
TEST_VAR=Hello World!

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

bash
echo $TEST_VAR
Hello World!

Отлично! Дочерняя оболочка получила переменную исходной оболочки. Попробуйте экспортировать еще одну переменную, прежде чем покинуть дочернюю оболочку.

export NEW_VAR="Testing export"

Проверьте, экспортировалась ли переменная:

printenv | grep NEW_VAR
NEW_VAR=Testing export

Теперь вернитесь в исходную оболочку:

Проверьте, можно ли открыть данную переменную:

Результат не возвращается

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

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

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

Переменная TEST_VAR все еще является переменной среды. Чтобы снова сделать ее переменной оболочки, наберите:

export -n TEST_VAR

Теперь эта переменная больше не является переменной среды:

printenv | grep TEST_VAR

Это снова переменная оболочки:

set | grep TEST_VAR
TEST_VAR='Hello World!'

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

Убедитесь, что такой переменной больше нет:

Результат не был выведен, поскольку переменная была сброшена.

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

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

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

Типы сессий оболочки

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

Стартовая, или начальная оболочка (login shell) – это сессия оболочки, которая открывается после авторизации пользователя. Если пользователь входит в терминал или проходит авторизацию при помощи SSH, будет открыта стартовая оболочка.

Если новая сессия запускается из авторизованной (стартовой) сессии (как ранее в примерах запускалась новая bash-оболочка), эта сессия будет дочерней (non-login shell). Чтобы открыть эту сессию, не нужно проходить процедуру авторизации.

Также сессии оболочки бывают интерактивными и неинтерактивными.

Интерактивная сессия оболочки (interactive shell) – это сессия, привязанная к терминалу. Неинтерактивная сессия оболочки (non-interactive shell) – это сессия, не привязанная к терминалу.

Итак, сессии оболочки классифицируются по таким аспектам: стартовая-дочерняя, интерактивная-неинтерактивная.

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

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

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

Такая сессия читает файлы ~/.bash_profile, ~/.bash_login и ~/.profile и не читает остальных файлов.

Дочерняя сессия, в свою очередь, читает /etc/baash.bashrc, а затем пользовательский файл ~/.bash.rc для развертывания среды.

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

Как задать переменные среды

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

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

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

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

Откройте данный файл:

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

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

Чтобы задать общесистемные переменные, внесите их в /etc/profile, /etc/bash.bashrc или /etc/environment.

Итоги

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

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

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


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

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

Если говорить более точно, то переменная среды может быть трех типов:

1. Локальная переменная среды

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

2. Пользовательская переменная среды

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

3. Системные переменные среды

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

Общие сведения об общих и общесистемных файлах конфигурации

Здесь мы кратко опишем различные файлы конфигурации, перечисленные выше, которые содержат переменные среды, как системные, так и пользовательские.

.bashrc

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


.bash_profile

Переменные среды, перечисленные в этом файле, вызывается каждый раз, когда пользователь регистрируется удаленно, то есть с помощью команды ssh. Если этого файла нет, система ищет файлы .bash_login или .profile.

/etc/environment

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

/etc/bash.bashrc

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

/etc/profile

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

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


Установка или удаление локальных или сеансовых переменных среды в Linux

Локальные переменные среды могут быть созданы с использованием следующих команд:

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

1. Использование env

Здесь var = value соответствует любой локальной переменной окружения, которую вы хотите использовать только с этой командой.

Запускаем оболочку bash, в которой временно будут очищены все переменные среды. Но при выходе из оболочки все переменные будут восстановлены.

2. Использование отмены

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

Где, var-name – это имя локальной переменной, которую вы хотите удалить или очистить.

3. Задайте имя переменной с помощью пустого значения

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

ПРИМЕЧАНИЕ . ВЫ МОЖЕТЕ ДЕЙСТВИТЕЛЬНО ИЗМЕНЯТЬ ПЕРЕМЕННЫЕ СИСТЕМЫ, НО ИЗМЕНЕНИЯ БУДУТ ОТРАЖАТЬСЯ ТОЛЬКО В ТЕКУЩЕЙ СЕССИИ И НЕ БУДУТ ПОСТОЯННЫМИ.

Узнайте, как создавать, пользовательские и системные переменные среды в Linux

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

1. Установка и удаление локальных переменных в Linux.

а) Здесь мы создаем локальную переменную VAR1 и устанавливаем ее на любое значение. Затем мы используем unset и в конце эту переменную удаляем.


б) Другой способ, при котором создаются переменные локальной среды — использовать команду export. Созданная локальная переменная будет доступна для текущего сеанса. Чтобы отключить переменную, просто установите пустое значение переменной.

2. Установка и удаление пользовательских переменных окружения в Linux.

Добавьте следующую строку в файл .bashrc.

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

Чтобы удалить эту переменную, просто удалите строку в файле .bashrc и перезайдите в оболочку.

б) Чтобы добавить переменную, которая будет доступна для сеансов удаленного входа, измените файл .bash_profile.

Добавьте следующую строку в файл .bash_profile.

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

Здесь VAR2 изначально не доступен, но при выполнении удаленного входа используя ssh пользователю на localhost, переменная становится доступной.

Чтобы удалить эту переменную, просто удалите строку в файле .bash_profile, которую вы добавили, и перечитайте файл.

ПРИМЕЧАНИЕ . Эти переменные будут доступны при каждом входе в систему для текущего пользователя, но не для других пользователей.

3. Установка и удаление системных переменных окружения в Linux.

а) Чтобы добавить системную переменную без входа (то есть та, которая доступна для всех пользователей, когда какой-либо из них открывает новый терминал, но не когда существует удаленный доступ любому пользователю к машине) добавьте эту переменную в файл /etc/bash.bashrc.

Как установить среды в Linux

После этого перечитайте файл.

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

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

б) Если вы хотите, чтобы какая-либо переменная среды была доступна, когда какой-либо из пользователей на вашем компьютере выполнил удаленный вход, но не открывал какой-либо новый терминал на локальном компьютере, вам необходимо отредактировать файл — /etc/profile .

Как установить среды в Linux

После добавления переменной просто перечитайте файл. Тогда переменная будет доступна.

Чтобы удалить эту переменную, удалите строку из файла /etc/profile и перечитайте ее.

в) Однако, если вы хотите добавить переменную в любую среду, в которой вы хотите быть доступны по всей системе, как для сеансов удаленного входа, так и для локальных сеансов для всех пользователей, просто экспортируйте переменную в /etc/environment.

Как установить среды в Linux

После этого только перечитайте файл и изменения вступят в силу.

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

Чтобы очистить эту переменную, просто удалите запись в файле /etc/environment и перечитайте файл.

ПРИМЕЧАНИЕ . Изменения вступают в силу при перечитывании файла /etc/environment. Но, если нет, вам может понадобиться выйти из системы и снова войти в систему.

Теперь вы знаете, как установить и отключить переменные локальной, пользовательской и системной среды!

Вопросы по статье задавайте в комментариях ниже.

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.

  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.

Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.

Стилизованный терминал Linux с линиями зеленого текста на ноутбуке.

фатмавати ахмад дзенури / Shutterstock

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

Как работают переменные среды

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

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

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

Среды и Наследование

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

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

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

Глобальные переменные среды

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

  • РАКУШКА: Имя оболочки, которая запускается при открытии окна терминала. В большинстве дистрибутивов Linux это будет баш если вы не изменили его по умолчанию.
  • СРОК: Окна терминала на самом деле эмулируют аппаратный терминал. Это содержит тип аппаратного терминала, который будет эмулироваться.
  • USER: Имя пользователя текущего человека, использующего систему.
  • PWD: Путь к текущему рабочему каталогу.
  • OLDPWD: Каталог, в котором вы находились до перехода в текущий рабочий каталог.
  • LS_COLORS: Список цветовых кодов, используемых ls выделить разные типы файлов,
  • MAIL: Если mail На вашем компьютере Linux установлена ​​система (по умолчанию это не так), она будет содержать путь к почтовому ящику текущего пользователя,
  • ДОРОЖКА: Список каталогов, по которым оболочка будет искать исполняемые файлы команд.
  • LANG: Настройки языка, локализации и кодировки символов.
  • ДОМ: Домашний каталог текущего пользователя.
  • _: Подчеркивание ( _ ) переменная окружения содержит последнюю введенную команду.

СВЯЗАННЫЕ С: Как использовать pushd и popd в Linux

Мы можем видеть, что некоторые из них настроены на использование ничего более сложного, чем echo , который будет записать значения в окно терминала, Чтобы увидеть ценность удерживается переменной среды, вам нужно добавить знак доллара ( $ ) к началу своего названия.

Приятно, что вы можете использовать завершение вкладки заполнить имя переменной среды для вас. Введите несколько букв имени и нажмите Tab. Имя переменной заполняется оболочкой. Если этого не произойдет, вам нужно будет набрать еще несколько букв, чтобы отличить переменную среды от других команд, имена которых начинаются с тех же букв:

echo $ SHELL в окне терминала

Чтобы создать свой собственный Глобальный переменные среды, добавьте их в /etc/environment файл. Вам нужно использовать sudo редактировать этот файл:

sudo gedit / etc / environment в окне терминала

Чтобы добавить переменную среды, введите ее имя, знак равенства ( = ) и значение, которое вы хотите сохранить в переменной среды. Не ставьте пробел до или после знака равенства ( = ). Имя переменной окружения может содержать буквы, подчеркивание ( _ ) или цифры. Однако первый символ имени не может быть числом.

Если в значении есть пробелы, убедитесь, что вы заключили все значение в кавычки ( " ).

Файл / etc / environment открывается в редакторе и добавляется новая переменная окружения.

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

echo $ WEBSITE в окне терминала.

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

echo $ WEBSITE в окне терминала.

к увидеть все переменные среды сразу наберите printenv , Выводов много, поэтому есть смысл передать его через sort , а затем в less :

принтенв | сортировать | меньше в окне терминала.

Сортированный список переменных среды отображается для нас в less ,

Мы можем передать вывод через grep искать переменные среды связанные с конкретной темой,

принтенв | grep GNOME в окне терминала.

СВЯЗАННЫЕ С: Как редактировать текстовые файлы графически в Linux с помощью gedit

Переменные среды Shell

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

  • BASHOPTS: Параметры командной строки, которые использовались при bash был запущен.
  • BASH_VERSION: bash номер версии в виде строки слов и цифр.
  • BASH_VERSINFO: bash версия в виде цифры.
  • КОЛОННЫ: Текущая ширина окна терминала.
  • DIRSTACK: Каталоги, которые были добавлен в стек каталогов посредством pushd команда.
  • HISTFILESIZE: Максимальное количество линии разрешены в history файл.
  • HISTSIZE: Количество строк history разрешено в памяти.
  • HOSTNAME: Имя хоста компьютера.
  • IFS:Внутренний разделитель полей используется для разделения ввода в командной строке. По умолчанию это пробел.
  • PS1: PS1 Переменная окружения содержит определение основной, командной строки и командной строки. Набор токенов, называемых escape-последовательностями, может быть включен в определение вашей командной строки. Они представляют такие вещи, как имя хоста и пользователя, текущий рабочий каталог и время.
  • PS2: Когда команда занимает более одной строки и ожидается больше ввода, отображается дополнительная командная строка. PS2 Переменная окружения содержит определение этого вторичного приглашения, которое по умолчанию имеет знак больше, чем ( > ).
  • SHELLOPTS: Параметры оболочки, которые вы можете установить с помощью set вариант.
  • UID:Идентификатор пользователя текущего пользователя.

СВЯЗАННЫЕ С: Как использовать pushd и popd в Linux

Давайте проверим некоторые из этих переменных оболочки:

эхо $ BASH_VERSION в окне терминала.

Для полноты, вот токены, которые вы можете использовать в определениях командной строки:

Вы найдете определение вашего PS1 переменная окружения в вашем .bashrc файл.

Создание переменных среды сеанса

Чтобы создать переменные среды для собственного использования, добавьте их в конец .bashrc файл. Если вы хотите, чтобы переменные среды были доступны для удаленных сеансов, таких как SSH-соединения, вам необходимо добавить их в свой .bash_profile файл, а также.

Формат определения переменной среды одинаков для обоих файлов. Чтобы добавить определение к вашему .bash_profile файл, введите это в вашем домашнем каталоге:

Файл .bashrc был помещен в редактор, и в качестве последней строки в файле добавлена ​​новая переменная среды.

Гедит .bashrc в окне терминала.

Сохраните и закройте файл после завершения редактирования. Вы можете выйти и снова войти, или вы можете заставить оболочку перечитать .bash_profile файл с помощью команды точка ( . ) нравится:

, .bashrc в окне терминала.

Теперь давайте создадим переменную окружения в командной строке:

LOCAL_VAL =

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

эхо $ LOCAL_VAR в окне терминала.

Баш в окне терминала

Как видите, INHERITED_VAR доступен в дочерней оболочке, но LOCAL_VAR не является. Мы просто получаем пустую строку.

эхо $ INHERITED_VAR в окне терминала.

Закрыть нашего ребенка bash сеанс мы используем exit :

Унаследованные среды также влияют на сценарии. Вот простой скрипт, который записывает значения наших трех переменных среды в окно терминала:

Это было сохранено в файл с именем envtest.sh , а затем сделал исполняемым со следующим:

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

./envtest.sh в окне терминала.

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

Если нам нужно, мы можем экспортировать переменную окружения из командной строки. Мы сделаем это с нашими LOCAL_VAR и снова запустите скрипт:

экспортировать LOCAL_VAR в окне терминала.

Переменная окружения была добавлена ​​в среду текущей оболочки, и поэтому она появляется в среде, которая наследуется сценарием. Сценарий также может ссылаться на эту переменную среды.

Удаленные подключения

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

(С риском путаницы .profile файл. Он также может содержать определения переменных среды. Однако .profile файл не читается, если .bash_profile файл присутствует. Итак, самое безопасное — и bash совместимый способ — это использовать .bash_profile файл.)

Для редактирования .bash_profile файл, мы будем использовать gedit снова:

gedit .bash_profile в окне терминала.

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

Сохраните ваши изменения и закройте gedit ,

На другом компьютере мы сделаем SSH подключение к тестовому компьютеру,

ssh dave@howtogeek.local в окне терминала.

Как только мы подключимся, мы снова запустим скрипт:

./envtest.sh в окне терминала.

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

Сброс переменной среды

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

Отключение переменной окружения в Bash в Linux.

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

Как пример, пользователь mary все еще может получить доступ к WEBSITE переменная окружения и читать ее значение, даже если пользователь dave имеет unset это в его сессии:

echo% ВЕБ-САЙТ в окне терминала.

Экологический контроль

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

Favorite

Добавить в избранное

Руководство про переменные в среде Linux

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

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

В пакете Coreutils размещены программы env и printenv. Чтобы перечислить все переменные среды, которые в настоящее время имеют значение, просто введите:

В оболочке bash существуют два типа переменных среды:

  • Глобальные переменные
  • Местные переменные

Глобальные переменные окружения

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

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

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

Локальные переменные среды

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

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

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

Настройка переменных локальной среды

После запуска оболочки bash (или появления сценария оболочки) вам разрешено создавать локальные переменные, которые видны внутри вашего shell-процесса. Вы можете присвоить переменную окружения переменной string или numeric с помощью знака равенства, которому присваивается значение переменной:

Поздравляем, вы только что создали свою первую переменную. Просто помните, что в любое время вам нужно ссылаться на значение переменной среды andreyex_test, просто ссылайтесь на нее по имени $ andreyex_test.

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

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

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

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

ПРИМЕЧАНИЕ . Очень важно, чтобы между именем переменной среды, знаком равенства и значением не было пробелов. Если вы помещаете какие-либо пробелы в присваивание, оболочка bash интерпретирует значение как отдельную команду:

Установленная локальная переменная среды в вашем процессе оболочки будет доступна для использования в любом месте вашего shell-процесса. Но если вы создаете другую оболочку, она недоступна в дочерней оболочке:

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

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

Переменная среды andreyex_test, установленная в дочерней оболочке, не существует, когда мы возвращаемся к родительской оболочке.

Настройка глобальных переменных окружения

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

Это выполняется с помощью команды export:

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

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

Удаление переменных среды

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

Если вы ссылаетесь на переменную среды в команде unset, имейте в виду не использовать знак доллара.

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

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

Переменные среды Shell по умолчанию

Существуют конкретные переменные среды, которые bash shell использует для определения системной среды. Вы всегда можете подсчитать эти переменные, которые будут использоваться в вашей системе Linux. Поскольку оболочка bash является производной исходной оболочки Unix Bourne, она также включает переменные среды, первоначально определенные в этой оболочке.

Следующие примеры показывают, что переменные среды, предоставляемые оболочкой bash, совместимы с исходной оболочкой Unix Bourne.

До сих пор наиболее ценной переменной среды в этом списке является переменная среды PATH.

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

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

В дополнение к стандартным переменным среды Bourne, оболочка bash также предоставляет несколько переменных, как показано:

Переменные Bash Shell Bourne:

CDPATH: список каталогов, разделенных двоеточиями, используемых в качестве пути поиска для команды cd.
HOME: домашний каталог текущего пользователя.
IFS: список символов, которые разделяют поля, используемые оболочкой для разделения текстовых строк.
MAIL: имя файла для почтового ящика текущего пользователя. Оболочка bash проверяет этот файл для новой почты.
MAILPATH: список из нескольких имен файлов для почтового ящика текущего пользователя. Оболочка bash проверяет каждый файл в этом списке для новой почты.
OPTARG: значение последнего аргумента параметра, обрабатываемого командой getopts.
OPTIND: значение индекса последнего аргумента параметра, обработанного командой getopts.
PATH: список каталогов, разделенных двоеточиями, где оболочка ищет команды.
PS1: строка приглашения командной строки основной командной строки.
PS2: строка приглашения интерфейса командной строки вторичной оболочки.

Переменные среды Shell bash:

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

Вывод

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

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

Существует много файлов запуска, которые запускают оболочку bash после ее запуска. Эти файлы запуска могут содержать определения переменных среды для установки стандартных переменных среды для каждого сеанса bash. После входа в систему Linux оболочка bash обращается к файлу запуска /etc/profile, а также к трем локальным файлам запуска для каждого пользователя, $HOME/.bash, $HOME/.bash login и $HOME/.profile.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: