Типы оболочек в системе Linux
Оболочка (shell) — важная часть любой пользовательской сессии Linux. Для выполнения задач в Linux доступны несколько типов командных оболочек, каждая из которых имеет свои уникальные свойства. Поэтому в определенных ситуациях одна оболочка может оказаться эффективнее другой.
В этом туториале мы расскажем, что такое командная оболочка Linux и почему она важна, а также разберем их типы, функции и свойства.
Что такое оболочка и зачем она нужна?
Каждый раз, когда пользователь входит в систему или открывает окно консоли, ядро запускает новый экземпляр командной оболочки.
Ядро — это сердце любой операционной системы. Оно отвечает за управление и выполнение процессов, а также за правильное использование системных ресурсов.
Командная оболочка — это программа, которая служит интерфейсом между пользователем и ядром. Она позволяет давать команды ядру и получать от него ответы. Через нее можно запускать программы и утилиты на ядре. Таким образом, по сути оболочка — это программа, с помощью которой можно запускать другие программы в системе.
Возможность взаимодействия с ядром делает командные оболочки мощным инструментом. Без этого пользователь не сможет получить доступ к утилитам операционной системы.
Давайте разберемся в основных типах оболочек, которые доступны для среды Linux.
Типы оболочек
В Linux доступны различные типы командных оболочек, каждая из них имеет свои свойства, которые делают их более эффективными в определенных ситуациях. Итак, давайте обсудим их подробнее.
1: Bourne Shell (sh)
Разработанная в AT&T Bell Labs Стивом Борном, Bourne Shell Считается первой оболочкой UNIX. Она обозначается как sh.
Данная оболочка завоевала популярность благодаря своей компактности и высокой скорости работы. Именно это и сделало ее оболочкой по умолчанию для ОС Solaris. Также она используется как командная оболочка по умолчанию для всех административных скриптов системы Solaris.
Но у оболочки Bourne есть ряд существенных недостатков:
- Нет встроенных функций для обработки логических и арифметических операций.
- Не может запоминать ранее выполненные команды, в отличие от большинства других командных оболочек.
- Не хватает комплексных функций для удобного интерактивного использования.
По умолчанию полный путь к исполняемому файлу Bourne Shell — /bin/sh и /sbin/sh. Для пользователей root используется символ # в качестве приглашения командной строки, а для не-root пользователей — символ $.
2: GNU Bourne-Again (bash)
GNU Bourne-Again (известная также как Bash) была разработана для совместимости с оболочкой Bourne. Она включает в себя полезные функции из других шеллов Linux, таких как Korn и C.
В отличие от командной оболочки Bourne, она позволяет автоматически вызывать ранее выполненные команды и редактировать их клавишами со стрелками.
Полный путь к оболочке GNU Bourne-Again — /bin/bash. По умолчанию она использует приглашение bash-VersionNumber# для пользователя root и bash-VersionNumber$ для пользователей без прав root.
Читайте также:
3: C Shell (csh)
Оболочка C была разработана Биллом Джоем в Калифорнийском университете. Обозначается как csh. Она была создана для реализации полезных функций и синтаксиса языка программирования C.
Кроме того, у нее есть история команд, которой не было в других типах командных оболочек Linux (например, в Bourne). Еще одна отличительная особенность оболочки C — псевдонимы (aliases).
Полный путь к C shell: /bin/csh. По умолчанию она использует приглашение hostname# для пользователя с правами root и hostname% для пользователей без этих привилегий.
4: Korn Shell (ksh)
Была разработана в AT&T Bell Labs Дэвидом Корном как улучшение оболочки Bourne.
Обозначается как ksh. Командная оболочка Korn по сути является расширением Bourne. Помимо всех функций из Bourne, она предоставляет пользователям новые возможности, среди которых встроенная поддержка арифметических операций и интерактивные функции, как в C shell.
Korn запускает скрипты оболочки Bourne, выполняя операции со строками, массивами и функциями подобно языку программирования C. Она также поддерживает скрипты, написанные для оболочки C. Кроме того, Korn работает быстрее большинства других типов командных оболочек Linux, включая C shell.
Полный путь к оболочке Korn: /bin/ksh. По умолчанию, для пользователя root используется приглашение #, non-root — $.
5: Z Shell (zsh)
Командная оболочка Z, или zsh — это расширение шелла sh с улучшенной кастомизацией. Если вы ищете современную оболочку со множеством функций, Z Shell — это то, что вам нужно.
- Создание имен файлов на основе заданных условий
- Поддержка плагинов и тем
- Индекс встроенных функций
- Автовыполнение команд
Заключение
Давайте подведем итоги по типам оболочек, которые мы рассмотрели в этом мануале:
- Bourne shell (sh): полный путь /bin/sh и /sbin/sh, приглашение командной строки для root пользователя — #, для пользователей без прав root — $
- GNU Bourne-Again (bash): полный путь /bin/bash, приглашение командной строки для пользователя root — bash-VersionNumber#, без прав root — bash-VersionNumber$
- C shell (csh): полный путь /bin/csh, для пользователя с правами root приглашение командной строки — #, без этих прав —%
- Korn shell (ksh): полный путь /bin/ksh, приглашение командной строки для root пользователя #, non-root — $
- Z shell (zsh): полный путь /bin/zsh, приглашение командной строки для пользователя root — # , для пользователя без root прав — %
Командные оболочки являются одним из самых мощных инструментов, которые доступны пользователю Linux. Без них использовать функционал ядра системы практически невозможно.
Здесь мы рассмотрели наиболее распространенные типы оболочек в Linux, однако существует еще множество других, которые также стоит изучить.
Типы командных оболочек
Как упоминалось выше, система Linux является многозадачной и многопользовательской операционной системой. Многозадачность является весьма полезной, и когда вы это для себя поймёте, вы будете это постоянно использовать. Довольно скоро вы научитесь запускать фоновые программы, переключаться между сеансами, а также стыковать программы для того, чтобы добиваться выполнения довольно сложных действий одной командой.
Многие возможности из тех, которые будут описаны в этом разделе, предоставляются самой командной оболочкой. Важно не путать систему Linux (операционную систему) с одной из командных оболочек. Командная оболочка является всего лишь интерфейсом к операционной системе и предоставляет дополнительные возможности к тем, что предоставляет сама система Linux.
Командная оболочка является не только интерпретатором команд, которые вводятся в интерактивном режиме, но также и мощным языком программирования. С помощью командных оболочек можно выполнять скрипты командных оболочек (shell scripts). В скриптах несколько команд оболочки объединяются в один пакет (batch). Скрипты командных оболочек системы Linux имеют аналогию с командными файлами (batch files) системы MS-DOS. Скрипты являются очень мощным средством, с помощью которого можно автоматизировать и сделать более удобным использование системы Linux. Скриптам командной оболочки далее будет посвящён специальный раздел.
В системах Linux имеется несколько типов командных оболочек. Два основных типа называются Bourne shell и C shell. Оболочка Bourne shell использует такой же синтаксис команд, какой использовался в самых первых системах UNIX, таких как System III. Исполняемым файлом оболочки Bourne shell в большинстве версий систем Linux является /bin/sh (где sh является сокращением от « shell »═ — оболочка). Оболочка C shell использует иной синтаксис, чем-то напоминающий язык программирования C. В большинстве систем Linux исполняемым файлом этой оболочки будет /bin/csh.
В системе Linux имеются несколько вариантов указанных командных оболочек. Наиболее употребительным является вариант Bourne Again Shell или « bash » (файл /bin/ bash ), а также tcsh (файл /bin/tcsh). Оболочка bash является модификацией оболочки Bourne shell, в которую включено много развитых функций из оболочки C shell. Поскольку синтаксис оболочки bash содержит в качестве подмножества синтаксис оболочки Bourne shell, скрипты, написанные для стандартной оболочки Bourne shell, будут работать и с её модификацией bash . Если вы предпочитаете использовать синтаксис, основанный на языке программирования C, то можно воспользоваться оболочкой tcsh, которая является расширенной версией исходной оболочки C shell.
Выбор типа оболочки является вопросом вкуса. Некоторая разница заключается в том, что синтаксис оболочек, основанных на языке C, более структурирован. Для обычных команд, таких как cp или ls, тип используемой командной оболочки не имеет значения═ — синтаксис будет одинаковым. Только когда вы начнёте самостоятельно писать скрипты или использовать некоторые развитые возможности командных оболочек, разница между ними начнёт играть роль.
В дальнейшем, при обсуждении свойств различных командных оболочек, мы отметим разницу между упомянутыми оболочками. Однако, с учётом тех целей, которые ставит данная книга, большинство этих различий минимально. Если вы действительно интересуетесь различиями между командными оболочками, вам следует почитать экранную документацию к командам bash и tcsh .