Переменные окружения в Linux
Переменные окружения, это набор пар, состоящих из ключа и его значения, данные хранятся в дистрибутиве и используются различными процессами для выполнения определенных операций. Эти переменные отвечают за стандартное поведение системы, приложений и могут содержать различную информацию:
- Локальные переменные окружения - эти переменные определены только для текущей сессии. Они будут безвозвратно стерты после завершения сессии, будь то удаленный доступ или эмулятор терминала. Они не хранятся ни в каких файлах, а создаются и удаляются с помощью специальных команд
- Пользовательские переменные оболочки - эти переменные оболочки в Linux определяются для конкретного пользователя и загружаются каждый раз когда он входит в систему при помощи локального терминала, или же подключается удаленно. Такие переменные, как правило, хранятся в файлах конфигурации:
.bashrc
,.bash_profile
,.bash_login
,.profile
или в других файлах, размещенных в директории пользователя - Системные переменные окружения - эти переменные доступны во всей системе, для всех пользователей. Они загружаются при старте системы из системных файлов конфигурации:
/etc/environment
,/etc/profile
,/etc/profile.d/
,/etc/bash.bashrc
Конфигурационные файлы переменных окружения Linux
Здесь мы кратко рассмотрим различные конфигурационные файлы, перечисленные выше, которые используются для настройки переменных окружения для всей системы или конкретного пользователя.
- Пользовательские переменные
.bashrc
файл переменных конкретного пользователя. Загружается каждый раз, когда пользователь создает терминальный сеанс, то есть проще говоря, открывает новый терминал. Все переменные окружения, созданные в этом файле вступают в силу каждый раз когда началась новая терминальная сессия - Пользовательские переменные
.bash_profile
переменные вступают в силу каждый раз когда пользователь подключается удаленно по SSH. Если этот файл отсутствует система будет искать.bash_login
или.profile
- Системные переменные
/etc/environment
файл для создания, редактирования и удаления каких-либо переменных окружения на системном уровне. Переменные окружения, созданные в этом файле доступны для всей системы, для каждого пользователя и даже при удаленном подключении - Системные переменные
/etc/bash.bashrc
системныйbashrc
, этот файл выполняется для каждого пользователя, каждый раз когда он создает новую терминальную сессию. Это работает только для локальных пользователей, при подключении через интернет, такие переменные не будут видны - Системные переменные
/etc/profile
переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. Но они не будут доступны, при создании локальной терминальной сессии, то есть если вы просто откроете терминал
Все переменные окружения Linux созданные с помощью этих файлов, могут быть удалены удалением их оттуда. Только после каждого изменения, нужно либо выйти и зайти в систему, либо выполнить команду:
source имя_файла
Локальные переменные окружения
Локальные переменные окружения в Linux можно создавать следующими командами:
var=значение
export var=значение
Устанавливаем и удаляем локальные переменные
Давайте создадим локальную переменную VAR1
и установим ей любое значение, затем удалим ее с помощью unset и убедимся что она удалена:
VAR1='Losst'
echo $VAR1
unset VAR1
echo $VAR1
Другой способ создать переменную, команда export
. Удалим ее присвоив пустое значение:
export VAR2='Losst'
echo $VAR2
VAR2=
echo $VAR2
Теперь создадим переменную VAR3
также зададим ей значение. А потом временно удалим все локальные переменные выполнив env -i
. Она запустит оболочку без каких-либо переменных. После ввода exit
все переменные будут восстановлены.
VAR3='Losst'
echo $VAR3
env -i bash
echo $VAR3
Использование env
По умолчанию с помощью env
можно посмотреть все установленные переменные среды. Но с опцией -i
она позволяет временно удалить все переменные оболочки и выполнить команду без переменных.
env -i переменная=значение команда
Такая команда запустит оболочку вообще без переменных окружения:
env -i bash
После запуска такого окружения, не будет доступно никаких переменных, но после выхода все вернется на свои места.
Использование unset
Это другой способ удаления переменных окружения Linux. Unset
удаляет переменную по имени до конца текущей сессии:
unset имя_переменной
Использование пустой строки
Это самый простой способ удаления переменных окружения в Linux, устанавливая пустое значение переменной, вы удаляете ее до конца текущей сессии.
Пользовательские переменные
Отредактируйте файл .bashrc
, в вашей домашней директории, добавив команду export
, для экспортирования нужной переменной. Затем выполните команду source
для применения изменений. Создадим переменную VAR4
.
nano .bashrc
Добавьте такую строчку:
export VAR4='This is Losst Home'
Обновляем конфигурацию:
source .bashrc
Смотрим вывод:
echo $VAR4
Для удаления переменной VAR4
просто удалите ее из .bashrc
.
Теперь добавим переменную окружения с помощью .bash_profile
. Эта переменная, как вы уже знаете будет доступна только при удаленном входе:
nano .bash_profile
Добавьте строчку:
export VAR5='This is Losst Home'
Обновляем конфигурацию:
source .bash_profile
Смотрим вывод:
echo $VAR5
Переменная недоступна, так как вы создали локальную терминальную сессию, теперь подключитесь по ssh
:
ssh user@localhost
Смотрим вывод:
echo $VAR5
Удалить эту переменную окружения можно так же как и в предыдущем случае, удалив ее из файла.
Эти переменные доступны всегда, но не для всех пользователей.
Системные переменные
Создадим переменную, доступную для всех пользователей, во всех терминальных сессиях, кроме удаленных, добавлением ее в /etc/bash.profile
:
nano /etc/bash.profile
Добавьте такую строчку:
export VAR6='This is system-wide variable'
Обновляем конфигурацию:
source /etc/bash.bashrc
Теперь эта переменная доступна для всех пользователей, во всех терминалах:
echo $VAR6
sudo su
echo $VAR6
su -
echo $VAR6
Если вы хотите сделать переменную окружения доступной для всех пользователей, которые подключаются к этой машине удаленно, отредактируйте файл /etc/profile
:
nano /etc/profile
Добавьте такую строчку:
export VAR7='This is system-wide variable for only remote sessions'
Обновляем конфигурацию:
source /etc/profile
Смотрим вывод:
echo $VAR7
Если нужно добавить переменную окружения в Linux, так чтобы она была доступна и удаленно, и для локальных сессий, экспортируйте ее в /etc/environment
:
nano /etc/environment
Добавьте такую строчку:
export VAR8='I am available everywhere'
Теперь эта переменная доступна и для локальных пользователей и удаленно:
source /etc/environment
echo $VAR8
sudo su
echo $VAR8
exit
ssh localhost
echo $VAR8