Zsh
Zsh (Z shell) — это командная оболочка (shell) для Unix-подобных операционных систем, выполняющая функции интерпретатора команд и языка сценариев. Относится к классу так называемых оболочек Борна (Bourne shell), так как базируется на синтаксисе /bin/sh (Bourne shell) и является его расширенной версией. Zsh известна высокой степенью настраиваемости, мощной системой автодополнения ввода, поддержкой тем оформления (промптов) и расширенными возможностями для работы с историей команд.
История
Происхождение
Zsh была создана в 1990 году Полом Фалстадом (Paul Falstad), студентом Принстонского университета. Название оболочки происходит от имени преподавателя Чжун Шао (Zhong Shao), чей логин в университетской системе был «zsh». Первоначально Zsh была написана как расширение для оболочки sh, но вскоре стала самостоятельным проектом.
Развитие
В 1993 году разработку продолжил Золтан Худак (Zoltan Hudak), а затем, с 1995 года, Барт Шефер (Bart Schaefer) и другие участники. Ключевым этапом стало создание в 1999 году официального репозитория и системы управления версиями. В 2000-х годах Zsh получила широкое распространение благодаря сообществу пользователей macOS (после того как Apple сделала её оболочкой по умолчанию в macOS Catalina в 2019 году). В 2020 году Zsh стала оболочкой по умолчанию в Kali Linux, а также в некоторых дистрибутивах BSD.
Современное состояние
По состоянию на 2025 год Zsh остаётся одной из трёх наиболее популярных командных оболочек (наряду с Bash и Fish). Её развитие координируется сообществом через GitHub, а текущим мейнтейнером является Оливер Кинкель (Oliver Kinkel). Релизы выходят нерегулярно, но стабильная версия 5.8.1 была выпущена в 2021 году, а версия 5.9 — в 2022 году.
Ключевые особенности
Совместимость с Bourne shell
Zsh полностью совместима с синтаксисом POSIX sh, что позволяет выполнять большинство скриптов, написанных для Bash и sh, без изменений. Однако она имеет собственные расширения, которые могут нарушать совместимость.
Система автодополнения
Одной из сильных сторон Zsh является контекстно-зависимое автодополнение. При нажатии клавиши Tab оболочка анализирует текущую команду, её аргументы и тип файлов, предлагая релевантные варианты. Например, для команды ssh она может предложить список хостов из файла ~/.ssh/config, а для git — список веток и команд. Система автодополнения модульная: пользователь может подключать или отключать отдельные модули (например, compinit, bashcompinit).
Настройка промпта
Zsh позволяет гибко настраивать приглашение командной строки (prompt) с помощью специальных escape-последовательностей. Поддерживаются:
- отображение текущей директории, имени пользователя, хоста;
- цвета и стили текста (жирный, подчёркнутый);
- отображение статуса последней команды (код возврата);
- динамические элементы (например, время выполнения команды).
Популярные фреймворки для настройки промпта: Oh My Zsh, Powerlevel10k, Spaceship.
История команд
Zsh хранит историю введённых команд в файле (обычно ~/.zsh_history). Поддерживаются:
- поиск по истории (Ctrl+R);
- совместное использование истории между несколькими сессиями терминала;
- настраиваемый лимит записей (по умолчанию 2000).
Глобальные псевдонимы и суффиксы
Zsh позволяет создавать псевдонимы, которые работают с любыми аргументами, а не только с командами. Например: ``zsh alias -g G='| grep' ` После этого команда ls G будет эквивалентна ls | grep`.
Также поддерживаются суффиксные псевдонимы, которые автоматически открывают файлы определённого типа в заданной программе: ``zsh alias -s pdf='evince' ` После этого ввод document.pdf` откроет файл в Evince.
Устройство и конфигурация
Файлы конфигурации
Zsh читает несколько конфигурационных файлов в определённом порядке:
- .zshenv — выполняется при каждом запуске оболочки (включая неинтерактивные сессии);
- .zprofile — выполняется при входе в систему (login shell);
- .zshrc — выполняется для интерактивных оболочек (не login);
- .zlogin — выполняется после .zprofile для login shell;
- .zlogout — выполняется при выходе из login shell.
Пользователь может размещать настройки в любом из этих файлов, но стандартной практикой является помещение всех настроек в .zshrc.
Модули
Zsh имеет модульную архитектуру. Основные модули:
- zsh/complete — система автодополнения;
- zsh/history — управление историей;
- zsh/zle — редактирование командной строки (Zsh Line Editor);
- zsh/zftp — FTP-клиент;
- zsh/zprof — профилирование производительности.
Модули подключаются через команду zmodload.
Фреймворки
Наиболее популярный фреймворк — Oh My Zsh (создан в 2009 году Робби Расселом). Он включает более 300 плагинов (для Git, Docker, Node.js, Python и др.) и более 140 тем оформления. Другие фреймворки: Prezto, Antigen, Zgen.
Применение
Для разработчиков
Zsh широко используется программистами и системными администраторами благодаря:
- улучшенной навигации по файловой системе (например,
cd -для перехода к предыдущей директории,cd ~-для списка последних директорий); - интеграции с системами контроля версий (Git, Mercurial, SVN) через плагины;
- поддержке расширенных регулярных выражений и glob-паттернов (например,
**/*.txtдля поиска всех файлов .txt в поддиректориях).
Для пользователей macOS
С 2019 года Zsh является оболочкой по умолчанию в macOS. Это связано с тем, что Bash в macOS оставался на версии 3.2 (из-за лицензионных ограничений GPLv3), а Zsh распространяется под лицензией MIT, что позволяет Apple включать её без ограничений.
Для серверов
Zsh редко используется в качестве оболочки по умолчанию на серверах (из-за большего потребления памяти по сравнению с Bash), но может быть установлена как дополнительная оболочка для администраторов.
Сравнение с другими оболочками
| Характеристика | Zsh | Bash | Fish |
|---|---|---|---|
| Совместимость с POSIX | Полная | Полная | Частичная |
| Система автодополнения | Контекстная, модульная | Базовая | Автоматическая, контекстная |
| Настройка промпта | Гибкая (через escape-последовательности) | Ограниченная | Встроенные темы |
| Скриптовый язык | Совместим с sh, расширения | Совместим с sh | Собственный синтаксис |
| Потребление памяти | Среднее | Низкое | Высокое |
| Популярность | Высокая (разработчики, macOS) | Очень высокая (серверы, Linux) | Средняя (новички, macOS) |
Недостатки и критика
- Сложность конфигурации. Для новичков настройка Zsh может быть нетривиальной, особенно при использовании фреймворков (Oh My Zsh может замедлять запуск оболочки на 0.5–2 секунды).
- Потребление ресурсов. Zsh загружает больше модулей и плагинов, чем Bash, что может быть заметно на слабых системах.
- Совместимость скриптов. Некоторые расширения Zsh (например,
[[ ]]с дополнительными операторами) не работают в Bash, что может вызвать проблемы при переносе скриптов. - Фрагментация сообщества. Существует множество фреймворков и плагинов, что иногда приводит к конфликтам версий и несовместимости.
Интересные факты
- Название «Zsh» произносится как «зед-шэлл» (по-американски) или «зет-шэлл» (по-британски).
- Zsh поддерживает «расширенную историю» — возможность видеть, когда была выполнена каждая команда (с точностью до секунды).
- В Zsh можно настроить автоматическое исправление опечаток в командах (например,
slисправится наls). - Фреймворк Oh My Zsh имеет более 100 000 звёзд на GitHub (по состоянию на 2025 год).
Источники
- Falstad, P. (1990). «Zsh: A New Shell». Princeton University.
- Zsh Development Team. «Zsh Manual». Официальная документация.
- Robbins, R. (2009). «Oh My Zsh: A Community-Driven Framework». GitHub.
- Apple Inc. (2019). «macOS Catalina Release Notes: Default Shell Change».
- Kinkel, O. (2022). «Zsh 5.9 Release Notes». GitHub.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →