Для системного администратора оболочка (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.

Комментарии (26)


  1. morheus9
    21.10.2025 13:24

    1. maratkoRuEkb
      21.10.2025 13:24

      Ну хоть напишите чем он вам нравится и какие есть фишки.


      1. morheus9
        21.10.2025 13:24

        А легко.

        • нормальное автодополнение - оно есть

        • встроенный ии помощник, которому можно позадавать вопросы и проконсультироваться по дальнейшим командам или даже напряму дать ему выполнить. не надо лезть в браузер или куда-то еще или костылить cli-йками

        • он вполне красивый, но это вкусовщина

        • на расте, тут конечно кому плюс кому минус, но как минимум мультиплатформенный, что, очевидно, плюс

        • работает из коробки, не надо настраивать, как всякие zsh и проч или конфиги качать, чтобы получить тот же функционал

        • касательно коммента ниже про то что он отжирает место на мониторе - извините в каком это месте отжирает? он ровно так же как терминал по полезной площади. и да ТАМ МОЖНО ПРОЛИСТАТЬ ВВЕРХ колесиком если вдруг надо и настроить шрифт, что вам еще надо? Может вам стоит монитор покрупнее купить или научиться вкладками пользоваться в терминале?

          И да, если вы думаете что я рекламирую и т д , то нет, я просто поделился инструментом, который понравился и может быть понравится кому-то еще.

          Но сверхразумы сразу наставили дизов.

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