Читання і установка змінних середовища і оболонки на сервері linux

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

Пропозиція від 8host.com

Читання і установка змінних середовища і оболонки на сервері linux

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

Один із способів відстеження оболонкою даної інформації - це використання середовища оточення. Середовище - це область, яка містить визначальні властивості системи змінні, яку оболонка будує при кожному запуску сесії.

Як працює середовище та його змінні

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

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

Середовище має вигляд рядка, що містить пари виду «ключ-значення». Кілька значень, як правило, поділяються символом двокрапки (:). Кожна пара, в цілому, виглядає приблизно так:

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

КЛЮЧ = "значення з пробілами"

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

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

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

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

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

Кожна сесія відстежує свої змінні оболонки і середовища. Вивести їх можна кількома способами.

printenv
SHELL = / bin / bash
TERM = xterm
USER = demouser
LS_COLORS = rs = 0: di = 01; 34: ln = 01; 36: mh = 00: pi = 40; 33: so = 01; 35: do = 01; 35: bd = 40; 33; 01: cd = 40; 33; 01: or = 40; 31; 01: su = 37; 41: sg = 30; 43: ca.
MAIL = / var / mail / demouser
PATH = / usr / local / bin: / usr / bin: / bin: / usr / local / games: / usr / games
PWD = / home / demouser
LANG = en_US.UTF-8
SHLVL = 1
HOME = / home / demouser
LOGNAME = demouser
LESSOPEN = | / Usr / bin / lesspipe% s
LESSCLOSE = / usr / bin / lesspipe% s% s
_ = / Usr / bin / printenv

Це типовий приклад виведеного командами printenv і env результату. Дані команди відрізняються лише кількома індивідуальними функціями. Наприклад, printenv може запитувати значення окремих змінних:

printenv SHELL
/ Bin / bash

Команда env дозволяє змінювати середу, в якій запущені програми, передаючи набір визначень змінних в команду, приблизно так:

env VAR1 = "blahblah" command_to_run command_options

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

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

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

Як правило, цей список досить довгий. Щоб вивести його в більш зручному форматі, відкрийте його за допомогою програми-пейджера:

Цей список містить величезну кількість додаткової інформації, яка в даний момент не потрібна (наприклад, деякі функції bash).

Щоб «почистити» виведений результат, потрібно запустити команду set в режимі POSIX, який пропускає функції оболонки. Це потрібно виконати в субоболочке, щоб не змінити поточну середу:

(Set -o posix; set)

Дана дія виведе всі змінні середовища і оболонки.

Можна також порівняти цей результат з результатом команд env / printenv і спробувати вивести список лише змінних оболонки, але такий перелік не буде ідеальним, оскільки дані команди виводять інформацію по-різному:

comm -23 <(set -o posix; set | sort) <(env | sort)

Швидше за все, список буде містити кілька змінних середовища, оскільки команда set виводить значення в лапках, а команди printenv і env - немає.

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

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

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

Нижче наведено список основних змінних середовища:

  • SHELL. описує оболонку, яка інтерпретує введені команди. У більшості випадків за замовчуванням встановлена ​​bash, але це значення можна змінити в разі потреби.
  • TERM. вказує вид терміналу, емульованого при запуску оболонки. Залежно від операційних вимог можна емулювати різні апаратні термінали. Як правило, про це не потрібно турбуватися.
  • USER. поточний користувач.
  • PWD. поточний робочий каталог.
  • OLDPWD. попередній робочий каталог. Оболонка зберігає його на випадок запуску команди cd -.
  • LS_COLORS. визначає колірні коди, які використовуються для кольорового виводу результату команди ls. Такий висновок допомагає користувачеві швидше прочитати результат команди (наприклад, швидко розрізнити типи файлів).
  • MAIL. шлях до поточного поштової скриньки користувача.
  • PATH. список каталогів, до яких звертається система при виконанні команд. Коли користувач запускає команду, система перевіряє ці каталоги в зазначеному порядку в пошуках виконуваного файлу.
  • LANG. поточні настройки мови та локалізації, в тому числі кодування символів.
  • HOME. домашній каталог поточного користувача.
  • _. остання виконана команда.

Ознайомившись зі списком змінних середовища, вивчіть список змінних оболонки:

  • BASHOPTS. список опцій, використаних при виконанні bash. Це можна застосовувати для того, щоб перевірити, чи працює Середовище повинне чином.
  • BASH_VERSION. запущена версія bash в зрозумілій формі.
  • BASH_VERSINFO. версія bash в машиночитаемом форматі.
  • COLUMNS. визначає ширину виводу в шпальтах.
  • DIRSTACK. стек каталогів, доступних командам pushd і popd.
  • HISTFILESIZE. максимальна кількість рядків, що міститься у файлі історії команд.
  • HISTSIZE. Кількість команд, які необхідно запам'ятовувати в списку історії.
  • HOSTNAME. поточне ім'я хоста.
  • IFS: Внутрішній роздільник полів введення в командному рядку. За замовчуванням встановлено пробіл.
  • PS1. визначає рядок первинного запрошення - вид командного рядка при запуску сесії оболонки. Мінлива PS2 встановлює рядок вторинного запрошення, якщо команда займає кілька рядків.
  • SHELLOPTS. параметри оболонки, які можна встановити за допомогою set.
  • UID. унікальний ідентифікатор поточного користувача.

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

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

Створення змінних оболонки

Для початку потрібно задати змінні оболонки поточної сесії. Це робиться дуже просто, для цього потрібно лише вказати ім'я і значення. Як вже було сказано, для написання імен таких змінних використовуються великі літери.

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

Отже, отримана змінна оболонки дійсна в поточній сесії, але не передається її дочірнім процесам.

Щоб в цьому переконатися, використовуйте команду grep на результат команди set:

set | grep TEST_VAR
TEST_VAR = 'Hello World!'

Переконатися, що дана змінна не є змінною середовища, також можна, запустивши grep на результат команди printenv:

printenv | grep TEST_VAR

Дана дія не виведе ніякого результату.

Це можна використовувати, щоб відкрити значення будь-якої змінної оболонки або середовища.

echo $ TEST_VAR
Hello World!

Як можна бачити, щоб звернутися до значення змінної, потрібно використовувати символ $.

Знову ж, отримана змінна не повинна бути передана будь-якій дочірньому процесу. Щоб це протестувати, всередині поточної оболонки розгорніть нову bash-оболонку:

bash
echo $ TEST_VAR

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

Щоб повернутися у вихідну оболонку, введіть exit:

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

Тепер спробуйте перетворити змінну оболонки в змінну середовища. Це робиться шляхом експорту змінної. Команда, яка виконує експорт, має відповідну назву.

printenv | grep TEST_VAR
TEST_VAR = Hello World!

Тепер ця змінна виведена в даному списку. Можна також знову розгорнути дочірню оболонку:

bash
echo $ TEST_VAR
Hello World!

Відмінно! Дочірня оболонка отримала змінну вихідної оболонки. Спробуйте експортувати ще одну змінну, перш ніж покинути дочірню оболонку.

export NEW_VAR = "Testing export"

Перевірте, експортувалася змінна:

printenv | grep NEW_VAR
NEW_VAR = Testing export

Тепер поверніться у вихідну оболонку:

Перевірте, чи можна відкрити цю змінну:

Результат не повертається

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

Мінлива NEW_VAR була встановлена ​​як змінна середовища дочірньої оболонки. Ця змінна дійсна для даної оболонки і її дочірніх оболонок і процесів. Після повернення користувача в вихідну оболонку дана середу була зруйнована.

Переміщення і скидання змінних

Мінлива TEST_VAR все ще є змінною середовища. Щоб знову зробити її змінної оболонки, наберіть:

export -n TEST_VAR

Тепер ця змінна більше не є змінною середовища:

printenv | grep TEST_VAR

Це знову змінна оболонки:

set | grep TEST_VAR
TEST_VAR = 'Hello World!'

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

Переконайтеся, що такої змінної більше немає:

Результат не був виведений, оскільки змінна була скинута.

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

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

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

Типи сесій оболонки

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

Також сесії оболонки бувають інтерактивними і неінтерактивному.

Інтерактивна сесія оболонки (interactive shell) - це сесія, прив'язана до терміналу. Неінтерактивному сесія оболонки (non-interactive shell) - це сесія, не прив'язана до терміналу.

Отже, сесії оболонки класифікуються за такими критеріями: стартова-дочірня, інтерактивна-неінтерактивному.

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

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

Така сесія Новомосковскет файли

/.profile і не Новомосковскет інших файлів.

Дочірня сесія, в свою чергу, Новомосковскет /etc/baash.bashrc, а потім призначений для користувача файл

/.bash.rc для розгортання середовища.

Неінтерактивні оболонки Новомосковскют змінну середовища BASH_ENV і вказаний файл, щоб створити нове середовище.

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

Як бачите, конфігурації розкидані по різних файлах.

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

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

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

Відкрийте даний файл:

Швидше за все, він вже містить трохи даних. Більшість заданих тут значень - це параметри bash, що не мають відношення до змінних середовища. Змінні в даному файлі задаються точно так же, як і в командному рядку:

Щоб задати загальносистемні змінні, внесіть їх в / etc / profile, /etc/bash.bashrc або / etc / environment.

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

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

Є безліч інших більш поширених ситуацій, в яких може виникнути необхідність прочитати змінні або змінити середу системи. Описані в цьому посібнику інструменти і методи - відмінна основа для розвитку навичок роботи зі змінними і їх правильного використання.

Схожі статті