
Для системного администратора оболочка (shell) — это не утилита, а среда, в которой проходит большая часть рабочего дня. Часто работа идёт на удалённых серверах, например на виртуальных машинах UltraVDS, где удобная оболочка экономит часы настройки и отладки. Здесь настраиваются сервисы, правятся конфиги, запускаются скрипты и отлавливаются ошибки, и от того, как она себя ведёт, напрямую зависит скорость работы.
Пока задачи простые, хватает и того, что стоит по умолчанию. Но со временем начинаешь замечать мелочи: неудобное автодополнение, непредсказуемая история, странное поведение алиасов. Один раз промахнулся с rm, другой раз команда не сохранилась — и вот ты уже ищешь альтернативу.
Сегодня чаще всего выбор стоит между Bash, Zsh и Fish. Все они решают одну и ту же задачу — запуск команд — но делают это с разной философией. Разберёмся, как они устроены, где их сильные и слабые стороны, и какую оболочку стоит выбрать под конкретные задачи.
1. Bash (оболочка Bourne Again)

Bash — классическая Unix-оболочка, созданная в 1989 году Брайаном Фоксом в рамках проекта GNU. Это основная shell-среда в подавляющем большинстве Linux-дистрибутивов: Debian, Ubuntu, RHEL, CentOS, Arch и другие. До версии Catalina она была оболочкой по умолчанию и в macOS, а в контейнерах и серверных окружениях остаётся стандартом до сих пор.
Главная причина её популярности — строгая совместимость со стандартом POSIX. Скрипты, написанные с учётом этого стандарта, будут исполняться без изменений в любых системах, поддерживающих POSIX — даже в самых минималистичных rescue-средах.
При этом Bash поддерживает и расширения, выходящие за пределы POSIX. Например: массивы, арифметика (( )), конструкции [[ ... ]], а также расширенные параметры команд. Они дают дополнительную гибкость в тех случаях, когда переносимость уже не критична, но удобство скриптинга важно.
Функциональность можно расширить, но из «коробки» Bash довольно скромен. Есть проекты вроде bash-it, но официально плагинов немного. Оболочка настраивается через ~/.bashrc и пере��енную PS1 (например, PS1="\u@\h:\w\$ "), и по умолчанию имеет простое оформление с минимумом удобств.
Конфигурация распределяется по файлам .bashrc, .bash_profile и .profile — в зависимости от типа сессии. Здесь задаются алиасы, переменные окружения, функции, логика отображения приглашения. При желании функциональность можно расширить:
подключить bash-completion для более гибкого автодополнения;
интегрировать fzf для интерактивного поиска;
использовать сторонние тулчейны вроде Starship.
Типичные настройки — это ~/.bashrc, где создают алиасы (alias ll='ls -la'), настраивают $PATH, PROMPT_COMMAND и прочее. Bash-completion помогает с автодополнением параметров, но изначально оно базовое. В языке нет особых «фишек» — это простая, проверенная оболочка. Зато многие скрипты, написанные на Bash, работают сразу без переделки.
По производительности Bash ближе к Fish — тоже прост в запуске, но скорость зависит от конфигурации. Большое количество source-подключений в ~/.bashrc может замедлять старт. Оболочка поддерживает ряд собственных расширений: массивы, арифметику (( )), ключевые слова [[ ... ]], дополнительные параметры команд.
По части UX — скромно, но стабильно. По Tab дополняются файлы и команды (при наличии bash-completion — параметры). Поиск по истории работает через Ctrl+R или стрелки. История между сессиями по умолчанию не разделяется — в отличие от Zsh и Fish, где это настроено изначально.
Если вы используете готовые shell-скрипты или пишете под разные системы, Bash остаётся наиболее универсальным решением. Совместимость — его главное преимущество. Многие скрипты разворачиваются на виртуальных серверах, где стабильность и предсказуемость оболочки критичны для непрерывной работы сервисов. А огромное количество документации делает Bash одним из самых хорошо описанных shell’ов.
Итак, среди преимуществ Bash:
поддержка POSIX без дополнительных усилий;
широкая распространённость — уже установлен практически везде;
огромное количество гайдов, статей и документации;
стабильность и минимальные накладные расходы.
К недостаткам относим ограниченные возможности и ручную настройку из-за того, что в Bash отсутствует множество предустановленных функций для повышения удобства использования, поэтому пользователям обычно приходится вручную настраивать файл .bashrc или устанавливать сторонние инструменты.
2. Zsh (оболочка Z)
Zsh разработана в 1990 году Полом Фалстадом, когда тот учился в Принстоне. Она строилась как расширение Bourne-подобного shell, но вобрала в себя возможности KornShell и C Shell, а со временем превратилась в мощную и гибкую оболочку, которая заметно отличается по удобству от классических вариантов. С 2019 года Zsh используется по умолчанию в macOS (начиная с Catalina).
Полной POSIX-совместимости у Zsh нет, хотя большинство Bash-скриптов выполняются без изменений. При необходимости Zsh может запускаться в режиме sh, а синтаксис во многом пересекается с Bash.
Оболочка вводит собственные расширения и поведение, которые могут влиять на совместимость в нетривиальных сценариях.
Zsh оснащена современным автодополнением, которое по Tab предлагает не только имена файлов, но и параметры команд, опции и даже значения. Интеграция с плагинами вроде zsh-autosuggestions и zsh-syntax-highlighting позволяет получать интерактивные предложения и подсветку прямо в процессе набора. Поддерживается и автоматическая проверка опечаток: если вы ввели команду с ошибкой, Zsh может предложить корректный вариант.
Экосистема вокруг оболочки развита: фреймворки вроде Oh My Zsh, Prezto, Zinit позволяют гибко управлять конфигурацией, темами, плагинами и функциями. Часто используется тема agnoster и плагины git, zsh-autosuggestions, zsh-syntax-highlighting, которые включаются напрямую в ~/.zshrc.
Основной конфигурационный файл — ~/.zshrc. Здесь задаются все настройки: переменные окружения, алиасы, подключение тем, плагинов, расширенных опций. Например, setopt share_history позволяет делить историю между сессиями, а setopt extendedglob — использовать продвинутые шаблоны сопоставления. Кроме того, поддерживаются глобальные алиасы (alias -g G='| grep') и поиск файлов по паттерну **/*.log — без внешних утилит.
История команд в Zsh по умолчанию разделяется между всеми сессиями — то, что вы выполнили в одном терминале, уже доступно в другом. Поиск по истории также работает через Ctrl+R, но его можно расширить при помощи fzf.
Функционально Zsh значительно превосходит Bash, особенно в интерактивном использовании, но оболочка требует настройки. Без фреймворков она выглядит довольно просто, а большая часть удобств появляется только после включения плагинов. Поэтому новичку может показаться, что Zsh не работает из «коробки» — хотя на самом деле просто нужно выбрать подходящий набор расширений.
Документация по Zsh обширна, но чуть менее стандартизирована, чем у Bash. Тем не менее сообщество активно — и на GitHub, и на форумах. Большинство проблем уже разобрано, а готовых конфигураций и примеров более чем достаточно.
К преимуществам Zsh относим:
гибкое автодополнение с возможностью расширения плагинами;
общая история между сессиями по умолчанию;
мощный механизм шаблонов (glob);
поддержка опечаток и контекстных подсказок;
развитая экосистема фреймворков и тем.
Среди недостатков — необходимость начальной настройки и отсутствие полной POSIX-совместимости. Некоторые bash-скрипты могут вести себя иначе, а богатство настроек поначалу может сбивать с толку.
Как установить Zsh
Данная оболочка в Debian устанавливается с использованием пакетного менеджера apt:
sudo apt update
sudo apt install zsh
После установки нужно проверить версию, чтобы убедиться, что оболочка проинсталлирована успешно:
zsh –version
Ожидаемый вывод должен выглядеть примерно так:

Чтобы при входе в систему вместо Bash запускалась Zsh, запускаем команду:
chsh -s $(which zsh)
Новая оболочка применяется при следующем SSH-подключении. В открывшемся меню нажимаем q для выхода без сохранения, при следующем подключении оно появится снова. 0 — будет создан пустой файл ~/.zshrc, содержащий один комментарий. При этом меню больше не появится, а оболочка будет работать без настроек. Выбор 1 позволит перейти в основное меню, где можно будет включить дополнительные опции. Для создания файла ~/.zshrc с минимальным шаблонным набором настроек нажимаем 2.

Можно дополнить оболочку фреймворком, например, Oh My Zsh. Его нужно устанавливать отдельно, команда выглядит следующим образом:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)
Такая установка требует наличия в системе установленных пакетов git и curl. Проверить их присутствие и проинсталлировать, если данные утилиты отсутствуют, можно командой:
sudo apt install git curl
В результате создаётся файл ~/.zshrc с дефолтной темой — robbyrussell и при следующем запуске терминала перед нами — изменённый и более функциональный shell.

Чтобы выбрать другую тему, например, agnoster, открываем ~/.zshrc и строку ZSH_THEME="robbyrussell" заменяем на ZSH_THEME="agnoster". Закрываем файл с сохранением внесённых изменений и применяем изменения:
source ~/.zshrc
Если вдруг Zsh надоела и надо вернуть Bash, то запускаем команду:
chsh -s $(which bash)
3. Fish (Friendly Interactive Shell)

Fish появилась в 2005 году по инициативе Акселя Лильенкранца. В отличие от Bash и Zsh, она изначально создавалась как оболочка, ориентированная на удобство, но не совместимая с POSIX. Здесь другой синтаксис: циклы for заканчиваются end, переменные задаются через set, нет конструкции for ...; do ...; done, а переменные из аргументов передаются через $argv, а не привычный $1, $2 и так далее.
Скрипты, написанные для Bash или Zsh, как правило, не будут исполняться без изменений — их нужно адаптировать под Fish.
Оболочка включает автодополнение, подсветку синтаксиса, контекстные подсказки, инкрементный поиск по истории, помощь по командам через help, встроенный веб-интерфейс настройки и множество мелочей, которые в других shell реализуются только через плагины. Все эти функции работают сразу после установки, без правки конфигов.

Настройка Fish — одна из самых простых среди всех оболочек. Вместо редактирования конфигов вручную можно запустить fish_config, и откроется полноценный веб-интерфейс с выбором тем, цветовых схем, функций и предустановленных конфигураций. Основной файл настроек — ~/.config/fish/config.fish. Здесь определяются переменные, алиасы (в виде сокращений или функций), логика автозапуска и поведение оболочки.
Одна из уникальных возможностей оболочки — универсальные переменные (set -U), которые доступны сразу во всех будущих сессиях. Задали set -U EDITOR vim — и оболочка запомнила это навсегда, без перезагрузок. Чтобы удалить переменную, достаточно set --erase.
Fish работает быстро, а при вводе команды появляется подсказка на основе истории, текущего каталога и ранее использованных аргументов.
В плане расширяемости Fish ещё моложе своих конкурентов. Есть фреймворки Oh My Fish и Fisher, но число тем и плагинов пока меньше. Зато многое из того, что в других оболочках требует сторонних решений, здесь уже встроено и просто работает.
По документации команда help открывает подробный мануал в браузере, а для базовой работы часто даже не нужен Stack Overflow.
Итак, среди преимуществ Fish:
подсветка синтаксиса в реальном времени;
простая настройка с поддержкой универсальных переменных;
быстрая запуска, даже с большим количеством функций;
отлично подходит для интерактивной работы;
понятный синтаксис и человекочитаемые конфиги.
Но, как и в других оболочках, тут есть недостатки:
в отличие от Bash и Zsh, Fish не соответствует стандарту POSIX, что означает, что скрипты, написанные для Bash или других POSIX-совместимых оболочек, могут некорректно работать в Fish без изменений;
поскольку Fish — более новая оболочка, у неё меньше сообщество и ресурсов, чем у Bash и Zsh.
Как установить Fish
Fish, как и Zsh, можно установить в Debian при помощи apt:
sudo apt update
sudo apt install fish
Даже команда для проверки версии пакета выглядит аналогично:
fish --version
Вывод её выглядит примерно следующим образом:

Оболочку Fish можно опробовать перед тем, как начать использовать на постоянной основе:
fish

Чтобы вернуться обратно в Bash, вводим команду:
exit
Или используйте Ctrl D.
Следующая команда делает Fish оболочкой по умолчанию:
chsh -s $(which fish)
Оболочка применяется после переподключения SSH-сессии и только для текущего пользователя.
Fish обладает списком плагинов, которые можно устанавливать дополнительно ориентируясь на различные задачи — навигация, программирование или ещё что-нибудь. Для добавления плагинов используется плагин-менеджер fisher, который сначала необходимо установить:
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
Следующая команда устанавливает, например, плагин jethrokuan/z, который при помощи утилиты z упрощает навигацию, позволяя быстро переходить к каталогам по частичному совпадению, опираясь на историю команд:
fisher install jethrokuan/z
Для удаления плагина запускаем команду:
fisher remove jethrokuan/z
Есть и другие плагины, конечно. Подробнее о них — на GitHub-страничке fisher.
Перейти с Fish обратно на Bash помогает команда:
chsh -s $(which bash)
Работа в разных средах
На Linux все три оболочки доступны и легко устанавливаются через менеджеры пакетов (Bash уже предустановлена почти везде).
На macOS по историческим причинам долгое время была устаревшая версия Bash (GPLv2) по умолчанию, и только с macOS Catalina Apple официально перешла на Zsh как стандартную оболочку. Тем не менее Bash (свежее версии 3.2) и Fish можно установить через Homebrew/MacPorts.
В WSL на Windows стандартной является Bash, но и Zsh, и Fish устанавливаются через пакетные системы (Zsh популярна среди продвинутых пользователей Windows/*nix, Fish тоже работает в WSL).
В целом Bash везде по умолчанию, Zsh появился в macOS, есть форки для Windows, а Fish используется чуть реже, но её кроссплатформенность подтверждена на Windows-дистрибутивах WSL/Cygwin, macOS и большинстве Linux/BSD.
Интеграция с инструментами
В современной практике терминалы часто дополняют внешними тулчейнами. Например, Oh My Zsh — популярный фреймворк для Zsh, содержащий сотни плагинов и тем. Для Fish есть аналог Oh My Fish (и менеджер Fisher).
Для всех оболочек доступен кроссплатформенный Starship — быстрый кастомизируемый скрипт, который одинаково работает в Bash, Zsh и Fish.
Многие также используют fzf для интерактивного поиска в истории, autoenv / direnv для переменных окружения и т. д., но в целом Zsh имеет наибольшую интеграцию «из коробки», а Fish же нередко довольствуется собственными встроенными фичами.
Что выбрать?
Каждая из трёх оболочек имеет свои плюсы и минусы: Bash — проверенный стандарт для скриптов и серверов (POSIX, минимальное потребление ресурсов), Zsh — «мощная и гибкая» оболочка с обширной экосистемой плагинов и тем, Fish — современная оболочка с удобствами «из коробки» (автоподсказки, подсветка, простая конфигурация).
Критерий | Bash | Zsh | Fish |
ОС (поддержка) | Linux, macOS (GPLv2- баш 3.2), WSL | Linux, macOS (Catalina+ по умолчанию), Windows (UnxUtils) | Linux, macOS, BSD, Windows (WSL/ Cygwin) |
Плагины и темы | Сторонние проекты (bash-it и др.) | Богатая экосистема (Oh My Zsh, Prezto, zplug и др.) | Oh My Fish, Fisher и др., но сообщество меньше |
Настраиваемость | Минимальна, но возможна через ~/.bashrc (alias, PS1 и др.) | Гибкая (~/.zshrc, множество опций и тем) | Простая через веб-интерфейс настроек (команда fish_config) |
Автодополнение | Базовое (Tab дополняет файлы/ команды) | Продвинутое (Tab с выпадающими списками) | По истории и контексту (вводимые подсказки) |
Подсветка синтаксиса | В «коробке» нет, но можно добавить вручную) | Есть (через фреймворки/плагины или встроенные темы) | Встроена по умолчанию |
Совместимость POSIX | Полная (с расширениями) | Частичная (большинство скриптов запускаются, но есть отличия) | Не совместима |
Производительность (запуск) | Хорошая с минимальными накладными расходами | Медленна, особенно с множеством плагинов | Очень быстрая (почти как Bash) |
Документация, help | Обширная (много книг и статей) | Много ресурсов (документация, блоги, форум) | Команда help открывает интерактивную справку в браузере |
Удобство для новичков | Требует ручного конфигурирования | Богатые возможности, но кривая обучения | Интуитивные подсказки, подсветка и веб-интерфейс |
Выбирать стоит исходя из задач:
если нужно писать переносимые скрипты, запускать их на разных nix-системах (особенно в продакшене), выбор очевиден: Bash (или Zsh в sh-режиме);
если вы проводите много времени в терминале, любите настраивать рабочую среду и использовать фреймворки, отличным выбором станет Zsh;
если хочется сразу получить красивые подсказки, автодополнения и современный интерфейс без долгой настройки, Fish порадует «приятностью» использования.
Особо рекомендуем Fish тем, кто хочет «интерактивный терминал без мучительной настройки», но учитывайте его ограничения с POSIX. На продакшен-серверах часто админы оставляют Bash (или легкую конфигурацию Zsh).
Итак, консерваторам и поклонникам классики можно оставить Bash, особенно на продакшен-серверах или виртуальных машинах UltraVDS, где критична стабильность и совместимость. Если нужна гибкая и настраиваемая оболочка — Zsh (желательно с Oh My Zsh), а тем, кому нужен интерактивный терминал без особых настроек, смело советуем Fish.

