Типы оболочек в системе 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, однако существует еще множество других, которые также стоит изучить.
Обзор-сравнение командных оболочек (unix shell): BASH, ZSH, FISH
Unix shell — это оболочка (интерпретатор команд), предоставляющая пользовательский интерфейс командной строки для Unix подобных операционных систем. Оболочка одновременно является языком интерактивных команд и языком сценариев (скриптов) и используется пользователем для передачи команд (списка команд) операционной системе.
Название BASH происходит от «Bourne again shell» (еще одна командная оболочка Борна). Появилась в 1987 году, как усовершенствованный вариант командной оболочки Bourne shell (sh, автор Стивен Борн). Поскольку фамилия Bourne (Борн) созвучна со словом born (рожденный), появился каламбур «Born again shell» (рожденная вновь командная оболочка).
BASH, как и все shell, представляет собой командный процессор, работающий в текстовом окне в интерактивном режиме. Поддерживает различные сокращения и переменные, операторы цикла, контроль и подстановку вывода результатов, автодополнение имен файлов и каталогов. Синтаксис BASH и другие особенности языка были заимствованы его автором Брайаном Фоксом из SH.
BASH — одна из первых программ, которую Линус Торвальдс (создатель Linux) портировал на Linux. BASH — самая распространенная оболочка Linux и каждый пользователь, который хоть раз открывал терминал, взаимодействовал с ней.
Ключевые особенности BASH:
- Огромное количество пользователей используют BASH, так как эта оболочка установлена по умолчанию в большинстве систем Linux
- Командный процессор BASH имеет множество встроенных команд
- BASH не имеет встроенного выражения с подстановочными знаками (*,?,[]), которые используются для поиска шаблонов, аналогично регулярному выражению
- Символ # рассматривается как комментарий в сценарии BASH
- Имеет крайне скромные (ограниченные возможности) настройки
- Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.bashrc
Первая версия ZSH была написана Паулем Фалстадом, когда он был студентом Принстонского университета в 1990 году. Название оболочки произошло от учетной записи «zsh» университетского ассистента Пауля по имени Чжун Шао. В настоящее время проект развивается энтузиастами под руководством Питера Стефенсона в рамках свободно распространяемого ПО.
ZSH является расширенным аналогом BASH и имеет с ним обратную совместимость, добавляя ему большое количество улучшений.
Ключевые особенности ZSH:
- Встроенное автозаполнение с расширенным функционалом. Клавиша TAB ⇆ используется для автоматического дополнения (завершения) любой команды, которую вы хотите запустить. Помимо автозаполнения она выводит раскрывающийся список всех возможных файлов и каталогов
- Поддерживает встроенные выражения с подстановочными знаками (*, ?, [])
- Более настраиваемый, чем BASH
- Поддерживает различные плагины, расширяющие функционал и темы для кастомизации внешнего вида.
- Oh My Zsh — наиболее известный фреймворк для применения разнообразных настроек оболочки
- Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.zshrc
FISH — это POSIX несовместимая оболочка UNIX с упором на интерактивность и удобство использования, была создана Акселем Лильенкранцем в 2005 году. POSIX (Portable Operating System Interface) — набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой (системный API), библиотеку языка «C» и набор приложений и их интерфейсов.
В отличие от других оболочек, которым требуется много настроек и дополнительных плагинов, FISH предлагает все удобства пользователю прямо «из коробки». В то же время FISH является самой нестандартной оболочкой из-за того, что она не соответствует POSIX.
Синтаксис в FISH также изменен в сторону упрощения командного языка оболочки, например все управляющие конструкции завершаются ключевым выражением «end». Еще одним нововведением FISH являются универсальные переменные, вводимые с помощью конструкции «set -U переменная значение».
Ключевые особенности FISH:
- FISH предлагает автоматический «поиск во время ввода», основанный на истории команд и каталоге, в котором вы находитесь на момент ввода
- Встроенная подсветка синтаксиса — это функция, которую мы все хотели бы иметь в интерфейсе командной строки. Это делает работу проще и удобней, экономит много времени. И все это предлагается пользователю прямо «из коробки», интерфейс выглядит красиво и интуитивно понятно
- FISH умеет анализировать справочные страницы MAN и преобразовывать их в табличный формат вывода с удобным перемещением между данными
- Настройки FISH очень просты и понятны. Для изменения внешнего вида достаточно набрать в окне терминала команду: «fish_config», — откроется веб-сервис настроек, с возможностью выбора уже готовой предустановки, либо любой пользовательской конфигурации
- Дополнительно для расширения возможностей и настроек кастомизации FISH предлагается фреймворк Oh My Fish, аналогичный таковому в ZSH
- FISH предлагает очень простой и интуитивно понятный интерфейс командной строки для любого пользователя любого уровня. Для вызова справки по командному процессору FISH нужно просто набрать «help» в окне терминала, — откроется веб-сервис с удобно организованной и хорошо наполненной интерактивной базой знаний, в которой точно «найдется все»
- Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.config/fish/config.fish
Демонстрация особенностей
Выводы
- BASH, ZSH и FISH имеют свои достоинства и недостатки, а также некоторые сходства между собой
- Если вы консерватор и приверженец всего классического, вы просто можете оставить себе BASH
- Если вы хотите что-то более гибкое и настраиваемое, вы можете попробовать ZSH, дополнив его плагинами или даже установив Oh My Zsh
- Если вам нужен интерактивный терминал без особых настроек, вы можете смело использовать FISH. Даже если он и не лучший во всем, FISH имеет функциональные возможности, соответствующие основной философии UNIX: «Do one thing, and do it well” (делай что-то одно и делай это хорошо)
Вместо послесловия
Если спросить мое личное мнение, то я предложу FISH, несмотря на то, что сам использую ZSH 🙂