Командная оболочка операционной системы linux

Обзор-сравнение командных оболочек (unix shell): BASH, ZSH, FISH

Unix shell — это оболочка (интерпретатор команд), предоставляющая пользовательский интерфейс командной строки для Unix подобных операционных систем. Оболочка одновременно является языком интерактивных команд и языком сценариев (скриптов) и используется пользователем для передачи команд (списка команд) операционной системе.

Название BASH происходит от «Bourne again shell» (еще одна командная оболочка Борна). Появилась в 1987 году, как усовершенствованный вариант командной оболочки Bourne shell (sh, автор Стивен Борн). Поскольку фамилия Bourne (Борн) созвучна со словом born (рожденный), появился каламбур «Born again shell» (рожденная вновь командная оболочка).

BASH, как и все shell, представляет собой командный процессор, работающий в текстовом окне в интерактивном режиме. Поддерживает различные сокращения и переменные, операторы цикла, контроль и подстановку вывода результатов, автодополнение имен файлов и каталогов. Синтаксис BASH и другие особенности языка были заимствованы его автором Брайаном Фоксом из SH.

BASH — одна из первых программ, которую Линус Торвальдс (создатель Linux) портировал на Linux. BASH — самая распространенная оболочка Linux и каждый пользователь, который хоть раз открывал терминал, взаимодействовал с ней.

Ключевые особенности BASH:

  1. Огромное количество пользователей используют BASH, так как эта оболочка установлена по умолчанию в большинстве систем Linux
  2. Командный процессор BASH имеет множество встроенных команд
  3. BASH не имеет встроенного выражения с подстановочными знаками (*,?,[]), которые используются для поиска шаблонов, аналогично регулярному выражению
  4. Символ # рассматривается как комментарий в сценарии BASH
  5. Имеет крайне скромные (ограниченные возможности) настройки
  6. Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.bashrc

Первая версия ZSH была написана Паулем Фалстадом, когда он был студентом Принстонского университета в 1990 году. Название оболочки произошло от учетной записи «zsh» университетского ассистента Пауля по имени Чжун Шао. В настоящее время проект развивается энтузиастами под руководством Питера Стефенсона в рамках свободно распространяемого ПО.

ZSH является расширенным аналогом BASH и имеет с ним обратную совместимость, добавляя ему большое количество улучшений.

Ключевые особенности ZSH:

  1. Встроенное автозаполнение с расширенным функционалом. Клавиша TAB используется для автоматического дополнения (завершения) любой команды, которую вы хотите запустить. Помимо автозаполнения она выводит раскрывающийся список всех возможных файлов и каталогов
  2. Поддерживает встроенные выражения с подстановочными знаками (*, ?, [])
  3. Более настраиваемый, чем BASH
  4. Поддерживает различные плагины, расширяющие функционал и темы для кастомизации внешнего вида.
  5. Oh My Zsh — наиболее известный фреймворк для применения разнообразных настроек оболочки
  6. Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.zshrc
Читайте также:  Linux incremental backup with rsync

FISH — это POSIX несовместимая оболочка UNIX с упором на интерактивность и удобство использования, была создана Акселем Лильенкранцем в 2005 году. POSIX (Portable Operating System Interface) — набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой (системный API), библиотеку языка «C» и набор приложений и их интерфейсов.

В отличие от других оболочек, которым требуется много настроек и дополнительных плагинов, FISH предлагает все удобства пользователю прямо «из коробки». В то же время FISH является самой нестандартной оболочкой из-за того, что она не соответствует POSIX.

Синтаксис в FISH также изменен в сторону упрощения командного языка оболочки, например все управляющие конструкции завершаются ключевым выражением «end». Еще одним нововведением FISH являются универсальные переменные, вводимые с помощью конструкции «set -U переменная значение».

Ключевые особенности FISH:

  1. FISH предлагает автоматический «поиск во время ввода», основанный на истории команд и каталоге, в котором вы находитесь на момент ввода
  2. Встроенная подсветка синтаксиса — это функция, которую мы все хотели бы иметь в интерфейсе командной строки. Это делает работу проще и удобней, экономит много времени. И все это предлагается пользователю прямо «из коробки», интерфейс выглядит красиво и интуитивно понятно
  3. FISH умеет анализировать справочные страницы MAN и преобразовывать их в табличный формат вывода с удобным перемещением между данными
  4. Настройки FISH очень просты и понятны. Для изменения внешнего вида достаточно набрать в окне терминала команду: «fish_config», — откроется веб-сервис настроек, с возможностью выбора уже готовой предустановки, либо любой пользовательской конфигурации
  5. Дополнительно для расширения возможностей и настроек кастомизации FISH предлагается фреймворк Oh My Fish, аналогичный таковому в ZSH
  6. FISH предлагает очень простой и интуитивно понятный интерфейс командной строки для любого пользователя любого уровня. Для вызова справки по командному процессору FISH нужно просто набрать «help» в окне терминала, — откроется веб-сервис с удобно организованной и хорошо наполненной интерактивной базой знаний, в которой точно «найдется все»
  7. Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.config/fish/config.fish

Демонстрация особенностей

Выводы

  1. BASH, ZSH и FISH имеют свои достоинства и недостатки, а также некоторые сходства между собой
  2. Если вы консерватор и приверженец всего классического, вы просто можете оставить себе BASH
  3. Если вы хотите что-то более гибкое и настраиваемое, вы можете попробовать ZSH, дополнив его плагинами или даже установив Oh My Zsh
  4. Если вам нужен интерактивный терминал без особых настроек, вы можете смело использовать FISH. Даже если он и не лучший во всем, FISH имеет функциональные возможности, соответствующие основной философии UNIX: «Do one thing, and do it well” (делай что-то одно и делай это хорошо)
Читайте также:  Linux terminate all processes

Вместо послесловия

Если спросить мое личное мнение, то я предложу FISH, несмотря на то, что сам использую ZSH 🙂

Источник

Что такое Shell

Если вы пользуетесь Linux, то рано или поздно, поиски решения какой-либо задачи приводили вас к терминалу. Это очень эффективное средство взаимодействия с операционной системой. Вы можете быстро выполнять нужные команды, получать результат и объединять несколько команд в цепочку. Один из самых основных компонентов терминала — это командная оболочка или Shell.

В этой статье мы поговорим о том, что такое Shell в Linux, зачем нужна командная оболочка, какие функции она выполняет и как развивались командные оболочки за последнее время.

Что такое Shell

Shell или командная оболочка — это программа, которая организовывает среду для выполнения других программ и команд Командная оболочка имеет свои встроенные команды, арифметические операторы и другие синтаксические выражения, но основная её задача упрощать запуск других программ. Именно командная оболочка занимается поиском программ в текущем каталоге и в путях, указанных в переменной среды PATH, управляет сменой текущего каталога и переменными окружения. Таким образом, основная задача оболочки — интерпретировать команды пользователя и выполнять их не зависимо от того внешние ли это программы или внутренние команды.

Чтобы понять с чем вы имеете дело, командой оболочки или внешней программой можно воспользоваться командой whereis. Например команда cd, это не программа, а встроенная команда оболочки, как и bg и fg:

А вот команда ls — уже внешняя программа, исполняемый файл которой расположен в файловой системе.

Командная оболочка — это традиционный способ ввода данных в Unix подобных операционных системах. Командные оболочки появились почти сразу же после появления Unix и привычных нам интерфейсов взаимодействия с компьютером. Первой командной оболочкой была Thompson Shell, разработанная Кеном Томсоном в Bell Labs в 1971 году. Уже тогда поддерживалось перенаправление ввода-вывода команд с помощью туннелей, а также поддерживались простые условные операторы.

Циклы while в командных оболочках появились чуть позже, в оболочке PWB Shell, разработанной Джоном Машеу на основе Thompson Shell. Но современный вид командная оболочка приобрела только с выходом оболочки Борна (Bourne Shell) в 1979 году. В ней было уже автодополнение имен файлов и команд, стандартные переменные окружения и привычные управляющие структуры. Исполняемый файл этой оболочки имел такой путь в системе — /bin/sh. В современных системах это обычно ссылка на используемую оболочку.

Читайте также:  Рутокен lite драйвер linux

Именно вдохновляясь идеями этой оболочки потом была разработана оболочка Bash (Bourne Again Shell) используемая сейчас по умолчанию в большинстве дистрибутивов Linux. Она уже была разработана Браеном Фоксом в рамках проекта GNU в 1989 году. С тех пор прошло много времени и эта оболочка сильно устарела. Поэтому были разработаны и другие более современные командные оболочки, такие как ZSH и Fish.

Оболочка Zsh появилась незадолго после Bash в 1990 году, но она уже имеет намного больше функций, например, есть автодополнение для cd, когда выводится список папок из которого можно выбрать нужную:

Поддерживается автодополнение для параметров команд, например, для git можно вывести доступные команды вместе со справкой:

И это только несколько из всех преимуществ оболочки, кроме того она поддерживает цветные темы для вывода приглашения, а также довольно сильно расширяется с помощью плагинов.

Ещё более современная оболочка fish (Friendly Interactive Shell), появившаяся в 2005 году. Она поддерживает все стандартные возможности командной оболочки, но кроме того имеет удобную подсветку синтаксиса команд во время введения, удобный поиск команд, как Ctrl+R только по умолчанию, но самое удобное здесь это скрипты. Они намного проще для начинающих пользователей.

Если вы не меняли командную оболочку, то очень высока вероятность, что у вас используется Bash. Самый простой способ узнать какая оболочка у вас используется на данный момент, посмотреть содержимое переменной окружения SHELL:

Ещё один способ узнать текущую оболочку — воспользоваться командной ps. Если ей передать опцию -p и идентификатор процесса, то она покажет информацию о нём. Вывести идентификатор процесса текущей оболочки можно с помощью символов $$. Поэтому выполните:

В данном случае видно, что используется ZSH. Для того чтобы посмотреть все оболочки, установленные в вашей системе, просто выведите содержимое файла /etc/shells:

Все эти оболочки можно использовать выполнения команд от пользователей. Оболочка настраивается в файле /etc/passwd, для каждого пользователя отдельно. Поэтому посмотреть какая оболочка настроена для того или иного пользователя можно в этом файле. Например, для текущего пользователя команда будет выглядеть так:

grep «^$USER» /etc/passwd | awk -F: ‘< print $7>‘

Выводы

В этой статье вы узнали что такое Shell, а также как развивались командные оболочки от момента их появления до наших дней. Как видите, это очень удобный инструмент, и даже графический интерфейс не может его полностью заменить.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector