Все буде Україна!

Змінні середовища в Linux

  Юрій  | 

  Оновл. 18 Лип 2022  | 

 62

Змінні середовища в Linux є набором іменованих значень, що використовуються іншими програмами.

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

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

Змінні середовища та змінні оболонки

Змінні можна розділити на дві основні категорії:

   Змінні середовища (або “змінні оточення”) — це змінні, доступні в масштабах усієї системи та успадковані всіма дочірніми процесами та оболонками.

   Змінні оболонки — це змінні, які застосовуються лише до поточного екземпляра оболонки. Кожна оболонка, наприклад, bash або zsh, має свій власний набір внутрішніх змінних.

Всі змінні мають наступний формат:

KEY=значення1
KEY="Якесь інше значення"
KEY=значення1:значення2

Також при цьому слід дотримуватися певних правил:

   Імена змінних чутливі до регістру, тому змінні оточення повинні мати імена у верхньому регістрі.

   При присвоюванні змінній декількох значень вони повинні бути розділені символом :.

   Навколо символу = не повинно бути пробілів.

Існує декілька команд, за допомогою яких ви можете взаємодіяти зі змінними оточення та оболонки:

   команда env — дозволяє запускати іншу програму в користувацькому оточенні без зміни в поточному оточенні. У разі використання без аргументу виведе список змінних поточного оточення;

   команда printenv — виводить список усіх змінних оточення (або якусь окремо задану змінну);

   команда set — встановлює змінні оболонки. При використанні без аргументу виведе список усіх змінних, включаючи змінні оточення та змінні оболонки, а також функції оболонки;

   команда unset — видаляє змінні оболонки та змінні оточення;

   команда export — створює змінну оточення.

Пошук та вивід змінних середовища

Найчастіше використовувана команда виводу змінних середовища — printenv. Якщо команді в якості аргументу передати ім’я змінної, то буде відображено значення лише цієї змінної. Якщо ж викликати printenv без аргументів, то виведеться список (по рядкам) всіх змінних середовища.

Наприклад, щоб отримати значення змінної HOME, потрібно використати наступну команду:

$ printenv HOME

В результаті ми побачимо шлях до домашнього каталогу поточного користувача:

Ви також можете передати команді printenv відразу декілька аргументів, наприклад:

$ printenv LANG PWD

Якщо ви виконаєте команду printenv або env без будь-яких аргументів, то вони покажуть список всіх змінних середовища:

$ printenv

Нижче наведено деякі з найбільш поширених змінних середовища:

   USER — поточний користувач.

   PWD — поточна директорія.

   OLDPWD — попередня робоча директорія. Використовується оболонкою для того, щоб повернутися в попередній каталог при виконанні команди cd -.

   HOME — домашня директорія поточного користувача.

   SHELL — шлях до оболонки поточного користувача (наприклад, bash або zsh).

   EDITOR — заданий за замовчуванням редактор. Цей редактор викликається у відповідь на команду edit.

   LOGNAME — ім’я користувача, яке використовується для входу в систему.

   PATH — шляхи до каталогів, у яких здійснюватиметься пошук викликаних команд. При виконанні команди система проходитиме по даним каталогам у вказаному порядку і вибере перший з них, в якому знаходитиметься виконуваний файл шуканої команди.

   LANG — поточні налаштування мови та кодувань.

   TERM — тип поточного емулятора терміналу.

   MAIL — місце зберігання пошти поточного користувача.

   LS_COLORS — задає кольори, що використовуються для виділення об’єктів (наприклад, різні типи файлів у виводі команди ls будуть виділені різними кольорами).

Найпоширеніші змінні оболонки:

   BASHOPTS — список задіяних параметрів оболонки, розділених двокрапкою.

   BASH_VERSION — версія запущеної оболонки bash.

   COLUMNS — кількість стовпців, які використовуються для відображення вихідних даних.

   DIRSTACK — стек директорій, до якого можна застосовувати команди pushd та popd.

   HISTFILESIZE — максимальна кількість рядків для файлу історії команд.

   HISTSIZE — кількість рядків з файлу історії команд, які можна зберігати в пам’яті.

   HOSTNAME — ім’я поточного хоста.

   IFS — внутрішній розділювач поля в командному рядку (за замовчуванням використовується пробіл).

   PS1 — визначає зовнішній вигляд рядку запрошення вводу нових команд.

   PS2 — другий рядок запрошення.

   SHELLOPTS — параметри оболонки, які можна встановити за допомогою команди set.

   UID — ідентифікатор поточного користувача.

Команди printenv та env виводять тільки змінні середовища. Якщо ви хочете отримати список всіх змінних, включаючи змінні (та функції) оболонки, то можете використати команду set:

$ set

Команда відобразить список усіх змінних. Він досить великий, тому я заздалегідь перенаправив вивід у команду more.

Щоб знайти всі змінні, що містять вказаний рядок, використовуйте команду grep:

$ printenv | grep [ІМ'Я_ЗМІННОЇ]

Нижче наведено приклад пошуку змінних, у назві яких міститься рядок USER:

Для відображення змінних оболонки можна також використовувати команду echo. Наприклад, щоб вивести в термінал значення змінної BASH_VERSION, ви повинні виконати:

$ echo $BASH_VERSION

Встановлення змінних оболонки

Щоб створити нову змінну оболонки з іменем, наприклад, NEW_VAR та значенням Ravesli.com, просто введіть:

$ NEW_VAR='Ravesli.com'

Ви можете переконатися, що змінна дійсно була створена, за допомогою команди echo:

$ echo $NEW_VAR

або

$ set | grep NEW_VAR

Використовуйте команду printenv, щоб перевірити, чи є наша змінна змінною середовища:

$ printenv NEW_VAR

Вивід команди виявився порожнім, що говорить нам про те, що створена нами змінна не є змінною середовища.

Ви можете спробувати вивести змінну в новій оболонці, але вивід також буде порожнім:

$ bash -c 'echo $NEW_VAR'

Встановлення змінних середовища

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

Для створення змінної середовища експортуємо нашу нещодавно створену змінну оболонку:

$ export NEW_VAR

Перевіряємо результат, чи дійсно ми створили змінну середовища:

$ printenv NEW_VAR

На цей раз, якщо ви спробуєте відобразити змінну в новій оболонці, отримайте її значення:

$ bash -c 'echo $NEW_VAR'

Результат:

Ravesli.com

Ви також можете використовувати наступну конструкцію для створення змінної середовища:

$ export MY_NEW_VAR="My New Var"

Примітка: Створені таким чином змінні середовища доступні лише у поточному сеансі. Якщо ви відкриєте нову оболонку або вийдете з системи, всі змінні будуть втрачені.

Як зробити змінні середовища постійними?

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

Щоб встановити постійну змінну середовища для поточного користувача, відкрийте файл .bashrc:

$ sudo nano ~/.bashrc

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

export [ІМ'Я_ЗМІННОЇ]=[ЗНАЧЕННЯ_ЗМІННОЇ]

Збережіть та закрийте файл. Зміни застосуються після перезапуску оболонки. Якщо ви бажаєте застосувати зміни під час поточного сеансу, використайте команду source:

$ source ~/.bashrc

Щоб вказати постійні змінні середовища для всіх користувачів, створіть .sh-файл в каталозі /etc/profile.d:

$ sudo nano /etc/profile.d/[ім'я_файлу].sh

Синтаксис додавання змінних до файлу такий самий, як і у випадку з файлом .bashrc:

Збережіть та закрийте файл. Зміни застосуються при наступному вході в систему.

Видалення змінних

Щоб повністю видалити змінну будь-якого типу, використовуйте команду unset:

$ unset NEW_VAR

Висновки

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

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

Існує безліч інших поширених сценаріїв, в яких вам потрібно буде прочитати або змінити параметри/дані вашого середовища або оболонки. Тепер ви знаєте, як це можна зробити.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *