Zsh (Z shell) — мощная командная оболочка для Unix/Linux, совместимая с POSIX. Расширяет Bash: улучшенное интерактивное автодополнение, разделяемая история между сессиями, расширенные глобы (**/ для рекурсивного поиска), встроенный spell check и более гибкая конфигурация.
Ключевые преимущества перед Bash
- Автодополнение: меню с выбором вместо простого списка. Дополняет не только команды, но и аргументы (
git [Tab]→ список подкоманд). - Разделяемая история: все открытые терминалы видят общую историю команд немедленно.
- Расширенные glob:
**/*.log— рекурсивный поиск,*(m-7)— файлы младше 7 дней. - Spell correction: предлагает исправить опечатки в командах.
- Темы и промпты: Git-ветка, виртуальное окружение, статус последней команды в строке приглашения.
Oh My Zsh
Oh My Zsh — фреймворк конфигурации Zsh с 300+ плагинами и 140+ темами. Устанавливается одной командой:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Популярные плагины: git (20+ алиасов), docker, kubectl, z (быстрая навигация по истории директорий), fzf (fuzzy-поиск в истории Ctrl+R).
Zsh на серверах
На production-серверах используется Bash — POSIX-совместимый и предсказуемый. Скрипты деплоя и автоматизации пишут на Bash для максимальной совместимости. Zsh устанавливают системные администраторы для интерактивной работы через SSH:
apt install zsh # Debian/Ubuntu
chsh -s /bin/zsh # сменить shell для пользователя
История
Zsh создан Паулом Фальстадом (Paul Falstad) в 1990 году в Принстонском университете. Назван в честь логина sh профессора Zhong Shao (zsh). Значительную роль в развитии сыграл Питер Стефенсон (Peter Stephenson). В 2019 году Apple заменила Bash на Zsh как shell по умолчанию в macOS Catalina — из-за несовместимости лицензии GPLv3 Bash 5.x с политикой Apple.
На что обращать внимание
Скрипты с #!/bin/zsh не запустятся на системах без Zsh — шебанг #!/bin/bash надёжнее для серверных скриптов. При работе через sudo используется shell root-пользователя (обычно Bash), а не Zsh. Конфигурация Zsh — в ~/.zshrc, Oh My Zsh хранит плагины в ~/.oh-my-zsh/. Powerlevel10k — самая популярная тема Zsh с мгновенной загрузкой prompt.
Oh My Zsh — экосистема плагинов
Oh My Zsh устанавливается одной командой и добавляет 300+ плагинов и 150+ тем оформления. Плагин git добавляет алиасы: gst вместо git status, gp вместо git push. Плагин docker автодополняет команды Docker с именами контейнеров и образов прямо в терминале.
Тема Powerlevel10k отображает текущую git-ветку, время выполнения команды, статус Kubernetes-контекста и Python virtualenv прямо в строке промпта. Конфигурируется через интерактивный wizard при первом запуске.
Практические возможности
Глобальные алиасы zsh работают в любой позиции команды: alias -g L='| less' позволяет писать cat /var/log/nginx/error.log L. Расширение фигурных скобок: mkdir {assets,images,scripts} создаёт три папки одной командой.
Функция autocd переходит в директорию без cd — достаточно написать имя папки. История команд синхронизируется между терминалами в реальном времени через setopt SHARE_HISTORY. Поиск в истории через Ctrl+R поддерживает fuzzy-matching с плагином fzf.
На что обращать внимание
Zsh медленнее стартует, чем bash, особенно с большим числом плагинов Oh My Zsh. Для ускорения используют Zinit или Zplug — ленивую загрузку плагинов. На серверах без Oh My Zsh zsh конфигурируется вручную через ~/.zshrc. На macOS zsh стал оболочкой по умолчанию с Catalina.
На удалённых серверах zsh часто устанавливают поверх bash как интерактивную оболочку для администраторов, подключающихся по SSH. Системные скрипты при этом продолжают использовать bash для предсказуемости и совместимости.