Статья также доступна на украинском (перейти к просмотру).
Оглавление
- Организация среды выполнения команд в Linux-системах
- Сменные среды и работа с ними
- Сменные оболочки и их использование
- Взаимосвязь переменных среды и оболочки и их совместное использование
- Автоматическая установка значений переменных для разных видов сеансов в Bash
Администрирование Linux-систем невозможно без знания и владения методами управления переменными программной среды. Однако ситуация осложняется большим количеством различных типов переменных и наличием нескольких конфигурационных файлов с разной степенью приоритетности, размещенных в разных местах. Знание особенностей работы данного сегмента поможет упростить и ускорить процесс управления системой. Рассмотрим более подробно эти моменты и продемонстрируем работу с переменными на конкретных примерах.
Организация среды выполнения команд в Linux-системах
Взаимодействие пользователя с Linux-системой обычно происходит посредством командного интерпретатора или оболочки, которая интерпретирует введенные из терминала или имеющиеся в сценарии команды и запускает их на выполнение. Для возможности такого «общения», каждый раз образуется отдельный сеанс работы с пользователем, который имеет свои особенности. Например, это может касаться профиля пользователя или системных настроек. При инициализации нового сеанса считывает значения параметров, установленных в файлах конфигурации и открывает сеанс с соответствующими свойствами.
Фиксация значений параметров программной среды происходит с помощью переменных, которые можно условно разделить на глобальные и локальные. К первым обычно относят переменные среды, значения которых становятся доступными для всех запущенных программ и дочерних процессов оболочки. Локальные же переменные касаются работы только текущей оболочки и обычно используются для хранения характеристик текущей оболочки и пользователя. Их значения не передаются подчиненным действиям. Они получили название – сменные оболочки.
В соответствии с общим соглашением любая переменная должна отличаться от других типов языковых конструкций оболочки с помощью использования в ее названии символов, написанных только в верхнем регистре.
Для просмотра или изменения значений переменных используется определенный набор команд, специфичный для каждого из типов переменных. Ниже будут рассмотрены основные наборы переменных каждого типа и работа с ними.
Сменные среды и работа с ними
Рассмотрим наиболее часто используемые переменные в работе Администратора.
TERM – устанавливает тип используемого терминала;
PATH – определяет список директорий по поиску исполнительных файлов;
PWD – хранит информацию о текущем рабочем каталоге пользователя;
HOME – хранит данные о домашнем каталоге текущего пользователя;
USER – фиксирует имя текущего авторизованного пользователя системы;
SHELL – сохраняет данные о названии и местонахождении текущего интерпретатора команд;
LANG – языковые настройки и кодировка символов.
Для просмотра значений переменных среды существует команда 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
Результат тот же, значит команда работает верно.
Тот же результат, что касается вывода общего списка, можно также получить с помощью команды env. Проверим это:
$ env
В результате мы получили тот же список в том же формате. Однако, в отличие от предыдущей команды, конструкция env не может выводить отдельные параметры, а только список. Но она более функциональна и способна изменять уже установленные значения системных параметров, а также параметров, созданных пользователем.
Общий синтаксис для установки пользовательского параметра будет следующим:
env VAR="значення" <команда> <аргументи команди>
Сменные оболочки и их использование
Приведем здесь список некоторых из наиболее применяемых параметров оболочки:
BASH_VERSION – сохраняется текущая версия bash, которая выводится в удобном формате;
HOSTNAME – содержит текущее имя хоста;
SHELLOPTS – сохраняет список опций, которые можно установить с помощью команды set
BASHOPTS – запоминает список параметров, которые были использованы при исполнении bash
PS1 – сохраняет информацию о текущей конфигурации приглашения командной строки рабочего сеанса пользователя;
UID – сохраняет идентификатор текущего пользователя.
Значения системных параметров можно просмотреть с помощью команды echo. Для примера,рассмотрим текущую версию оболочки. Для этого наберем в терминале:
$ echo $BASH_VERSION
Итак, текущая версия bash – 5.1.16.
Средства bash предоставляют широкие возможности для работы с пользовательскими переменными. К примеру, для создания новой переменной достаточно набрать в терминале:
$ NEW_VAR=' Testing bash '
Для просмотра его содержимого можно использовать в качестве команды set, да и команду echo:
$ set | grep NEW_VAR
$ echo $NEW_VAR
Можно убедиться, что это работает и создана переменная, доступная для среды в пределах текущей оболочки. Но не следует забывать, что она только локальная, о чем уже говорилось выше. Чтобы убедиться в этом, попытаемся применить к ней команду, предназначенную для работы с параметрами глобального уровня:
$ 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
Как видим, нужные параметры со своими значениями можно вставлять даже в управляющие конструкции bash, такие как циклы или условные операторы, что делает формирование среды рабочего сеанса достаточно гибким. Такой случай настроек встречается наиболее часто.
После внесения и сохранения необходимых изменений файл закрывается. Для того чтобы выставленные настройки как можно скорее вступили в действие, достаточно выполнить следующую команду:
$ source ~/.bashrc
Если нам нужно установить ряд общесистемных параметров, тогда лучше воспользоваться следующими файлами конфигурации:ї:
$ nano /etc/profile
$ 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