В чем разница между zsh и sh в Linux?

«В чем разница между zsh и sh в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

sh (Bourne Shell) и zsh (Z Shell) — это командные оболочки, но zsh является расширенной, более удобной для пользователя версией.

sh (Bourne Shell)

  • Статус: Стандартная, минималистичная оболочка, соответствующая POSIX.
  • Использование: Часто используется для системных скриптов из-за гарантированной переносимости.
  • Особенности: Базовый функционал, простой синтаксис, мало возможностей для интерактивной работы.

zsh (Z Shell)

  • Статус: Расширенная, обратно совместимая с bash и sh оболочка.
  • Использование: Популярна как интерактивная оболочка для разработчиков и администраторов.
  • Ключевые улучшения:
    • Умное автодополнение: Дополняет не только команды и файлы, но и опции, аргументы команд, имена процессов и т.д.
    • Глобализация (Globbing): Мощные шаблоны поиска файлов.
      # Найти все .py файлы в подкаталогах (рекурсивно)
      ls **/*.py
      # Найти только каталоги, начинающиеся на 'log'
      ls log*(/)
    • Темы и плагины: Экосистема вроде Oh My Zsh предоставляет сотни тем и плагинов (git, docker, kubectl), которые показывают статус прямо в приглашении командной строки.
    • Исправление опечаток: Предлагает исправления для неправильно введенных команд или путей.
    • Разделенная история команд: Можно искать в истории по части команды.

Практический вывод: Для написания переносимых скриптов используйте #!/bin/sh и синтаксис POSIX. Для повседневной интерактивной работы zsh с фреймворком типа Oh My Zsh значительно повышает продуктивность.