2.1 Урок 2
Сертифікат: |
Linux Essentials |
---|---|
Версія: |
1.6 |
Розділ: |
2 Знайдіть свій шлях у системі Linux |
Тема: |
2.1 Основи командного рядку |
Урок: |
2 з 2 |
Вступ
Усі оболонки керують набором інформації про стан протягом сеансів оболонки. Ця інформація середовища виконання може змінюватися під час сеансу та впливати на поведінку оболонки. Ці дані також використовуються програмами для визначення аспектів конфігурації системи. Більшість цих даних зберігається у так званих змінних, які ми розглянемо в цьому уроці.
Змінні
Змінні — це частини сховища даних, наприклад тексту або чисел. Після встановлення значення змінної його можна отримати пізніше. Змінні мають ім’я, яке дозволяє отримати доступ до певної змінної, навіть якщо змінюється вміст змінної. Вони є дуже поширеним інструментом у більшості мов програмування.
У більшості оболонок Linux є два типи змінних:
- Локальні змінні
-
Ці змінні доступні лише для поточного процесу оболонки. Якщо ви створюєте локальну змінну, а потім запускаєте іншу програму з цієї оболонки, змінна більше не доступна для цієї програми. Оскільки вони не успадковуються підпроцесами, такі змінні називаються локальними змінними.
- Змінні середовища
-
Ці змінні доступні як у певному сеансі оболонки, так і в підпроцесах, породжених цим сеансом оболонки. Ці змінні можна використовувати для передачі даних конфігурації командам, які виконуються. Оскільки програми мають доступ до цих змінних, вони називаються змінними середовища. Більшість змінних середовища написані великими літерами (наприклад,
PATH
,DATE
,USER
). Набір змінних середовища за замовчуванням надає, наприклад, інформацію про домашній каталог користувача або тип терміналу. Іноді повний набір усіх змінних середовища називають середовищем.
Note
|
Змінні не є постійними. Коли оболонка, в якій вони були встановлені, закривається, всі змінні та їх вміст втрачаються. Більшість оболонок надають файли конфігурації, що містять змінні, які встановлюються щоразу, коли запускається нова оболонка. Змінні, які слід встановити постійно, необхідно додати до одного з цих файлів конфігурації. |
Маніпулювання змінними
Як системному адміністратору, вам потрібно буде створювати, змінювати або видаляти як локальні змінні, так і змінні середовища.
Робота з локальними змінними
Ви можете налаштувати локальну змінну за допомогою оператора =
(дорівнює). Просте присвоєння створить локальну змінну:
$ greeting=hello
Note
|
Не ставте пробіл перед або після оператора |
Ви можете відобразити будь-яку змінну за допомогою команди echo
. Зазвичай команда відображає текст у розділі аргументів:
$ echo greeting greeting
Щоб отримати доступ до значення змінної, вам потрібно буде використовувати $
(знак долара) перед назвою змінної.
$ echo $greeting hello
Як бачимо, змінну створено. Тепер відкрийте іншу оболонку та спробуйте відобразити вміст створеної змінної.
$ echo $greeting
Нічого не відображається. Це ілюструє, що змінні завжди існують лише в певній оболонці.
Щоб переконатися, що змінна насправді є локальною змінною, спробуйте створити новий процес і перевірте, чи може цей процес отримати доступ до змінної. Ми можемо зробити це, запустивши іншу оболонку і дозволивши цій оболонці запустити команду echo
. Оскільки нова оболонка запускається в новому процесі, вона не успадкує локальні змінні від свого батьківського процесу:
$ echo $greeting world hello world $ bash -c 'echo $greeting world' world
Note
|
Обов’язково використовуйте одинарні лапки у прикладі вище. |
Щоб видалити змінну, вам потрібно буде використати команду unset
:
$ echo $greeting hey $ unset greeting $ echo $greeting
Note
|
|
Робота з глобальними змінними
Щоб зробити змінну доступною для підпроцесів, перетворите її з локальної на змінну середовища. Це робиться за допомогою команди export
. Коли команда викликається з іменем змінної, ця змінна додається до середовища оболонки:
$ greeting=hello $ export greeting
Note
|
Знову ж таки, переконайтеся, що не використовуєте |
Простіший спосіб створити змінну середовища - поєднати обидва вищезазначені методи, призначивши значення змінної в частині аргументу команди.
$ export greeting=hey
Давайте ще раз перевіримо, чи доступна змінна для підпроцесів:
$ export greeting=hey $ echo $greeting world hey world $ bash -c 'echo $greeting world' hey world
Інший спосіб використання змінних середовища — використання їх перед командами. Ми можемо перевірити це за допомогою змінної середовища TZ
, яка містить часовий пояс. Ця змінна використовується командою date
для визначення часового поясу для відображення:
$ TZ=EST date Thu 31 Jan 10:07:35 EST 2019 $ TZ=GMT date Thu 31 Jan 15:07:35 GMT 2019
Ви можете відобразити всі змінні середовища за допомогою команди env
.
Змінна PATH
Змінна PATH
є однією з найважливіших змінних середовища в системі Linux. Вона зберігає список каталогів, розділених двокрапкою, що містять виконувані програми, які можна запускати з оболонки Linux.
$ echo $PATH /home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Щоб додати новий каталог до змінної, вам потрібно буде використовувати знак двокрапки (:
).
$ PATH=$PATH:new_directory
Ось приклад:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ PATH=$PATH:/home/user/bin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin
Як бачите, $PATH
використовується в новому значенні, призначеному для PATH
. Визначається зміст цієї змінної під час виконання команди і забезпечується збереження оригінального вмісту змінної. Звичайно, ви можете використовувати й інші змінні при присвоєнні, як показано нижче:
$ mybin=/opt/bin $ PATH=$PATH:$mybin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin:/opt/bin
Зі змінною PATH
потрібно поводитись обережно, оскільки вона має вирішальне значення для роботи з командним рядком. Давайте розглянемо наступну змінну PATH
:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Щоб дізнатися, як оболонка викликає певну команду, можна запустити команду which
з назвою команди в якості аргументу. Наприклад, ми можемо спробувати дізнатися, де зберігається nano
:
$ which nano /usr/bin/nano
Як видно, виконуваний файл nano
розташований у каталозі /usr/bin
. Давайте видалимо каталог зі змінною та перевіримо, чи команда все ще працює:
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games
Давайте знову подивимося на команду nano
:
$ which nano which: no nano in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games)
Як бачимо, команда не знайдена, тому не виконується. Повідомлення про помилку також пояснює причину, чому команда не була знайдена, і в яких місцях її шукали.
Давайте повернемо каталоги та спробуємо запустити команду ще раз.
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ which nano /usr/bin/nano
Тепер наша команда знову працює.
Tip
|
Порядок елементів у |
Вправи до посібника
-
Створіть локальну змінну
number
. -
Створіть змінну середовища
ORDER
, використовуючи один із двох вищенаведених методів. -
Відобразіть як імена змінних, так і їх вміст.
-
Які області дії створених раніше змінних?
Дослідницькі вправи
-
Створіть локальну змінну
nr_files
і призначте їй значення, що дорівнює кількості рядків, знайдених у файлі/etc/passwd
. Підказка: Розберіться з командоюwc
і командою заміни та не забудьте про лапки. -
Створіть змінну середовища
ME
. Призначте їй значення змінноїUSER
. -
Додайте значення змінної
HOME
доME
з роздільником:
. Відобразіть вміст змінноїME
. -
Використовуючи наведений вище приклад дати, створіть змінну під назвою
today
і призначте дату для одного з часових поясів. -
Створіть іншу змінну під назвою
today1
і призначте їй системну дату.
Підсумки
У цій лабораторній роботі ви дізналися про:
-
Типи змінних
-
Як створити змінні
-
Як маніпулювати змінними
Команди, які використовуються у вправах:
env
-
Відображає поточне середовище.
echo
-
Виводить текст.
export
-
Робить локальні змінні доступними для підпроцесів.
unset
-
Видаляє змінну.
Відповіді до вправ посібника
-
Створіть локальну змінну
number
.$ number=5
-
Створіть змінну середовища
ORDER
, використовуючи один із двох вищенаведених методів.$ export ORDER=desc
-
Відобразіть як імена змінних, так і їх вміст.
$ echo number number $ echo ORDER ORDER $ echo $number 5 $ echo $ORDER desc
-
Які області дії створених раніше змінних?
-
Область локальної змінної
number
— це лише поточна оболонка. -
Область змінної середовища
ORDER
— це поточна оболонка та всі створені нею підоболонки.
-
Відповіді до дослідницьких вправ
-
Створіть локальну змінну
nr_files
і призначте їй значення, що дорівнює кількості рядків, знайдених у файлі/etc/passwd
. Підказка: Розберіться з командоюwc
і командою заміни та не забудьте про лапки.$ nr_files=`wc -l /etc/passwd`
-
Створіть змінну середовища
ME
. Призначте їй значення змінноїUSER
.$ export ME=$USER
-
Додайте значення змінної
HOME
доME
з роздільником:
. Відобразіть вміст змінноїME
.$ ME=$ME:$HOME $ echo $ME user:/home/user
-
Використовуючи наведений вище приклад дати, створіть змінну під назвою
today
і призначте дату для одного з часових поясів.Нижче наведені часові пояси за GMT та EST як приклад, але ви можете обрати будь-який часовий пояс.
$ today=$(TZ=GMT date) $ echo $today Thu 31 Jan 15:07:35 GMT 2019
або
$ today=$(TZ=EST date) $ echo $today Thu 31 Jan 10:07:35 EST 2019
-
Створіть іншу змінну під назвою
today1
і призначте їй системну дату.Припустимо, що ви перебуваєте в поясі GMT:
$ today1=$(date) $ echo $today1 Thu 31 Jan 10:07:35 EST 2019