Журнал LinuxFormat - перейти на главную

LXF93:Сравнение

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
м
(Командные оболочки)
 
(не показаны 2 промежуточные версии 2 участников)
Строка 1: Строка 1:
 +
[[Категория:Сравнение]]
 
= Командные оболочки =
 
= Командные оболочки =
 
''Не забирались дальше Bash? Оболочка – не просто поле для ввода команд, так что познакомьтесь с парочкой экземпляров из коллекции '''Нейла Ботвика'''.''
 
''Не забирались дальше Bash? Оболочка – не просто поле для ввода команд, так что познакомьтесь с парочкой экземпляров из коллекции '''Нейла Ботвика'''.''
Строка 7: Строка 8:
  
 
== Оболочки всех размеров ==
 
== Оболочки всех размеров ==
 +
 +
{{Врезка
 +
|Заголовок=О POSIX
 +
|Содержание=Portable Operating System Interface или
 +
POSIX представляет собой собрание стандартов, определяющих совместимость операционных систем. POSIX-совместимая
 +
оболочка отвечает соответствующим частям стандарта и будет работать с любым
 +
скриптом, написанным в соответствии с
 +
ним. Обычно POSIX считается основой оболочки, к которой добавляются дополнительные функции. Большинство рассмотренных здесь оболочек соответствуют стандарту, но некоторые для его обеспечения
 +
требуют указания ключа в командной строке. Стандартная оболочка – это обычно ''/bin/sh'', поэтому многие оболочки добавляют
 +
это в качестве символической ссылки на самих себя. Запуск оболочки через ''/bin/sh''
 +
включает полную POSIX-совместимость.
 +
|Ширина=200px
 +
}}
 +
 
Рассмотренные здесь оболочки делятся на три основных категории. Оболочки общего назначения, типа ''Bash ''и ''Zsh, ''предлагают широкий выбор функций и свойств. Оболочки-легковесы, например, ''Dash, ''предлагают самые основные функции в небольшом пакете, и хороши для старых ПК или систем с ограниченными ресурсами; это также хорошие кандидаты на интерпретацию скриптов, которым не нужны «навороты» ''Bash ''со товарищи. Третья категория, оболочки особого назначения, созданы для специальных приложений или сред.
 
Рассмотренные здесь оболочки делятся на три основных категории. Оболочки общего назначения, типа ''Bash ''и ''Zsh, ''предлагают широкий выбор функций и свойств. Оболочки-легковесы, например, ''Dash, ''предлагают самые основные функции в небольшом пакете, и хороши для старых ПК или систем с ограниченными ресурсами; это также хорошие кандидаты на интерпретацию скриптов, которым не нужны «навороты» ''Bash ''со товарищи. Третья категория, оболочки особого назначения, созданы для специальных приложений или сред.
  
Строка 12: Строка 27:
  
 
Кроме внешних команд, каждая оболочка умеет выполнять некоторое количество собственных команд (‘builtins’), ускоряющих выполнение основных операций. Большинство рассматриваемых оболочек соответствуют основному стандарту POSIX. Различаются они предлагаемыми дополнительными функциями. Это могут быть дополнительные builtin-команды, функции типа расширенного дополнения или попросту минимальная среда POSIX в компактной и быстрой программе.
 
Кроме внешних команд, каждая оболочка умеет выполнять некоторое количество собственных команд (‘builtins’), ускоряющих выполнение основных операций. Большинство рассматриваемых оболочек соответствуют основному стандарту POSIX. Различаются они предлагаемыми дополнительными функциями. Это могут быть дополнительные builtin-команды, функции типа расширенного дополнения или попросту минимальная среда POSIX в компактной и быстрой программе.
 +
 +
== Про наш тест...==
 +
 +
Оболочки  используются  двумя  способами. 
 +
При  интерактивном  применении  самым 
 +
важным  аспектом  является  простота:  предоставляется  ли  стандартное  или  расширенное  дополнение,  хороша  ли  документация,  есть  ли  подсказка?  Другой  способ 
 +
использования  –  в  качестве  движка  для 
 +
запуска  сценариев  оболочки.  Здесь  основными требованиями будут, во-первых, совместимость со стандартами, а во-вторых – и 
 +
это менее важное требование – скорость. 
 +
 +
Для оболочек не существует стандартных 
 +
тестов,  да  если  бы  они  и  были,  оболочки 
 +
вроде ''Bash'' и ''Zsh'' имеют более быстрые альтернативы  функций  POSIX,  поэтому  справедливо  ли  их  сравнивать?  Мы  запустили 
 +
тестовый  скрипт  с  несколькими  циклами, 
 +
содержащими  парочку  логических  тестов, 
 +
чтобы определить относительную скорость. 
 +
Поскольку некоторые оболочки используют 
 +
нестандартный синтаксис скриптов, ранжировать их не удалось, но там, где скорость 
 +
достойна упоминания, она отмечена в индивидуальных обзорах. 
 +
 +
Тестирование  производилось  на  ПК Athlon64  3200  с  1  ГБ  ОЗУ,  и  на  1-ГГц  G4 iBook  с  768MB,  на  обоих  был  установлен Gentoo Testing.
  
 
== Bash ==
 
== Bash ==
''Фаворит дистростроителей, но вправду ли он лучше всех?''
+
 
 +
{{Сравнение
 +
|кратко=Фаворит дистростроителей, но вправду ли он лучше всех?
 +
|версия=3.2_p15
 +
|сайт=http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
 +
|лицензия=GPL
 +
|итог=Отлично подходит для скриптов и
 +
хорош для всех, кроме самого
 +
требовательного интерактивного
 +
пользователя.
 +
|рейтинг=8
 +
}}
  
 
Вначале был ''Bourne Shell ''(''sh''), его написал Стивен Борн [Steven Bourne] для Bell Labs Research Unix. ''Bash ''– это ''Bourne Again Shell ''(Снова Оболочка Борна), ужасный каламбур, который, к счастью, редко используется. Почти все современные дистрибутивы Linux используют ''Bash ''в качестве оболочки по умолчанию, и вы, вероятно, знакомы как минимум с его основами; это превращает ''Bash ''в фактический стандарт, с которым сравниваются все остальные. Поэтому имеет смысл для начала рассмотреть ''Bash'', а затем перейти к другим оболочкам, изучить, чем они отличаются, и выделить их достоинства и недостатки. Итак, что же дает нам ''Bash'', и почему ''Bash ''столь популярен у разработчиков дистрибутивов?
 
Вначале был ''Bourne Shell ''(''sh''), его написал Стивен Борн [Steven Bourne] для Bell Labs Research Unix. ''Bash ''– это ''Bourne Again Shell ''(Снова Оболочка Борна), ужасный каламбур, который, к счастью, редко используется. Почти все современные дистрибутивы Linux используют ''Bash ''в качестве оболочки по умолчанию, и вы, вероятно, знакомы как минимум с его основами; это превращает ''Bash ''в фактический стандарт, с которым сравниваются все остальные. Поэтому имеет смысл для начала рассмотреть ''Bash'', а затем перейти к другим оболочкам, изучить, чем они отличаются, и выделить их достоинства и недостатки. Итак, что же дает нам ''Bash'', и почему ''Bash ''столь популярен у разработчиков дистрибутивов?
Строка 23: Строка 70:
  
 
=== RTFM ===
 
=== RTFM ===
 +
 
Набрав '''help''', вы получите список всех встроенных команд. Добавив имя команды, вы получите информацию об ее использовании. Это устраняет необходимость лазить по man-странице ''Bash'', содержащей явный переизбыток информации. Тут ''Bash ''может поучиться у ''Zsh'', где документация распределена по нескольким страницам. Документация, представленная в формате info, удобнее для обработки, при условии, что вы умеете пользоваться info, но многим из нас это недоступно. Пользователи KDE могут легко просмотреть документацию, введя ‘info:''Bash''’ в ''Konqueror''.
 
Набрав '''help''', вы получите список всех встроенных команд. Добавив имя команды, вы получите информацию об ее использовании. Это устраняет необходимость лазить по man-странице ''Bash'', содержащей явный переизбыток информации. Тут ''Bash ''может поучиться у ''Zsh'', где документация распределена по нескольким страницам. Документация, представленная в формате info, удобнее для обработки, при условии, что вы умеете пользоваться info, но многим из нас это недоступно. Пользователи KDE могут легко просмотреть документацию, введя ‘info:''Bash''’ в ''Konqueror''.
  
Строка 30: Строка 78:
  
 
== Fish ==
 
== Fish ==
''Нестандартные скрипты, но идеален для новичков.''
+
 
 +
{{Сравнение
 +
|кратко=Нестандартные скрипты, но идеален для новичков.
 +
|версия=1.22.2
 +
|сайт=http://fishshell.org
 +
|лицензия=GPL
 +
|итог=Очень дружественна: даже ваша
 +
бабушка справится с нею. Хороший
 +
первый выбор для начинающих
 +
пользователей оболочек.
 +
|рейтинг=8
 +
}}
  
 
Работа с оболочкой слегка пугает начинающих пользователей. Поэтому ''Fish'', ''Friendly Interactive Shell ''(Дружелюбная Интерактивная Оболочка), даже предлагает привыкшим к графическому пользовательскому интерфейсу ввести help после входа. Эта команда при первом использовании попросит вас выбрать браузер, а потом будет открывать в нем документацию в формате HTML. Подробная и доступная информация о командах делает их поиск значительно проще, чем в man-страницах оболочек, подобных ''Bash ''или ''Zsh''. Если ''Fish ''не сможет подключиться к X-серверу, для показа справки будет задействован links.
 
Работа с оболочкой слегка пугает начинающих пользователей. Поэтому ''Fish'', ''Friendly Interactive Shell ''(Дружелюбная Интерактивная Оболочка), даже предлагает привыкшим к графическому пользовательскому интерфейсу ввести help после входа. Эта команда при первом использовании попросит вас выбрать браузер, а потом будет открывать в нем документацию в формате HTML. Подробная и доступная информация о командах делает их поиск значительно проще, чем в man-страницах оболочек, подобных ''Bash ''или ''Zsh''. Если ''Fish ''не сможет подключиться к X-серверу, для показа справки будет задействован links.
Строка 39: Строка 98:
  
 
== Tcsh ==
 
== Tcsh ==
''Оболочка C Shell. Приглядитесь!''
+
{{Сравнение
 +
|кратко=Оболочка C Shell. Приглядитесь!
 +
|версия=6.14
 +
|сайт=http://www.tcsh.org
 +
|лицензия=BSD
 +
|итог=Интересная вариация стандартного
 +
синтаксиса оболочки, но на самом деле
 +
ничего, превосходящего Zsh и Bash, не
 +
предлагается.
 +
|рейтинг=7
 +
}}
  
 
На первый взгляд, ''Tcsh ''весьма похож на ''Bash ''и ''Zsh'', ибо включает дополнение команд и имен файлов, предысторию команд с функцией поиска и проверку написания – но для своих скриптов он использует совершенно другой синтаксис. Поэтому, хотя ''Tcsh ''и взаимозаменяем с другими оболочками по части интерактивного использования, вам все же понадобится ''Bash ''для запуска скриптов, не написанных специально для ''Tcsh''.
 
На первый взгляд, ''Tcsh ''весьма похож на ''Bash ''и ''Zsh'', ибо включает дополнение команд и имен файлов, предысторию команд с функцией поиска и проверку написания – но для своих скриптов он использует совершенно другой синтаксис. Поэтому, хотя ''Tcsh ''и взаимозаменяем с другими оболочками по части интерактивного использования, вам все же понадобится ''Bash ''для запуска скриптов, не написанных специально для ''Tcsh''.
Строка 50: Строка 119:
  
 
== Zsh ==
 
== Zsh ==
''Продвинутые пользователи, перед вами победитель Bash!''
+
{{Сравнение
 +
|кратко=Продвинутые пользователи, перед вами победитель Bash!
 +
|версия=4.3.2
 +
|сайт=http://www.zsh.org
 +
|лицензия=ZSH
 +
|итог=Единственная оболочка в '''Сравнении''',
 +
дающая больше функций и гибкости, чем
 +
всеобъемлющий ''Bash''. Для знающих
 +
пользователей.
 +
|рейтинг=9
 +
}}
  
 
При первом запуске ''Zsh ''выводится меню настройки, чтобы вы смогли отрегулировать многочисленные мощные и гибкие функции. Все меню содержат массу информации по каждой опции и предлагают разумные значения по умолчанию, поэтому вы можете просто принять их и, если пожелаете, запустить программу настройки позже, когда вам понадобится вся функциональность. ''Zsh ''снабжен всеми функциями, которые только можно придумать, и даже сверх того – например, проверкой написания. ''Zsh ''и ''Bash ''предлагают сходный функционал. Обе имеют программируемое дополнение (хотя у ''Zsh ''оно появилось раньше), встроенные команды и функции для создания скриптов. У ''Zsh ''также в запасе есть несколько собственных хитростей, например, расширенная подстановка имени файла, которая превращает команду поиска find почти что в ненужное излишество. Включение в путь ** означает соответствие любому символу, включая разделитель-слэш, поэтому **/*.jpg касается всех файлов '''*.jpg '''в текущей директории и в любых поддиректориях. Мало того, сюда также включаются права доступа к файлу, владелец, тип или отметка времени – большинство опций, предусмотренных find. Например, можно использовать ls -l /**/bin/*(s) для вывода списка всех setuid-файлов в '''/bin''', '''/usr/bin '''и '''/usr/local/bin'''. Где вы, наши друзья по старым добрым временам Amiga – при наборе имени директории в командной строке ''Zsh ''переключается на эту директорию. Многие из нас годами приучались ставить '''cd '''перед именем директории; теперь можно поставить ''Zsh ''и вернуться к былой лени.
 
При первом запуске ''Zsh ''выводится меню настройки, чтобы вы смогли отрегулировать многочисленные мощные и гибкие функции. Все меню содержат массу информации по каждой опции и предлагают разумные значения по умолчанию, поэтому вы можете просто принять их и, если пожелаете, запустить программу настройки позже, когда вам понадобится вся функциональность. ''Zsh ''снабжен всеми функциями, которые только можно придумать, и даже сверх того – например, проверкой написания. ''Zsh ''и ''Bash ''предлагают сходный функционал. Обе имеют программируемое дополнение (хотя у ''Zsh ''оно появилось раньше), встроенные команды и функции для создания скриптов. У ''Zsh ''также в запасе есть несколько собственных хитростей, например, расширенная подстановка имени файла, которая превращает команду поиска find почти что в ненужное излишество. Включение в путь ** означает соответствие любому символу, включая разделитель-слэш, поэтому **/*.jpg касается всех файлов '''*.jpg '''в текущей директории и в любых поддиректориях. Мало того, сюда также включаются права доступа к файлу, владелец, тип или отметка времени – большинство опций, предусмотренных find. Например, можно использовать ls -l /**/bin/*(s) для вывода списка всех setuid-файлов в '''/bin''', '''/usr/bin '''и '''/usr/local/bin'''. Где вы, наши друзья по старым добрым временам Amiga – при наборе имени директории в командной строке ''Zsh ''переключается на эту директорию. Многие из нас годами приучались ставить '''cd '''перед именем директории; теперь можно поставить ''Zsh ''и вернуться к былой лени.
Строка 59: Строка 138:
  
 
== Dash ==
 
== Dash ==
''Небольшая оболочка; очень быстро выполняет скрипты.''
+
{{Сравнение
 +
|кратко=Небольшая оболочка; очень быстро выполняет скрипты.
 +
|версия=0.5.3.7
 +
|сайт=http://gondor.apana.org.au/~herbert
 +
|лицензия=BSD
 +
|итог=Маленькая и быстрая, но не
 +
превосходит уровня интерактивной
 +
оболочки для нетребовательных систем.
 +
|рейтинг=6
 +
}}
  
 
Если вы ищете небольшую и быструю оболочку, то у ''Dash ''есть шансы. ''Dash ''происходит от оболочки FreeBSD под названием ''Ash'', и, имея скромный размер 99K, составляет всего одну седьмую от ''Bash''. В нем нет тех наворотов, которыми богат ''Bash'', но они не всегда и нужны. Как интерактивная оболочка, ''Dash ''скудноват – здесь нет даже базового tab-дополнения; но он превосходно подходит для выполнения сценариев оболочки POSIX.
 
Если вы ищете небольшую и быструю оболочку, то у ''Dash ''есть шансы. ''Dash ''происходит от оболочки FreeBSD под названием ''Ash'', и, имея скромный размер 99K, составляет всего одну седьмую от ''Bash''. В нем нет тех наворотов, которыми богат ''Bash'', но они не всегда и нужны. Как интерактивная оболочка, ''Dash ''скудноват – здесь нет даже базового tab-дополнения; но он превосходно подходит для выполнения сценариев оболочки POSIX.
Строка 68: Строка 156:
  
 
== Dsh ==
 
== Dsh ==
''Запускайте программы сразу на нескольких ПК.''
+
{{Сравнение
 +
|кратко=Запускайте программы сразу на нескольких ПК.
 +
|версия=0.25.7
 +
|сайт=http://www.netfort.gr.jp/~dancer/software
 +
|лицензия=GPL
 +
|итог=Отличный инструмент удаленного
 +
контроля, но сильно нуждается в функции
 +
распределенного копирования.
 +
|рейтинг=7
 +
}}
  
D''sh ''– это распределенная оболочка (хотя вообще-то ее название означает ''Dancer’s Shell''), выполняющая команды сразу на нескольких удаленных машинах. Некоторые рассмотренные здесь оболочки подходят для интерактивного пользования и создания скриптов; а эта – совсем не интерактивна, но зато весьма полезна, когда надо запустить серию команд на группе компьютеров. Альтернативой является нечто вроде for host in node1 node2 node3; do ssh $host “my commands”; done С ''Dsh'', вы заносите имена хостов в файл '''machine.list''', а затем просто набираете Dsh -a my commands. Файл '''machine.list '''используется опцией -a (или --all), но вы можете поместить любое количество списков имен хостов в групповой директории ''Dsh'', и, передав имя списка с помощью опции -g (--group), запустить команду на всех этих машинах.
+
''Dsh ''– это распределенная оболочка (хотя вообще-то ее название означает ''Dancer’s Shell''), выполняющая команды сразу на нескольких удаленных машинах. Некоторые рассмотренные здесь оболочки подходят для интерактивного пользования и создания скриптов; а эта – совсем не интерактивна, но зато весьма полезна, когда надо запустить серию команд на группе компьютеров. Альтернативой является нечто вроде
 +
 
 +
<code>
 +
for host in node1 node2 node3; do ssh  
 +
    $host “my commands”; done
 +
</code>
 +
 
 +
С ''Dsh'', вы заносите имена хостов в файл '''machine.list''', а затем просто набираете Dsh -a my commands. Файл '''machine.list '''используется опцией -a (или --all), но вы можете поместить любое количество списков имен хостов в групповой директории ''Dsh'', и, передав имя списка с помощью опции -g (--group), запустить команду на всех этих машинах.
  
 
Опции включают: запуск команд на удаленных хостах последовательно или параллельно, предварение каждой строки вывода именем хоста (что особенно полезно при параллельном запуске команд); и передача команд через стандартный ввод. Команды можно запускать с помощью ssh или rsh, но для должного использования ssh вам понадобится аутентификация по ключу, а для выполнения команды от имени другого пользователя ее нужно будет предварить названием соответствующей учетной записи.
 
Опции включают: запуск команд на удаленных хостах последовательно или параллельно, предварение каждой строки вывода именем хоста (что особенно полезно при параллельном запуске команд); и передача команд через стандартный ввод. Команды можно запускать с помощью ssh или rsh, но для должного использования ssh вам понадобится аутентификация по ключу, а для выполнения команды от имени другого пользователя ее нужно будет предварить названием соответствующей учетной записи.
Строка 77: Строка 181:
  
 
== Sash ==
 
== Sash ==
''Желаем, чтобы она вам не понадобилась!''
+
{{Сравнение
 +
|кратко=Желаем, чтобы она вам не понадобилась!
 +
|версия=3.7
 +
|сайт=http://www.canb.auug.org.au/~dbell
 +
|лицензия=Свободно распространяемая
 +
|итог=Ограниченный набор функций, для
 +
повседневного использования не годится,
 +
но незаменима в случае аварии.
 +
|рейтинг=5
 +
}}
  
S''ash ''– это просто самая крупная из рассмотренных здесь оболочек, и не без причины. Ее название – сокращение от ''Stand Alone Shell ''(Оболочка-одиночка), и в ней содержится несколько встроенных команд, которых нет ни в одной другой оболочке. Когда мы скажем, что эти команды – ''mount, ls, cp, tar ''и ''gzip'', вы поймете, для чего нужен ''Sash''. Это – оболочка для восстановления системы, которая работает даже тогда, когда большая часть вашей файловой системы утрачена. Если '''/boot '''у вас находится на отдельном разделе, и вы не монтируете его при загрузке, или монтируете в режиме только для чтения, поместите на него копию ''Sash'', и выдержите даже rm -fr /*. Используя встроенные команды ''Sash'', вы сможете восстановить свои резервные копии (у вас ведь есть резервные копии, правда?) и запустить работу снова, не теряя времени. После отказа системы восстановление возможно даже при отсутствии важных библиотек: все необходимое – это ядро и ''Sash''.
+
''Sash ''– это просто самая крупная из рассмотренных здесь оболочек, и не без причины. Ее название – сокращение от ''Stand Alone Shell ''(Оболочка-одиночка), и в ней содержится несколько встроенных команд, которых нет ни в одной другой оболочке. Когда мы скажем, что эти команды – ''mount, ls, cp, tar ''и ''gzip'', вы поймете, для чего нужен ''Sash''. Это – оболочка для восстановления системы, которая работает даже тогда, когда большая часть вашей файловой системы утрачена. Если '''/boot '''у вас находится на отдельном разделе, и вы не монтируете его при загрузке, или монтируете в режиме только для чтения, поместите на него копию ''Sash'', и выдержите даже rm -fr /*. Используя встроенные команды ''Sash'', вы сможете восстановить свои резервные копии (у вас ведь есть резервные копии, правда?) и запустить работу снова, не теряя времени. После отказа системы восстановление возможно даже при отсутствии важных библиотек: все необходимое – это ядро и ''Sash''.
  
 
По причине ограничений на размер, команды, встроенные в ''Sash'', являются урезанными версиями своих аналогов, поэтому ''Sash ''предоставляет доступ и к тем, и к другим. Для запуска стандартной команды ''ls ''вводите ls, а -ls вызовет встроенную. Стандартная команда недоступна? Сделайте псевдоним ls, разворачивающийся в -ls. Если вас угораздило полностью удалить '''/bin''', используйте ''aliasall'', и все команды будут выбираться из встроенных. Того же можно добиться, запустив ''Sash ''с опцией -a. Команда ''help ''выведет список встроенных команд и информацию по использованию любой из них.
 
По причине ограничений на размер, команды, встроенные в ''Sash'', являются урезанными версиями своих аналогов, поэтому ''Sash ''предоставляет доступ и к тем, и к другим. Для запуска стандартной команды ''ls ''вводите ls, а -ls вызовет встроенную. Стандартная команда недоступна? Сделайте псевдоним ls, разворачивающийся в -ls. Если вас угораздило полностью удалить '''/bin''', используйте ''aliasall'', и все команды будут выбираться из встроенных. Того же можно добиться, запустив ''Sash ''с опцией -a. Команда ''help ''выведет список встроенных команд и информацию по использованию любой из них.
Строка 86: Строка 199:
  
 
== Вердикт ==
 
== Вердикт ==
'''Zsh 9/10'''
+
 
 +
:'''Zsh 9/10'''
  
 
Группа программ, представленных в данном Сравнении, довольно необычна, потому что в ней есть программа, уже установленная практически в каждом дистрибутиве.
 
Группа программ, представленных в данном Сравнении, довольно необычна, потому что в ней есть программа, уже установленная практически в каждом дистрибутиве.
  
 
Вышло так, что ''Zsh ''победил фактически по всем параметрам: он быстр, достаточно компактен, имеет превосходную документацию и лучшее дополнение, чем любая из представленных здесь оболочек. Если вы прежде не использовали tab-дополнение в оболочке, попробуйте: время здорово экономится. При интерактивном использовании ''Zsh ''непревзойденна, благодаря своим функциям и дружелюбию ко всем, кто познакомился с документацией. Нужны еще аргументы? Что ж, автор уже сделал ''Zsh ''оболочкой по умолчанию вместо ''Bash''.
 
Вышло так, что ''Zsh ''победил фактически по всем параметрам: он быстр, достаточно компактен, имеет превосходную документацию и лучшее дополнение, чем любая из представленных здесь оболочек. Если вы прежде не использовали tab-дополнение в оболочке, попробуйте: время здорово экономится. При интерактивном использовании ''Zsh ''непревзойденна, благодаря своим функциям и дружелюбию ко всем, кто познакомился с документацией. Нужны еще аргументы? Что ж, автор уже сделал ''Zsh ''оболочкой по умолчанию вместо ''Bash''.
 +
 +
{{Врезка
 +
|Заголовок=Как по-вашему?
 +
|Содержание=Вы пробовали работать с разными оболочками, или вполне довольны стандартной?
 +
Вас пугает работа с командной строкой?
 +
Если да, то не поможет ли вам решиться
 +
более дружелюбная оболочка? Присылайте
 +
свои отзывы на наше '''Сравнение''': [mailto:letters@linuxformat.ru letters@linuxformat.ru]
 +
|Ширина=200px}}
  
 
Мы не говорим, что ''Bash ''– плохая оболочка, отнюдь, просто ''Zsh ''все делает чуть лучше. ''Bash ''по-прежнему остается эталоном, по которому оценивают остальных, возможно, именно поэтому он столь распространен, и действительно устанавливает высокую планку. Если вы пишете скрипты оболочки посложнее, чем простой список команд, стоит воспользоваться именно ''Bash'', и именно поэтому дистрибутивы выбирают его оболочкой по умолчанию.
 
Мы не говорим, что ''Bash ''– плохая оболочка, отнюдь, просто ''Zsh ''все делает чуть лучше. ''Bash ''по-прежнему остается эталоном, по которому оценивают остальных, возможно, именно поэтому он столь распространен, и действительно устанавливает высокую планку. Если вы пишете скрипты оболочки посложнее, чем простой список команд, стоит воспользоваться именно ''Bash'', и именно поэтому дистрибутивы выбирают его оболочкой по умолчанию.
Строка 101: Строка 224:
  
 
''Sash ''заслуживает особого упоминания, несмотря на низкий рейтинг. Он заработал 5 из 10 только потому, что в сравнении с остальными участниками предлагает слишком мало, за исключением одного: ему вообще ничего не надо, чтобы запуститься. Никому и в голову не придет использовать его в качестве стандартной оболочки, но ''Sash ''надо держать в надежном месте; возможно, когда-нибудь он станет вашей палочкой-выручалочкой.
 
''Sash ''заслуживает особого упоминания, несмотря на низкий рейтинг. Он заработал 5 из 10 только потому, что в сравнении с остальными участниками предлагает слишком мало, за исключением одного: ему вообще ничего не надо, чтобы запуститься. Никому и в голову не придет использовать его в качестве стандартной оболочки, но ''Sash ''надо держать в надежном месте; возможно, когда-нибудь он станет вашей палочкой-выручалочкой.
 +
 +
==Краткая история оболочек==
 +
 +
В начале был ''sh'', известный также, как Оболочка Томпсона (''Thompson Shell'') – оболочка, появившаяся вместе с первым Unix в 1971 г. Он предназначался только для выполнения команд, не для скриптов.
 +
Шесть лет спустя его вытеснила Оболочка Борна (''Bourne Shell''), которую тоже назвали ''sh''. Обе оболочки вышли из Bell Laboratories. В ''Bourne Shell'' появились скрипты и прочие инновации, например, командная подстановка, использующая обратный апостроф
 +
 +
(VAR=`command --arg`).
 +
 +
Оболочка Корна (''Korn Shell'', ''ksh'') также была разработана в Bell Labs (может, AT&T – их владелец – на самом деле корпорация оболочек?). Она была совместима с ''Bourne Shell'', и в ней добавилось еще больше
 +
функций, включая расширенные скрипты и такие вещи, как предыстория (журнал) команд. Если вы когда-нибудь работали с оболочкой без журнала команд – как изначальная оболочка Amiga, например – вы поймете, какой это был гигантский скачок.
 +
 +
''Bash'' основана на ''Bourne Shell'', а на создание ''Zsh'' вдохновила ''Korn Shell'', но благодаря стандарту POSIX оба отлично сотрудничают.
 +
 +
==Таблица функций==
 +
 +
{| align="center" border="1" cellspacing="0" cellpadding="3"
 +
|-
 +
!
 +
! Лицензия
 +
! Размер исполняемого файла
 +
! Tab-дополнение
 +
! Раширенное дополнение
 +
! Детализация
 +
! Онлайн-справка
 +
! POSIX-совместимость
 +
! Проверка написания
 +
|-
 +
! ''Bash''
 +
! GPL 2
 +
! 41k
 +
! v
 +
! v
 +
! v
 +
! v
 +
! v
 +
! x
 +
|-
 +
! ''Dash''
 +
! BSD
 +
! 80k
 +
! x
 +
! x
 +
! x
 +
! v
 +
! x
 +
! x
 +
|-
 +
! ''Dsh''
 +
! GPL 2
 +
! 21k
 +
! N/A
 +
! N/A
 +
! v
 +
! x
 +
! N/A
 +
! x
 +
|-
 +
! ''Fish''
 +
! GPL 2
 +
! 318k
 +
! v
 +
! v
 +
! v
 +
! v
 +
! x
 +
! x
 +
|-
 +
! ''Sash''
 +
! Свободно распространяемая
 +
! 971k
 +
! v
 +
! x
 +
! v
 +
! v
 +
! x
 +
! x
 +
|-
 +
! ''Tcsh''
 +
! BSD
 +
! 326k
 +
! v
 +
! x
 +
! v
 +
! x
 +
! x
 +
! v
 +
|-
 +
! ''ZSH''
 +
! ZSH
 +
! 511k
 +
! v
 +
! v
 +
! v
 +
! x
 +
! v
 +
! v
 +
|}

Текущая версия на 16:37, 20 ноября 2008

Содержание

[править] Командные оболочки

Не забирались дальше Bash? Оболочка – не просто поле для ввода команд, так что познакомьтесь с парочкой экземпляров из коллекции Нейла Ботвика.

Разве мы не обсуждали терминалы совсем недавно? И есть ли разница между оболочкой и терминалом? Ответы – да, в обоих случаях. Оболочка – это программа, работающая в терминале. Она отображает приглашение для ввода команд и пытается выполнить то, что вы ей вводите. Возможно, разница не столь очевидна в Х-терминале, где вы регистрируетесь автоматически, но в виртуальной консоли (в том экране, который вы видите, когда Х не запущен), выводящей текстовое приглашение для входа в систему, оболочка не запускается до тех пор, пока вы не введете правильные имя пользователя и пароль.

Каждый пользователь может работать в своей оболочке, так что себе вы можете поставить «мощную» оболочку, а для своей бабули предусмотреть более понятную. Даже если вы сроду не вводили команды в окно терминала, оболочкой вы все же пользовались: многие программы на вашем компьютере фактически являются ее сценариями, так что запуская программу, вы каждый раз запускаете оболочку, даже если делаете это, нажимая на значок.

[править] Оболочки всех размеров

Рассмотренные здесь оболочки делятся на три основных категории. Оболочки общего назначения, типа Bash и Zsh, предлагают широкий выбор функций и свойств. Оболочки-легковесы, например, Dash, предлагают самые основные функции в небольшом пакете, и хороши для старых ПК или систем с ограниченными ресурсами; это также хорошие кандидаты на интерпретацию скриптов, которым не нужны «навороты» Bash со товарищи. Третья категория, оболочки особого назначения, созданы для специальных приложений или сред.

На этих страницах мы рассмотрим образчики каждой категории и сравним их пригодность для решения определенных задач.

Кроме внешних команд, каждая оболочка умеет выполнять некоторое количество собственных команд (‘builtins’), ускоряющих выполнение основных операций. Большинство рассматриваемых оболочек соответствуют основному стандарту POSIX. Различаются они предлагаемыми дополнительными функциями. Это могут быть дополнительные builtin-команды, функции типа расширенного дополнения или попросту минимальная среда POSIX в компактной и быстрой программе.

[править] Про наш тест...

Оболочки  используются  двумя  способами.  При  интерактивном  применении  самым  важным  аспектом  является  простота:  предоставляется  ли  стандартное  или  расширенное  дополнение,  хороша  ли  документация,  есть  ли  подсказка?  Другой  способ  использования  –  в  качестве  движка  для  запуска  сценариев  оболочки.  Здесь  основными требованиями будут, во-первых, совместимость со стандартами, а во-вторых – и  это менее важное требование – скорость. 

Для оболочек не существует стандартных  тестов,  да  если  бы  они  и  были,  оболочки  вроде Bash и Zsh имеют более быстрые альтернативы  функций  POSIX,  поэтому  справедливо  ли  их  сравнивать?  Мы  запустили  тестовый  скрипт  с  несколькими  циклами,  содержащими  парочку  логических  тестов,  чтобы определить относительную скорость.  Поскольку некоторые оболочки используют  нестандартный синтаксис скриптов, ранжировать их не удалось, но там, где скорость  достойна упоминания, она отмечена в индивидуальных обзорах. 

Тестирование  производилось  на  ПК Athlon64  3200  с  1  ГБ  ОЗУ,  и  на  1-ГГц  G4 iBook  с  768MB,  на  обоих  был  установлен Gentoo Testing.

[править] Bash

Вначале был Bourne Shell (sh), его написал Стивен Борн [Steven Bourne] для Bell Labs Research Unix. Bash – это Bourne Again Shell (Снова Оболочка Борна), ужасный каламбур, который, к счастью, редко используется. Почти все современные дистрибутивы Linux используют Bash в качестве оболочки по умолчанию, и вы, вероятно, знакомы как минимум с его основами; это превращает Bash в фактический стандарт, с которым сравниваются все остальные. Поэтому имеет смысл для начала рассмотреть Bash, а затем перейти к другим оболочкам, изучить, чем они отличаются, и выделить их достоинства и недостатки. Итак, что же дает нам Bash, и почему Bash столь популярен у разработчиков дистрибутивов?

Дело не в малом размере Bash, и не в скорости. По размеру Bash больше всех рассмотренных здесь оболочек, кроме одной: Sash, которая не использует библиотек и имеет несколько дополнительных встроенных команд. Bash также и не самая быстрая оболочка, которую вы встретите (если, конечно, не отшвырнете журнал, проигнорировав остаток нашего Сравнения и поклявшись всю оставшуюся жизнь пользоваться только Bash). Однако большинству пользователей на это наплевать, ибо подлинно важна его гибкость. Bash обладает некоторыми функциями, превосходящими стандарт POSIX, хотя при желании можно добиться от него и POSIX-поведения. Если запустить Bash командой sh, с опцией командной строки --posix или при установленной переменной окружения POSIXLY_CORRECT, Bash будет работать как стандартная оболочка POSIX. При запуске через sh, Bash по возможности пытается работать как исходная оболочка Борна, но лишь в тех ситуациях, когда это не вступит в конфликт со стандартом POSIX.

Встроенные команды позволяют Bash выполнять некоторые операции быстрее, ценой чуть более долгого времени загрузки, но если вы запускаете скрипт Bash из оболочки Bash, об этом и говорить не стоит. Эти команды плюс дополнительные логические конструкции означают, что скрипты, написанные для Bash, могут работать быстро. Например, типичный способ запустить цикл с установленным количеством повторений – for i in $(seq 1 100), при этом внешняя команда seq генерирует список повторений. С помощью Bash вы можете написать for i in {1..100}, при этом не вызывается никакая внешняя программа и все выполняется быстрее.

[править] RTFM

Набрав help, вы получите список всех встроенных команд. Добавив имя команды, вы получите информацию об ее использовании. Это устраняет необходимость лазить по man-странице Bash, содержащей явный переизбыток информации. Тут Bash может поучиться у Zsh, где документация распределена по нескольким страницам. Документация, представленная в формате info, удобнее для обработки, при условии, что вы умеете пользоваться info, но многим из нас это недоступно. Пользователи KDE могут легко просмотреть документацию, введя ‘info:Bash’ в Konqueror.

Как и большинство оболочек, Bash включает функцию стандартного tab-дополнения: нажмите Tab на первом слове, и он попытается дополнить его до имени команды, нажмите Tab на следующем слове, и он попробует дополнить его до имени файла или пути. Однако в плане программируемого дополнения Bash может пойти намного дальше. Как только вы установите и добавите в свой профиль дополнительный пакет из http://www.caliban.org/Bash/index.shtml#completion , функция tab-дополнения будет завершать переменные в соответствии с командой, за которой они следуют. Например, введите ssh, а потом несколько первых букв имени хоста в вашей сети, и Bash дополнит его на основе содержимого вашего файла SSH known_hosts. Программируемое дополнение также можно использовать в качестве командной опции; введите somecommand --TAB – и увидите список опций, доступных в этой программе. Дополнение работает и с неопциональными аргументами для программ. Все это, конечно, чудесно, но не забудьте, что у программ должна быть специальная поддержка: обычно это файл в /usr/share/Bash-completion. Некоторые из них прилагаются, а некоторые доступны онлайн.

Легко понять, почему разработчики дистрибутивов так любят Bash. Во внутренней работе системы многое (например, все скрипты сервисов, запускаемых при включении и выключении) требует эффективного использования сценариев оболочки, и удобно программируемый Bash обречен на сильную любовь – да такую сильную, что некоторым дистрибутивам эта оболочка требуется в обязательном порядке, и без нее они работать не будут. Впрочем, вы не обязаны выбирать себе Bash в качестве интерактивной оболочки. Конечно, в нем широкий спектр функций и налицо удобство использования, но если вы просто получили Bash вместе с дистрибутивом и не пробовали ничего другого – читайте дальше и, возможно, найдете что-нибудь получше!

[править] Fish

Работа с оболочкой слегка пугает начинающих пользователей. Поэтому Fish, Friendly Interactive Shell (Дружелюбная Интерактивная Оболочка), даже предлагает привыкшим к графическому пользовательскому интерфейсу ввести help после входа. Эта команда при первом использовании попросит вас выбрать браузер, а потом будет открывать в нем документацию в формате HTML. Подробная и доступная информация о командах делает их поиск значительно проще, чем в man-страницах оболочек, подобных Bash или Zsh. Если Fish не сможет подключиться к X-серверу, для показа справки будет задействован links.

Документация – не единственная дружелюбная функция в Fish. Здесь также используется подсветка синтаксиса: когда вы начинаете вводить команду, буквы показаны красным, и меняют цвет на зеленый при правильном завершении имени команды, а имена действующих директорий подчеркиваются. По ощущениям (без измерений), Tab-дополнение вроде бы быстрее, чем в Bash, и почти не уступает программируемому дополнению Bash, но не столь расширяемо; оно работает над командными опциями, так же, как и над самими командами. Предыстория команд тоже более интуитивна: просто введите начало команды и нажмите стрелку «вверх», чтобы просмотреть предыдущие вызовы – это проще, чем запомнить Ctrl-R и иже с ним.

Fish использует специфические конструкции скриптов, которые проще для понимания начинающих пользователей, но несовместимы с другими оболочками. Это не фатальный недостаток, потому что Fish предназначен для интерактивного использования, хотя эти конструкции также могут использоваться в командной строке. В защиту Fish можно сказать, что он ориентируется на тех, кого вряд ли интересуют подобные функции, и достаточно гуманен, чтобы подробно объяснить, почему первая форма не работает, и привести пример корректного (для Fish) формата. Да, Fish избавился от некоторых загадочных приемов в стиле Unix, но вам все же придется держать под рукой Bash, чтобы запускать системные скрипты.

[править] Tcsh

На первый взгляд, Tcsh весьма похож на Bash и Zsh, ибо включает дополнение команд и имен файлов, предысторию команд с функцией поиска и проверку написания – но для своих скриптов он использует совершенно другой синтаксис. Поэтому, хотя Tcsh и взаимозаменяем с другими оболочками по части интерактивного использования, вам все же понадобится Bash для запуска скриптов, не написанных специально для Tcsh.

Как и Bash с Zsh, Tcsh использует по умолчанию привязку клавиш в стиле Emacs, но при желании ее можно переключить на vi (фанаты vi, не принимайте, пожалуйста, это за восхваление Emacs, и не развязывайте очередную религиозную войну редакторов). Tcsh не предлагает программируемого или опционального дополнения, как Zsh или Bash, однако у него есть функция проверки написания команд, директорий и переменных среды. Вилфредо Санчес [Wilfredo Sanchez], бывший ведущий инженер Mac OS X, работал над Tcsh в начале 1990-х в MIT, и неудивительно, что ранние версии Mac OS X поставлялись с Tcsh в качестве оболочки по умолчанию; но потом в Panther-версии ОС его заменили на Bash.

Употребление псевдонимов-алиасов здесь более гибкое, чем в других оболочках, где не дозволяются никакие подстановки. Tcsh с подстановками справляется, поэтому аргументы, переданные псевдониму, можно послать «по цепочке» реальной команде, создавая своего рода мини-функции. Такое вряд ли понравится пользователям Bash и Zsh: к этому надо попривыкнуть, чтобы осознать, насколько оно полезно.

Основное различие между Tcsh и другими оболочками – синтаксис языка сценариев. Как и подразумевается в названии, он напоминает язык С, и хотя циклы foreach и while действуют схоже, синтаксис совершенно другой, и из-за него скрипты Tcsh несовместимы с другими оболочками. В нем также используются конструкции, которые вы не найдете в традиционных скриптах; среди них – безусловно полезный switch и сомнительный goto.

[править] Zsh

При первом запуске Zsh выводится меню настройки, чтобы вы смогли отрегулировать многочисленные мощные и гибкие функции. Все меню содержат массу информации по каждой опции и предлагают разумные значения по умолчанию, поэтому вы можете просто принять их и, если пожелаете, запустить программу настройки позже, когда вам понадобится вся функциональность. Zsh снабжен всеми функциями, которые только можно придумать, и даже сверх того – например, проверкой написания. Zsh и Bash предлагают сходный функционал. Обе имеют программируемое дополнение (хотя у Zsh оно появилось раньше), встроенные команды и функции для создания скриптов. У Zsh также в запасе есть несколько собственных хитростей, например, расширенная подстановка имени файла, которая превращает команду поиска find почти что в ненужное излишество. Включение в путь ** означает соответствие любому символу, включая разделитель-слэш, поэтому **/*.jpg касается всех файлов *.jpg в текущей директории и в любых поддиректориях. Мало того, сюда также включаются права доступа к файлу, владелец, тип или отметка времени – большинство опций, предусмотренных find. Например, можно использовать ls -l /**/bin/*(s) для вывода списка всех setuid-файлов в /bin, /usr/bin и /usr/local/bin. Где вы, наши друзья по старым добрым временам Amiga – при наборе имени директории в командной строке Zsh переключается на эту директорию. Многие из нас годами приучались ставить cd перед именем директории; теперь можно поставить Zsh и вернуться к былой лени.

Программируемое дополнение в Zsh аналогично той же функции в Bash, описанной выше. Можно дополнить аргументы команды, нажав Tab, или включить дополнение имен пользователей или хостов, набрав ssh. Поскольку Zsh – программируемая оболочка, ее можно расширять сколько душе угодно. Обычный пример – ограничение дополнения имен файлов только теми расширениями, которые способна обработать вводимая команда: так, команда mplayer TAB выведет список всех MPG- и AVI-файлов в текущей директории, подобным же образом обрабатываются и другие формы, с которыми она работает, например, dvd:// и tv://; при этом текстовые документы в той же директории игнорируются.

Без сомнения, Zsh – невероятно мощная оболочка. Выполнение скриптов в основном быстрее, чем в Bash – по большей части примерно на 20% – однако Zsh разработан для интерактивного пользования. Превосходит ли он Bash? Почти наверняка, особенно если учесть расширенную подстановку имени файла и более развитую опцию дополнения.

[править] Dash

Если вы ищете небольшую и быструю оболочку, то у Dash есть шансы. Dash происходит от оболочки FreeBSD под названием Ash, и, имея скромный размер 99K, составляет всего одну седьмую от Bash. В нем нет тех наворотов, которыми богат Bash, но они не всегда и нужны. Как интерактивная оболочка, Dash скудноват – здесь нет даже базового tab-дополнения; но он превосходно подходит для выполнения сценариев оболочки POSIX.

Dash почти совместим с POSIX, но кое-какие несовместимости в нем, похоже, имеются, поэтому стоит прочитать документацию и уточнить, какие именно. Однако он сработается с большинством скриптов, использующих /bin/sh (любой скрипт, обращающийся к /bin/ sh, не должен требовать ничего сверх минимума, гарантированного оболочкой POSIX).

Маленький размер также помогает проворности Dash. Понятно, что он способствует ускорению и загрузки, и работы скриптов; по сравнению с Bash наш тестовый скрипт запустился вдвое быстрее. «Махнув» Bash на Dash в символьной ссылке /bin/sh, вы значительно сократите время загрузки, в течение которой обычно запускается множество сценариев оболочки. Однако, прежде чем это сделать, убедитесь, что у вас не возникнет проблем, способных помешать загрузке. Хороший способ обезопасить себя от внезапных «ударов под дых» – предварительно проверить все init-скрипты вручную.

[править] Dsh

Dsh – это распределенная оболочка (хотя вообще-то ее название означает Dancer’s Shell), выполняющая команды сразу на нескольких удаленных машинах. Некоторые рассмотренные здесь оболочки подходят для интерактивного пользования и создания скриптов; а эта – совсем не интерактивна, но зато весьма полезна, когда надо запустить серию команд на группе компьютеров. Альтернативой является нечто вроде

for host in node1 node2 node3; do ssh 
    $host “my commands”; done

С Dsh, вы заносите имена хостов в файл machine.list, а затем просто набираете Dsh -a my commands. Файл machine.list используется опцией -a (или --all), но вы можете поместить любое количество списков имен хостов в групповой директории Dsh, и, передав имя списка с помощью опции -g (--group), запустить команду на всех этих машинах.

Опции включают: запуск команд на удаленных хостах последовательно или параллельно, предварение каждой строки вывода именем хоста (что особенно полезно при параллельном запуске команд); и передача команд через стандартный ввод. Команды можно запускать с помощью ssh или rsh, но для должного использования ssh вам понадобится аутентификация по ключу, а для выполнения команды от имени другого пользователя ее нужно будет предварить названием соответствующей учетной записи.

Это – действительно полезный инструмент при работе с группой машин. В нем не хватает только возможности одновременного копирования файлов на несколько компьютеров. Чтобы вытащить файлы с вашего компьютера, вы можете запустить команду scp на других машинах, но это предполагает, что вы предоставите всем им SSH-доступ к вашей рабочей станции – маловероятный сценарий, в особенности если компьютеры-получатели являются общедоступными серверами. Добавка dcp может превратить Dsh в отличный инструмент администрирования.

[править] Sash

Sash – это просто самая крупная из рассмотренных здесь оболочек, и не без причины. Ее название – сокращение от Stand Alone Shell (Оболочка-одиночка), и в ней содержится несколько встроенных команд, которых нет ни в одной другой оболочке. Когда мы скажем, что эти команды – mount, ls, cp, tar и gzip, вы поймете, для чего нужен Sash. Это – оболочка для восстановления системы, которая работает даже тогда, когда большая часть вашей файловой системы утрачена. Если /boot у вас находится на отдельном разделе, и вы не монтируете его при загрузке, или монтируете в режиме только для чтения, поместите на него копию Sash, и выдержите даже rm -fr /*. Используя встроенные команды Sash, вы сможете восстановить свои резервные копии (у вас ведь есть резервные копии, правда?) и запустить работу снова, не теряя времени. После отказа системы восстановление возможно даже при отсутствии важных библиотек: все необходимое – это ядро и Sash.

По причине ограничений на размер, команды, встроенные в Sash, являются урезанными версиями своих аналогов, поэтому Sash предоставляет доступ и к тем, и к другим. Для запуска стандартной команды ls вводите ls, а -ls вызовет встроенную. Стандартная команда недоступна? Сделайте псевдоним ls, разворачивающийся в -ls. Если вас угораздило полностью удалить /bin, используйте aliasall, и все команды будут выбираться из встроенных. Того же можно добиться, запустив Sash с опцией -a. Команда help выведет список встроенных команд и информацию по использованию любой из них.

Sash также умеет запускать скрипты с помощью опции -f, а значит, вы можете автоматизировать даже процесс восстановления. Если безобразия у вас творятся часто – настолько, чтобы вам захотелось автоматизировать использование Sash для этих целей – возможно, стоит пересмотреть и изменить свой подход к работе. Sash вряд ли подходит на роль стандартной интерактивной оболочки, но он из тех приложений, наличие которых под рукой приведет вас в состояние дикой радости, если с вами стряслось то, что бывает только у других.

[править] Вердикт

Zsh 9/10

Группа программ, представленных в данном Сравнении, довольно необычна, потому что в ней есть программа, уже установленная практически в каждом дистрибутиве.

Вышло так, что Zsh победил фактически по всем параметрам: он быстр, достаточно компактен, имеет превосходную документацию и лучшее дополнение, чем любая из представленных здесь оболочек. Если вы прежде не использовали tab-дополнение в оболочке, попробуйте: время здорово экономится. При интерактивном использовании Zsh непревзойденна, благодаря своим функциям и дружелюбию ко всем, кто познакомился с документацией. Нужны еще аргументы? Что ж, автор уже сделал Zsh оболочкой по умолчанию вместо Bash.


Мы не говорим, что Bash – плохая оболочка, отнюдь, просто Zsh все делает чуть лучше. Bash по-прежнему остается эталоном, по которому оценивают остальных, возможно, именно поэтому он столь распространен, и действительно устанавливает высокую планку. Если вы пишете скрипты оболочки посложнее, чем простой список команд, стоит воспользоваться именно Bash, и именно поэтому дистрибутивы выбирают его оболочкой по умолчанию.

Tcsh в известной мере является анахронизмом. Конечно, его ни в коем случае нельзя назвать плохой оболочкой, но нестандартный синтаксис несколько уменьшает ценность Tcsh для написания сценариев, учитывая еще и тот факт, что это ничем не компенсируется. Синтаксис Tcsh, возможно, упрощает создание скриптов, но поскольку запускать их можно будет только на своей машине, вряд ли это по-настоящему полезно.

Dash примечателен небольшим размером и быстротой, но более, собственно, ничем. Он пригодится тем, кому надо поторопить медленное оборудование. Dsh – не похож на остальные, но может стать мечтой сетевого администратора – если кроме выполнения команд даст возможность распределенного копирования файлов.

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

Sash заслуживает особого упоминания, несмотря на низкий рейтинг. Он заработал 5 из 10 только потому, что в сравнении с остальными участниками предлагает слишком мало, за исключением одного: ему вообще ничего не надо, чтобы запуститься. Никому и в голову не придет использовать его в качестве стандартной оболочки, но Sash надо держать в надежном месте; возможно, когда-нибудь он станет вашей палочкой-выручалочкой.

[править] Краткая история оболочек

В начале был sh, известный также, как Оболочка Томпсона (Thompson Shell) – оболочка, появившаяся вместе с первым Unix в 1971 г. Он предназначался только для выполнения команд, не для скриптов. Шесть лет спустя его вытеснила Оболочка Борна (Bourne Shell), которую тоже назвали sh. Обе оболочки вышли из Bell Laboratories. В Bourne Shell появились скрипты и прочие инновации, например, командная подстановка, использующая обратный апостроф

(VAR=`command --arg`).

Оболочка Корна (Korn Shell, ksh) также была разработана в Bell Labs (может, AT&T – их владелец – на самом деле корпорация оболочек?). Она была совместима с Bourne Shell, и в ней добавилось еще больше функций, включая расширенные скрипты и такие вещи, как предыстория (журнал) команд. Если вы когда-нибудь работали с оболочкой без журнала команд – как изначальная оболочка Amiga, например – вы поймете, какой это был гигантский скачок.

Bash основана на Bourne Shell, а на создание Zsh вдохновила Korn Shell, но благодаря стандарту POSIX оба отлично сотрудничают.

[править] Таблица функций

Лицензия Размер исполняемого файла Tab-дополнение Раширенное дополнение Детализация Онлайн-справка POSIX-совместимость Проверка написания
Bash GPL 2 41k v v v v v x
Dash BSD 80k x x x v x x
Dsh GPL 2 21k N/A N/A v x N/A x
Fish GPL 2 318k v v v v x x
Sash Свободно распространяемая 971k v x v v x x
Tcsh BSD 326k v x v x x v
ZSH ZSH 511k v v v x v v
Персональные инструменты
купить
подписаться
Яндекс.Метрика