• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

Командна оболонка  Bash – поняття, команди та використання

Вступ

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

Bash – основні поняття

Bash (Bourne again shell) є вдосконаленим варіантом відомої командної оболонки sh (Bourne shell). Її основне призначення – забезпечити взаємодію між користувачем та ядром операційної системи. Така взаємодія може відбуватися двома шляхами. По-перше, за допомогою набраних у терміналі команд (інтерфейс командної строчки). По-друге, шляхом запуску на виконання заздалегідь підготовлених файлів сценаріїв (shell-скриптів).

Для забезпечення вказаних можливостей, у bash передбачена наявність власної системи команд та мовних конструкцій. Внутрішні, або інтегровані у оболонку команди, під час роботи знаходяться у оперативній пам'яті комп’ютера, а зовнішні зберігаються у вигляді файлів у системному каталозі, зазвичай, у /usr/bin або /bin.

Внутрішні команди, зокрема, дозволяють виконувати наступні дії:

  • Виконання операцій над файловою системою;
  • Робота зі змінними;
  • Управління сценаріями;
  • Керування запущеними процесами;
  • Забезпечення вводу-виводу з периферійних пристроїв.

Bash-сценарії або shell-скрипти дозволяють автоматизувати процес керування системою, починаючи з автоматизації процесу оновлення пакетів і закінчуючи майже повним контролем над роботою операційної системи. Їх перевагами над деякими із своїх «конкурентів», зокрема, є:

  • «Прозорість» коду для користувача, оскільки команди зберігаються у текстовому форматі;
  • Структурованість сценарію, тобто є можливість вказати послідовність виконання команд;
  • Сумісність із більшістю *nix-систем.

Можна виділити декілька умовно конкуруючих аналогів Bash. Це, наприклад, такі командні процесори:

  • sh – «застарілий» стандарт для *nix-систем;
  • ksh та zsh – розширені варіанти sh;
  • csh та tcsh – засновані на мові С та мають відповідний синтаксис;
  • mksh – орієнтована на створення сценаріїв;
  • fish – має спрощений склад команд і робить акцент на зручність роботи;
  • dash – більш «легкий» програмний засіб з обмеженою функціональністю.

Робота з командною строчкою Bash

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

Отримання інформації про поточну оболонку та її налаштування

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

Спочатку з'ясуємо, яка оболонка активна для нашої системи Ubuntu 20.04. Для цього звернемося до змінної програмного середовища SHELL. Введемо у терміналі:

$ echo $SHELL

Перевірка активної оболонки.

Ми отримали шлях до місцезнаходження файлів активної оболонки – /bin/bash. Отже, це дійсно bash. Її характерною ознакою є специфічний формат запрошення у командній строчці, котрий має наступний вигляд:

ім'я поточного користувача@ім'я хоста:поточний каталог #($)

Символом у кінці строчки позначаються привілеї поточного користувача: # – для користувачів з правами суперкористувача (root), $ – для звичайних користувачів. Отже, у нашому випадку користувачем є адміністратор, а хост має ім'я dedicated. Знак тільди (~) після імені хоста вказує на те, що ми знаходимося у домашній директорії суперкористувача root.

Для перегляду всіх доступних у системі shell-оболонок введемо у терміналі:

$ cat /etc/shells

список доступних shell-оболонок

Ми бачимо доволі значний перелік доступних командних процесорів, і у випадку чого, завжди можемо обрати будь-який з них. Для цього існує команда chsh (change shell) з параметром s. Для прикладу, змінимо поточний процесор на dash:

$ chsh -s /bin/dash root

Заміна активної оболнки.

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

Перевірка заміни shell-оболонки.

Вигляд запрошення у командній строчці став іншим. У ньому залишилася лише ознака привілей поточного користувача – «#». Повернемо попередній процесор за допомогою наступної команди:

$ chsh -s /bin/bash root

Повернення до оболонки bash

Після виходу з системи та повторної авторизації ми знову повернулися до попереднього налаштування середовища:

Переіврка активності оболнки bash.

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

$ which bash

Шлях до файлу оболонки.

Можна переконатися, що команда which «працює».

Ще одним способом для з'ясування того, який командний процесор є активним на даний час, є використання команди ps, котра повертає інформацію про запущений процес із заданим ідентифікатором. Ідентифікатором для оболонки завжди є символи «$$». Введемо у терміналі:

$ ps –p$$

Перевірка активності оболонки

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

Отримання довідкової та іншої інформації про bash-процесор

 Для отримання довідкової інформації про командний процесор, параметри запуску та іншої інформації, введемо у терміналі:

$ man bash

Довідка оболонки bash

Після натискання на клавішу «h» отримаємо додаткову пояснювальну інформацію:

Додаткова пояснювальна інформація.

Натиснемо «q» та вийдемо з довідки.

Для з'ясування типу команд, котрі використовуються, тобто, чи є вони внутрішніми або зовнішніми, існує наступна конструкція:

type <ім'я_команди>

Для прикладу, визначимо тип команди cd. Введемо у терміналі:

$ type cd

Визначення типу команди cd

Таким чином, cd відноситься до внутрішніх команд. Тепер перевіримо таким же чином команду whereis:

$ type whereis

 Визначення типу команди whereis

Ми бачимо, що вказана команда є зовнішньою, оскільки вона зберігається у файлі, до якого виведено повний шлях доступу: /usr/bin/whereis.

Можна, навіть, одразу визначити список внутрішніх команд процесора:

$ help

Виклик довідки.

Тобто, ми отримали повний список команд разом із параметрами їх запуску, що є дуже зручно.

Скрипти та їх використання

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

Для прикладу, створимо найпростіший скрипт із ім'ям one_lesson, у складі якого буде лише одна команда echo. Введемо у терміналі:

$ nano one_lesson.sh

У результаті відкриється вікно редактора nano, де ми введемо наступний текст:

#!/bin/bash
#Це наш перший скрипт
echo “One lesson!”

Виконання роботи скрипта.

Розберемо кожну строчку сценарію.

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

Друга строчка починається з символу «#», що є ознакою коментаря, і тому інтерпретатор буде сприймати текст, вказаний після зазначеного символу лише як текст і, відповідно, не буде виконувати команди з нього, навіть, якщо вони б там були.

Третя строчка є безпосередньо командою, котра виводить результати на пристрій виводу.

Збережемо введені дані (ctrl+O) та вийдемо з редактора (ctrl+X).

Запустимо підготовлений скрипт на виконання. Для цього наберемо у терміналі наступну команду:

$ bash one_lesson.sh

Запуск і результат виконання скрипта.

Як бачимо, результатом виконання скрипта буде виведення на термінал слів «One lesson!».

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

$ bash ttt/bash/newscript.sh

Це був перший спосіб запуску скриптів. Інший спосіб полягає у присвоєнні файлу сценарію атрибуту «виконавчий» та використання символів «./» для його запуску.

Щоб змінити статус нашого файлу, введемо у терміналі:

$ chmod +x one_lesson.sh

Зміна статусу файлу

Тепер запустимо скрипт:

$ ./one_lesson.sh

Запуска і результат виконання срипта.

Тобто, вказаний спосіб запуску сценаріїв є працездатним.

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

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.

Дата: 24.03.2023
Автор: Олександр Ровник
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA