• База знань
  • /
  • Блог
  • /
  • 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 вибирає інформацію про його налаштування із кількох конфігураційних файлів. І, тому, достатньо вставити потрібні параметри у визначений файл і оболонка буде у подальшому в автоматичному режимі отримувати дані, котрі потрібні для створення робочого сеансу із потрібною нам конфігурацією. Саме це є основним засобом автоматизації.

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

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

$ nano ~/.bashrc

Редагування файлу ~/.bashrc в nano

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

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

$ source ~/.bashrc

Активізація нових налаштувань

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

$ nano /etc/profile

Зміна загальнb[ системних параметрів через 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