• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Как читать и устанавливать переменные среды и оболочки в Linux

Оглавление

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

Организация среды выполнения команд в Linux-системах

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

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

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

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

Сменные среды и работа с ними

Рассмотрим наиболее часто используемые переменные в работе Администратора.

TERM – устанавливает тип используемого терминала;

PATH – определяет список директорий по поиску исполнительных файлов;

PWD – хранит информацию о текущем рабочем каталоге пользователя;

HOME – хранит данные о домашнем каталоге текущего пользователя;

USER – фиксирует имя текущего авторизованного пользователя системы;

SHELL – сохраняет данные о названии и местонахождении текущего интерпретатора команд;

LANG – языковые настройки и кодировка символов.

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

$ printenv

Просмотр переменных среды через printenv

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

SHELL=/bin/bash
PWD=/root
HOME=/root
LANG=en_US.UTF-8
TERM=xterm
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

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

ТТеперь выведем значение только одной определенной переменной, например, LANG:

$ printenv LANG

Значение переменной LANG

Результат тот же, значит команда работает верно.

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

$ env

Просмотр значений переменных среды через env

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

Общий синтаксис для установки пользовательского параметра будет следующим:

env VAR="значення" <команда> <аргументи команди>

Сменные оболочки и их использование

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

BASH_VERSION – сохраняется текущая версия bash, которая выводится в удобном формате;

HOSTNAME – содержит текущее имя хоста;

SHELLOPTS – сохраняет список опций, которые можно установить с помощью команды set

BASHOPTS – запоминает список параметров, которые были использованы при исполнении bash

PS1 – сохраняет информацию о текущей конфигурации приглашения командной строки рабочего сеанса пользователя;

UID – сохраняет идентификатор текущего пользователя.

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

$ echo $BASH_VERSION

Просмотр значений системных параметров через echo.

Итак, текущая версия bash – 5.1.16.

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

$ NEW_VAR=' Testing bash '

Создание новой переменной

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

$ set | grep NEW_VAR

Просмотр содержимого новосозданной переменной через set

$ echo $NEW_VAR

Просмотр содержимого новосозданной переменной через echo

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

$ printenv | grep NEW_VAR

Новая переменная в списке переменных среды

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

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

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

$ bash
$ echo $NEW_VAR

Запуск оболочки и просмотр значения переменной

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

Выйдем из дочернего процесса:

$ exit

Виход из оболочки

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

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

$ export NEW_VAR

Перевод переменной в глобальную

Теперь проверим ее статус с помощью команды printenv:

$ printenv | grep NEW_VAR

Просмотр содеожимого переменной

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

Заодно проверим возможность передачи значения дочерним процессам:

$ bash
$ echo $NEW_VAR

Запуск дочерней оболочки и просмотр содержимого переменной

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

Теперь попробуем экспортировать значение из дочерней оболочки bash. Для этого наберем в терминале:

$ export VAR_EXP=" Testing bash "

Экспорт значения дочерней оболчки

Проверим, стала ли она глобальной:

$ printenv | grep VAR_EXP

Просмотр значения переменной из дочерней оболочки

Да, VAR_EXP является глобальной переменной.

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

$ exit
$ echo $VAR_EXP

Виход из дочерней оболочки и просмотр значения переменной в родительской оболочке

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

Существует также обратный путь – понижение статуса переменной до локального уровня. Продемонстрируем это с помощью следующей команды:

$ export -n NEW_VAR

Понижение статуса переменной

Произведем проверку:

$ printenv | grep NEW_VAR

Просмотр значения переменной

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

$ set | grep NEW_VAR

Просмотр значения переменной

Разработчиками также предусмотрено аннулирование любой переменной, установленной ранее. Для этого существует командане unset. Попробуем аннулировать NEW_VAR:

$ unset NEW_VAR

Анулирование переменной

Произведем проверку:

$ echo $NEW_VAR

Просмотр значения переменной

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

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

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

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

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

$ nano ~/.bashrc

Редактирование файла ~/.bashrc в nano

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

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

$ source ~/.bashrc

Актиизация новых настроек

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

$ nano /etc/profile

Замена общих системных параметров через nano

$ nano /etc/environment

Замена общих системных параметров

$ nano /etc/bash.bashrc

Замена общих системных параметров

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

Хостинг-провайдер FREEhost.UA предлагает выделенные серверы и облачный VPS для работы и обучения. У нас Вы сможете найти сервер, который будет полностью отвечать Вашим финансовым и техническим требованиям. Нашими преимуществами есть качественная круглосуточная поддержка, широкая линейка тарифных планов, быстрое выделение ресурсов и их увеличение.

Подписывайтесь на наш телеграмм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем ошиблись, или что-то пропустили?

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

Дата: 15.12.2023
Автор: Александр Ровник
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA