Поиск по сайту:

В чем разница между Bash, Zsh и другими оболочками Linux?


Большинство дистрибутивов Linux включают оболочку bash по умолчанию, но вы также можете переключиться на другую оболочку. Zsh — особенно популярная альтернатива, и есть и другие оболочки, такие как ash, dash, fish и tcsh. Но в чем разница и почему их так много?

Что делают оболочки?

Когда вы входите в систему из командной строки или запускаете окно терминала в Linux, система запускает программу-оболочку. Оболочки предлагают стандартный способ расширения среды командной строки. Вы можете заменить оболочку по умолчанию на другую, если хотите.

Первой средой оболочки была Thompson Shell, разработанная в Bell Labs и выпущенная в 1971 году. С тех пор среды оболочки основывались на этой концепции, добавляя множество новых функций, функций и улучшений скорости.

Например, Bash предлагает завершение команд и имен файлов, расширенные функции сценариев, историю команд, настраиваемые цвета, псевдонимы команд и множество других функций, которые не были доступны в 1971 году, когда была выпущена первая оболочка.

Оболочка также используется в фоновом режиме различными системными службами. Дистрибутивы Linux включают множество функций, написанных в виде сценариев оболочки. Эти сценарии представляют собой команды и другие расширенные функции сценариев оболочки, выполняемые в среде оболочки.

Оболочки, ведущие к Bash: sh, csh, tsh и ksh

Наиболее известным прародителем современных оболочек является оболочка Борна, также известная как «sh», названная в честь ее создателя Стивена Борна, работавшего в Bell Labs компании AT&T. Выпущенный в 1979 году, он стал интерпретатором команд по умолчанию в Unix из-за поддержки подстановки команд, конвейерной обработки, переменных, проверки условий и циклов, а также других функций. Он не предлагал пользователям особой настройки и не поддерживал такие современные тонкости, как псевдонимы, завершение команд и функции оболочки (хотя последнее в конечном итоге было добавлено).

Оболочка C, или «csh», была разработана в конце 1970-х Биллом Джоем из Калифорнийского университета в Беркли. Он добавил множество интерактивных элементов, с помощью которых пользователи могли управлять своими системами, таких как псевдонимы (ярлыки для длинных команд), возможности управления заданиями, история команд и многое другое. Он был смоделирован на основе языка программирования C, на котором была написана сама операционная система Unix. Это также означало, что пользователи оболочки Bourne должны были изучить C, чтобы они могли вводить на нем команды. Кроме того, в csh было довольно много ошибок, которые пользователям и создателям приходилось исправлять в течение длительного периода времени. В конце концов люди стали использовать оболочку Bourne для сценариев, потому что она лучше обрабатывала неинтерактивные команды, но придерживались оболочки C для обычного использования.

Со временем многие люди исправили ошибки и добавили функции в оболочку C, кульминацией чего стала улучшенная версия csh, известная как «tcsh». Но csh по-прежнему использовался по умолчанию на компьютерах на базе Unix, и в него были добавлены некоторые нестандартные функции. Дэвид Корн из Bell Labs работал над KornShell, или «ksh», который пытался улучшить ситуацию за счет обратной совместимости с языком оболочки Bourne, но с добавлением многих функций из оболочки csh. Он был выпущен в 1983 году, но по частной лицензии. Это не было свободным программным обеспечением до 2000-х годов, когда оно было выпущено под различными лицензиями с открытым исходным кодом.

Рождение Баша

Интерфейс переносимой операционной системы для Unix, или POSIX, был еще одним ответом на лихорадочные проприетарные реализации csh. Он успешно создал стандарт для интерпретации команд (среди прочего) и в конечном итоге отразил многие функции KornShell. В то же время проект GNU пытался создать бесплатную Unix-совместимую операционную систему. Проект GNU разработал оболочку свободного программного обеспечения, которая станет частью ее бесплатной операционной системы, и назвал ее «Bourne Again Shell» или «bash».

Bash был улучшен за десятилетия, прошедшие с момента его первого выпуска в 1989 году, но сегодня он по-прежнему является оболочкой по умолчанию в большинстве дистрибутивов Linux. Это также оболочка по умолчанию в macOS от Apple и доступна для установки в Windows 10 от Microsoft.

Новые снаряды: пепел, тире, зш и рыба

Хотя с тех пор сообщество Linux остановилось на Bash, разработчики не прекратили создавать новые оболочки, когда Bash был впервые выпущен 28 лет назад.

Кеннет Альмквист создал клон оболочки Борна, известный как оболочка Альмкиша, A Shell, «ясень» или иногда просто «ш». он также был совместим с POSIX и стал оболочкой по умолчанию в BSD, другой ветви Unix. Оболочка ash легче, чем bash, что делает ее популярной во встраиваемых системах Linux. Если у вас есть рутированный телефон Android с установленным BusyBox или любое другое устройство с пакетом программного обеспечения BusyBox, он использует код из пепла.

Debian разработал среду оболочки на основе ash и назвал ее «dash». Он разработан, чтобы быть совместимым с POSIX и легким, поэтому он быстрее, чем Bash, но не будет иметь всех его функций. Ubuntu использует оболочку dash в качестве оболочки по умолчанию для неинтерактивных задач, ускоряя сценарии оболочки и другие задачи, работающие в фоновом режиме. Однако Ubuntu по-прежнему использует bash для интерактивных оболочек, поэтому пользователи по-прежнему имеют полнофункциональную интерактивную среду.

Одной из самых популярных новых оболочек является оболочка Z, или «zsh». Созданная Полом Фалстадом в 1990 году, zsh представляет собой оболочку в стиле Борна, которая содержит функции, которые вы найдете в bash, а также многое другое. Например, в zsh есть проверка орфографии, возможность отслеживать входы и выходы из системы, некоторые встроенные функции программирования, такие как байт-код, поддержка экспоненциальной записи в синтаксисе, возможность арифметики с плавающей запятой и другие функции.

Другая более новая оболочка — это дружественная интерактивная оболочка, или «рыба», выпущенная в 2005 году. Она имеет уникальный синтаксис командной строки, который немного упрощает изучение, но не является производным ни от оболочки Bourne, ни от оболочки C. Это интересная идея, но то, что вы узнаете, используя fish, не обязательно поможет вам использовать bash и другие оболочки, производные от Bourne.

Что выбрать? (и почему Zsh популярен)

Вам не нужно выбирать оболочку. Ваша операционная система выбирает за вас оболочку по умолчанию, и этот выбор почти всегда bash. Сядьте перед дистрибутивом Linux или даже Mac, и вы почти всегда будете иметь среду оболочки bash. Bash имеет довольно много расширенных функций, но вы, вероятно, не будете использовать их, если не будете программировать сценарии оболочки.

Во встроенных системах Linux или системах BSD вы получите оболочку ash. Но ash — это оболочка на основе Bourne, которая в значительной степени совместима с bash. Любые знания, которые у вас есть при использовании bash, будут перенесены в оболочку ash или dash, хотя некоторые расширенные функции сценариев недоступны в этой облегченной оболочке.

Почти каждая оболочка, с которой вы столкнетесь, основана на Bourne и работает одинаково, включая zsh.

Вот почему zsh популярен. Эта более новая оболочка совместима с bash, но включает в себя больше функций. Оболочка zsh предлагает встроенную коррекцию орфографии, улучшенное завершение командной строки, загружаемые модули, которые действуют как подключаемые модули для вашей оболочки, глобальные псевдонимы, которые позволяют вам использовать псевдонимы для имен файлов или чего-либо еще в командной строке, а не только для команд, и больше тематической поддержки. Это похоже на bash, но с множеством дополнений, дополнительных функций и настраиваемых параметров, которые могут вам понравиться, если вы проводите много времени в командной строке.

Если вы знакомы с bash, вы можете переключиться на zsh, не изучая другой синтаксис — вы просто получите дополнительные возможности. если вы знакомы с zsh, вы можете переключиться на bash, не изучая другой синтаксис — у вас просто не будет доступа к этим функциям.

«Oh My ZSH» — это инструмент, который упрощает включение подключаемых модулей zsh и переключение между готовыми темами, быстро настраивая оболочку zsh, не тратя часы на настройку.

Есть и другие оболочки. Например, оболочка tcsh все еще существует и все еще является опцией. FreeBSD использует tsch в качестве корневой оболочки по умолчанию и ash в качестве интерактивной оболочки по умолчанию. Если вы регулярно пользуетесь программированием на языке C, возможно, вам больше подойдет tsch. Однако он далеко не так широко используется, как bash или zsh.

Как переключаться между оболочками

Легко переключиться на новую оболочку, чтобы попробовать ее. Просто установите оболочку из диспетчера пакетов вашего дистрибутива Linux и введите команду для запуска оболочки.

Например, допустим, вы хотите попробовать zsh в Ubuntu. Вы должны запустить следующие команды для установки, а затем запустить его:

sudo apt install zsh

zsh

Тогда вы будете сидеть за оболочкой zsh. Введите «exit» в оболочке, чтобы выйти из нее и вернуться в текущую оболочку.

Это временно. Всякий раз, когда вы открываете новое окно терминала или входите в свою систему в командной строке, вы увидите свою оболочку по умолчанию. Чтобы изменить оболочку, которую вы видите при входе в систему, известную как оболочка входа в систему, вы обычно можете использовать команду chsh или «Изменить оболочку».

Чтобы использовать эту команду, вам сначала нужно найти полный путь к вашей оболочке с помощью команды which. Например, предположим, что мы хотели перейти на оболочку zsh. Мы запустим следующую команду:

which zsh

В Ubuntu это говорит нам о том, что двоичный файл zsh хранится в /usr/bin/zsh.

Выполните следующую команду, введите свой пароль, и вам будет предложено выбрать новую оболочку входа:

chsh

В соответствии с приведенной выше командой мы должны ввести /usr/bin/zsh. Тогда оболочка zsh будет использоваться по умолчанию, пока мы не запустим команду chsh и не изменим ее обратно.