Что такое командная оболочка (shell) в Linux?

  Дмитрий Бушуев  | 

  Обновл. 27 Июл 2021  | 

 15798

 ǀ   1 

В этой статье мы разберемся, что такое shell и зачем это нужно, а также рассмотрим наиболее часто используемые командные оболочки в Linux и Unix.

Что такое shell?

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

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

Если пользователь не наделен особыми правами, то в качестве приглашения к вводу команд в терминале будет отображаться символ $. Если же был выполнен вход под учетной записью привилегированного (root) пользователя, то в терминале вы увидите символ #:

Окно терминала обычного пользователя (виден символ $)

Окно терминала привилегированного (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 (33 оценок, среднее: 4,88 из 5)
Загрузка...

Комментариев: 1

  1. pit bull:

    Выражаю огромную благодарность за уроки. Надеюсь будут материалы о том, как правильно устанавливать программы на Linux. А то я в этой теме ещё очень маленький и некоторые программы у меня ставятся криво.

Добавить комментарий

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