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

Що таке командна оболонка (shell) у Linux?

  Юрій  | 

  Оновл. 15 Тра 2022  | 

 82

У цій статті ми розглянемо, що таке shell і навіщо це потрібно, а також найчастіше використовувані командні оболонки в Linux та Unix.

Що таке shell?

Shell (або «шелл», «командна оболонка») — це не тільки командний інтерпретатор, який забезпечує інтерфейс взаємодії між користувачем та ядром операційної системи, але й своєрідна мова програмування, в якій присутні такі конструкції, як оператори умовного розгалуження, цикли, змінні та багато іншого.

Операційна система (ОС) запускає командну оболонку для кожного користувача, коли той входить у систему чи відкриває вікно термінала. Першим, що користувач побачить у вікні терміналу, буде запрошення оболонки — воно, як правило, складається з імені користувача та імені хоста, відокремлених один від одного символом @, слідом за ними йде шлях поточної робочої директорії та один із двох символів: $ або #.

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

Вікно терміналу звичайного користувача (відображається символ $)

Вікно терміналу привілейованого (root) користувача (відображається символ #)

Примітка: Знак тильди (~) вказує на те, що ми знаходимося у домашньому каталозі поточного користувача.

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

Нижче наведено приклад виконання простої команди date, яка повертає поточну дату та час:

Внутрішні та зовнішні команди оболонки

Команди, що вводяться користувачем, діляться на два типи:

   Внутрішні — це команди, які вбудовані в оболонку.

   Зовнішні — це команди, які не вбудовані в оболонку. За своєю суттю вони є скоріше невеликими окремими програмами, які розташовані десь у файловій системі (зазвичай, у каталогах /bin або /usr/bin).

Щоб визначити тип команди, достатньо у вікні терміналу ввести type <ім'я_команди>:

Як ви можете бачити, команди dirs, pwd, cd та true є внутрішніми командами оболонки bash. А ось команди uname, id та whereis є зовнішніми, оскільки вони посилаються на відповідні файли в каталозі /usr/bin.

Ознайомитись з повним списком внутрішніх команд оболонки можна за допомогою команди help:

Як дізнатися, яка оболонка в мене встановлена?

Якщо ви починаєте своє знайомство з Linux і не змінювали оболонку, то найімовірніше, що у вашій системі використовується bash. Найпростіший спосіб дізнатися, яка оболонка використовується в даний момент — це звернутися до змінної оточення SHELL:

echo $SHELL

Крім того, можна задіяти команду ps –p $$, яка повертає інформацію про процес із заданим ідентифікатором. У нашому випадку ідентифікатором оболонки є символи $$:

ps –p $$

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

cat /etc/shells

Типи командних оболонок

У *nix-системах існує два основних типи оболонок: оболонки на основі Bourne shell та оболонки на основі C shell.

Типовими представниками оболонок типу Bourne shell є:

   sh (Bourne shell)

   bash (Bourne Again shell)

   ksh (Korn shell)

   zsh (Z Shell)

До оболонок типу C Shell відносяться:

   csh (C shell)

   tcsh (TENEX/TOPS C shell)

Нижче представлені деякі з найпоширеніших шеллів, що використовуються в *nix-системах:

Примітка: Термін “*nix-системи” означає Unix-подібні операційні системи.


sh (Bourne shell)

sh (скор. від «Bourne shell») — це найстаріша (серед розглянутих) оболонка, написана Стівеном Борном з AT&T Bell Labs для ОС UNIX v7. Оболонка доступна практично в будь-якому *nix-дистрибутиві. Багато інших шеллів походять саме від sh. Завдяки своїй швидкості роботи та компактності, ця оболонка є кращим варіантом для написання shell-скриптів. До її недоліків можна віднести відсутність функцій для використання оболонки в інтерактивному режимі, а також відсутність вбудованої обробки арифметичних та логічних виразів.

Примітка: Варто зазначити, що через загальне моральне старіння оболонки, у сучасних системах посилання на шелл sh (/bin/sh), як правило, є псевдонімом для запуску поточної новішої оболонки.

Характерні риси sh:

   Повні шляхи до інтерпретатора: /bin/sh та /sbin/sh.

   Запрошення для звичайного користувача: $.

   Запрошення для суперкористувача (root): #.


bash (Bourne-Again shell)

bash (скор. від «Bourne-Again shell») — це вдосконалений та доповнений варіант шеллу sh, який є одним з найпопулярніших сучасних командних оболонок *nix-систем.

   Сумісний з sh.

   Об’єднує в собі корисні фішки оболонок ksh та csh.

   Підтримує навігацію за допомогою стрілочок, завдяки чому можна переглядати історію команд та виконувати редагування прямо у командному рядку.

Характерні риси bash:

   Повний шлях до інтерпретатора: /bin/bash.

   Запрошення для звичайного користувача: ім'я_користувача@ім'я_хоста:~$ (де ~ — це домашній каталог поточного користувача, наприклад, mrsmith@mypc:~$).

   Запрошення для суперкористувача (root): root@ім'я_хоста:~#.


ksh (Korn shell)

ksh (скор. від «Korn shell») — це командна оболонка, яка розроблена Девідом Корном з AT&T Bell Labs в 1980-x роках.

   Є розширенням sh.

   Має зворотну сумісність з sh.

   Має інтерактивний функціонал, як в csh.

   Підтримує зручні для програмування функції, такі як: вбудована підтримка арифметичних виразів/функцій, Сі-подібний синтаксис скриптів та засоби для роботи з рядками.

   Працює швидше за csh.

   Може запускати написані для sh скрипти.

Характерні риси ksh:

   Повний шлях до інтерпретатора: /bin/ksh.

   Запрошення для звичайного користувача: $.

   Запрошення для суперкористувача (root): #.


csh (C shell)

csh (скор. від «C shell») — це командна оболонка, створена Біллом Джоєм (автором редактора vi) з метою удосконалення стандартного шеллу Unix (sh).

   Має вбудовані функції для інтерактивного використання, наприклад, псевдоніми (aliases) та історію команд.

   Підтримує зручні для програмування функції, такі як: вбудована підтримка арифметичних виразів та Cі-подібний синтаксис скриптів.

Характерні риси csh:

   Повний шлях до інтерпретатора: /bin/csh.

   Запрошення для звичайного користувача: %.

   Запрошення для суперкористувача (root): #.


tcsh (TENEX C Shell)

tcsh (скор. від «TENEX C shell») — це командна оболонка, створена Кеном Гріром, яка позиціонується як покращена версія шеллу csh.

   Має повну сумісність з csh.

   Саме в цьому шеллі вперше з’явилася функція автодоповнення команд та шляхів.

   Зручна для інтерактивної роботи.

   Підтримує редактор командного рядку у стилі vi або emacs.

   Є стандартним шеллом у FreeBSD.

Характерні риси tcsh:

   Повний шлях до інтерпретатора: /bin/tcsh.

   Запрошення для звичайного користувача: ім'я_хоста:~>.

   Запрошення для суперкористувача (root): #.


zsh (Z Shell)

zsh (скор. від «Z shell») — це командна оболонка, створена Паулем Фалстадом під час його навчання у Прінстонському університеті, яка позиціонується як вільна сучасна sh-сумісна командна оболонка.

   Серед стандартних шеллів найбільше схожа на ksh, але включає безліч покращень.

   Вбудована підтримка програмного автодоповнення команд, імен файлів та іншого.

   Підтримка перевірки орфографії та синтаксичних помилок.

   Роздільна історія команд для одночасної роботи з декількома запущеними шеллами.

Характерні риси zsh:

   Повний шлях до інтерпретатора: /bin/zsh.

   Запрошення для звичайного користувача: ім'я_хоста%.

   Запрошення для суперкористувача (root): root@ім'я_хоста:~#.


Резюмуємо

Коротка зведена таблиця для 6 вищерозглянутих командних оболонок:

Командна оболонка Шлях Запрошення (звичайний користувач) Запрошення (root)
sh (Bourne Shell) /bin/sh та /sbin/sh $ #
bash (Bourne-Again Shell) /bin/bash ім’я_користувача@ім’я_хоста:~$ ім’я_користувача@ім’я_хоста:~#
ksh (Korn Shell) /bin/ksh $ #
csh (C Shell) /bin/csh % #
tcsh (TENEX C Shell) /bin/tcsh ім’я_хоста:~> #
zsh (Z Shell) /bin/zsh % #

Примітка: Крім вищепредставлених оболонок є ще наступні:

   mksh — оболонка з основним фокусом на написання скриптів;

   dash — більш “легка” в порівнянні з bash оболонка, але через це має обмежену функціональність;

   fish — “нова” оболонка, написана в 2005 році, відмінною рисою якої є фокус на комфорті використання та спрощення командної мови;

   та інші.

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

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

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

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