Стаття також доступна російською (перейти до перегляду).
Вступ
- Bash – основні поняття
- Робота з командною строчкою Bash
- Отримання інформації про поточну оболонку та її налаштування
- Отримання довідкової та іншої інформації про 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
Ми бачимо доволі значний перелік доступних командних процесорів, і у випадку чого, завжди можемо обрати будь-який з них. Для цього існує команда chsh (change shell) з параметром s. Для прикладу, змінимо поточний процесор на dash:
$ chsh -s /bin/dash root
Після виходу з системи і повторної авторизації під тим же ім'ям, ми бачимо активною оболонку dash замість попередньої:
Вигляд запрошення у командній строчці став іншим. У ньому залишилася лише ознака привілей поточного користувача – «#». Повернемо попередній процесор за допомогою наступної команди:
$ chsh -s /bin/bash root
Після виходу з системи та повторної авторизації ми знову повернулися до попереднього налаштування середовища:
Для того, щоб побачити шлях до розміщення файлів поточної оболонки також можна використати наступну команду:
$ which bash
Можна переконатися, що команда which «працює».
Ще одним способом для з'ясування того, який командний процесор є активним на даний час, є використання команди ps, котра повертає інформацію про запущений процес із заданим ідентифікатором. Ідентифікатором для оболонки завжди є символи «$$». Введемо у терміналі:
$ ps –p$$
Отже, це також реальний шлях для визначення активної оболонки системи.
Отримання довідкової та іншої інформації про bash-процесор
Для отримання довідкової інформації про командний процесор, параметри запуску та іншої інформації, введемо у терміналі:
$ man bash
Після натискання на клавішу «h» отримаємо додаткову пояснювальну інформацію:
Натиснемо «q» та вийдемо з довідки.
Для з'ясування типу команд, котрі використовуються, тобто, чи є вони внутрішніми або зовнішніми, існує наступна конструкція:
type <ім'я_команди>
Для прикладу, визначимо тип команди cd. Введемо у терміналі:
$ type cd
Таким чином, cd відноситься до внутрішніх команд. Тепер перевіримо таким же чином команду whereis:
$ type 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