Два основных семейства оболочек linux выберете 2
Как упоминалось выше, система Linux является многозадачной и многопользовательской операционной системой. Многозадачность является весьма полезной, и когда вы это для себя поймете, вы будете это постоянно использовать. Довольно скоро вы научитесь запускать фоновые программы, переключаться между сеансами, а также стыковать программы для того, чтобы добиваться выполнения довольно сложных действий одной командой.
Многие возможности из тех, которые будут описаны в этом разделе, предоставляются самой командной оболочкой. Важно не путать систему Linux (операционную систему) с одной из командных оболочек. Командная оболочка является всего лишь интерфейсом к операционной системе и предоставляет дополнительные возможности к тем, что предоставляет сама система Linux.
Командная оболочка является не только интерпретатором команд, которые вводятся в интерактивном режиме, но также и мощным языком программирования. С помощью командных оболочек можно выполнять скрипты командных оболочек (shell scripts). В скриптах несколько команд оболочки объединяются в один пакет («batch»). Скрипты командных оболочек системы Linux имеют аналогию с командными файлами («batch files») системы MS-DOS. Скрипты являются очень мощным средством, с помощью которого можно автоматизировать и сделать более удобным использование системы Linux. Более подробная информация дана в разд. 3.14.1.
В системах Linux имеется несколько типов командных оболочек. Два основных типа называются «Bourne shell» и «C shell». Оболочка Bourne shell использует такой же синтаксис команд, какой использовался в самых первых системах UNIX, таких как System III. Исполняемым файлом оболочки Bourne shell в большинстве версий систем Linux является /bin/sh (где sh является сокращением от «shell» — оболочка). Оболочка C shell использует иной синтаксис, чем-то напоминающий язык программирования C. В большинстве систем Linux исполняемым файлом этой оболочки будет /bin/csh .
В системе Linux имеются несколько вариантов указанных командных оболочек. Наиболее употребительным является вариант Bourne Again Shell или «Bash» (файл /bin/bash ), а также «Tcsh» (файл /bin/tcsh ). Оболочка bash является модификацией оболочки Bourne shell, в которую включено много развитых функций из оболочки C shell. Поскольку синтаксис оболочки bash содержит в качестве подмножества синтаксис оболочки Bourne shell, скрипты, написанные для стандартной оболочки Bourne shell, будут работать и с ее модификацией bash . Если вы предпочитаете использовать синтаксис, основанный на языке программирования C, то можно воспользоваться оболочкой tcsh , которая является расширенной версией исходной оболочки C shell.
Выбор типа оболочки является вопросом вкуса. Некоторая разница заключается в том, что синтаксис оболочек, основанных на языке C, более структурирован. Для обычных команд, таких как cp или ls , тип используемой командной оболочки не имеет значения — синтаксис будет одинаковым. Только когда вы начнете самостоятельно писать скрипты или использовать некоторые развитые возможности командных оболочек, разница между ними начнет играть роль.
В дальнейшем, при обсуждении свойств различных командных оболочек, мы отметим разницу между упомянутыми оболочками. Однако, с учетом тех целей, которые ставит данная книга, большинство этих различий минимально. Если вы действительно интересуетесь различиями между командными оболочками, вам следует почитать экранную документацию к командам bash и tcsh .
Источник
Какой Linux Shell лучше? Сравнение 5 общих оболочек
Счастливы использовать оболочку bash в Linux? Или вы бы предпочли попробовать альтернативу? На выбор есть tsch, fish, KornShell и Z Shell. Но какой из этих популярных оболочек Linux лучше?
Что такое оболочка Linux?
Обычно, когда вы пишете приложение, оно выполняется на языке высокого уровня, понятном людям. Примерами этого являются C #, Java, C ++ и т. Д. Хотите верьте, хотите нет, но ваш компьютер видит все как 1 в 0 или, как обычно известно, двоичный или машинный код.
Затем компилятор переведет язык высокого уровня в двоичный файл, такой как исполняемый файл. Этот двоичный файл — то, что вы выполняете, чтобы запустить указанное приложение.
Теперь, это очень высокоуровневое представление о том, что происходит; просто помните, ваш компьютер нуждается в слое перевода. Это находится между тем, что вы говорите, и тем, как он может это понять.
Оболочка — это то, что известно как переводчик. Подобно компилятору, интерпретатор переводит человеческий код в машинный код. Одно из отличий заключается в том, что переводчик делает это по одному заявлению за раз. Тем временем компилятор сканирует всю программу и переводит все это в машинный код.
Таким образом, оболочка является интерфейсом для взаимодействия с операционной системой (ОС). Когда вы вводите команды в оболочку, она отвечает за интерпретацию этих команд и реализацию магии. Операции, такие как копирование файлов, конвейерная обработка, перечисление файлов, находятся в пределах компетенции оболочки.
Доступны несколько оболочек Linux. Чтобы узнать все оболочки, доступные в вашей системе, откройте терминал и введите:
кошка / etc / shells
Чтобы узнать, какую оболочку вы используете в данный момент, наберите:
Но вы используете лучшую оболочку Linux? Давайте посмотрим на то, что доступно.
1. Баш
Это на милю самая популярная оболочка среди пользователей Linux. Трудно даже думать об оболочках, если Bourne-Again Shell (bash) не является частью уравнения. Многие дистрибутивы Linux поставляются с bash в качестве оболочки по умолчанию, потому что bash является оболочкой GNU по умолчанию. Выпущенный в 1989 году, он также может похвастаться несколькими десятилетиями здорового развития.
Предшественником Bash является The Bourne Shell (sh), которая является одной из оригинальных оболочек Unix. Одной из привлекательных особенностей для программистов sh было то, что они могли напрямую переносить свои скрипты в bash без изменений. Bash также предлагает несколько улучшений своему предшественнику:
- Завершение команды
- История команд
Часто онлайн документация предполагает, что вы используете bash. Однако, это не без его недостатков — как может засвидетельствовать любой, кто когда-либо писал сценарий bash! Дело не в том, что вы не можете что-то сделать, а в том, что читать и писать не всегда особенно элегантно.
2. KornShell
Обычно известный как ksh, KornShell — это популярная альтернативная оболочка Linux, созданная Bell Labs в 1980-х годах. Существует не так много различий между bash и ksh, но у каждого есть незначительные преимущества перед другим. Ksh, например, имеет команду cd old new. Если вы были в каталоге / Downloads / foo / bar / one / foobar и вам нужно было перейти в / Downloads / foo / bar / two / foobar, вам просто нужно ввести:
Ветераны ksh будут пропагандировать его превосходство, упоминая его преимущества сценариев. Это включает:
- Лучший синтаксис цикла
- Естественные способы повторения команд
- Ассоциативные массивы
В отличие от bash, сложно найти помощь для ksh в Интернете. Если вы хотите попробовать ksh, введите:
sudo apt установить ksh ksh
3. Tcsh
Tcsh может проследить свои корни еще до появления Unix. Это улучшенная версия оболочки C (csh) и функций:
- Программируемое завершение командной строки
- Редактирование командной строки
- Добавление аргументов в псевдонимы
- Простой доступ к истории команд
Вы можете запустить любую команду, набрав! N, заменив n на соответствующий номер в отображаемой истории. Завершение вкладки истории в tcsh работает, набрав:
Это распространяется на последнюю команду, которая началась с буквы «а». Для сравнения, в bash вам нужно будет набрать! A: p, чтобы сначала увидеть команду, а затем !! выполнить это.
Чтобы попробовать tcsh, наберите:
sudo apt установить tcsh tcsh
Tcsh является оболочкой по умолчанию для систем на базе BSD, таких как FreeBSD. Большим преимуществом tcsh является язык сценариев, который пригодится всем, кто занимается программированием на C. Это делает tcsh полезным для создания прототипов небольших программ на C, не путаясь с такими вещами, как, например, какие скобки вы используете. Эта проблема обычно возникает, если вы постоянно переключаетесь между программированием на C и сценариями оболочки.
4. Рыба
Среди всей серьезности Linux, команда из fish привнесла чувство юмора в свой проект. На их веб-сайте заголовок «насмешка» гласит «Наконец, оболочка командной строки для 90-х», хотя fish («дружественная интерактивная оболочка») была разработана в 2005 году. Помимо рекламируемого «Славного цвета VGA», есть некоторые улучшения по сравнению с другие снаряды:
Эта функция добавляет синтаксис со страницы руководства недавно установленного программного обеспечения к вашим предложениям по автозаполнению. Если вы хотите поближе познакомиться с командной строкой, то отличным местом для начала может стать fish.
Чтобы узнать, о чем рыба, введите:
судо установить рыбу
5. Z Shell
Многие считают, что это оставляет лучшую оболочку для последнего, что было бы совершенно понятно. Zsh имеет сходство с bash и ksh и включает в себя многие функции, найденные в них, а также tcsh. Особенности Zsh:
- Навигационный список автозаполнения
- Улучшенная орфографическая коррекция
- Завершение командной строки
- История делится между терминалами
- Globbing (подстановочные знаки для имен файлов)
Globbing в Zsh очень полезен. Typing:
VIM / U / L / B / A
Zsh может занять некоторое время для настройки при первом использовании, если вы не используете конфигурацию по умолчанию. Чтобы попробовать, введите:
sudo apt установить zsh zsh
Какой Linux Shell лучше для меня?
Тот факт, что эти опции доступны, просто великолепен. Каждый из них дает представление о вычислительной истории, где программисты решили, что они хотят сделать все по-своему.
Существенные различия между этими оболочками можно найти в синтаксисе сценариев. Каждая оболочка имеет определенный набор нюансов которые отделяют их друг от друга. В настоящее время Bash доминирует с точки зрения доли рынка, что значительно упрощает поиск помощи. Bash просто лучший универсал, удовлетворяющий потребности всех, кроме самых продвинутых пользователей.
Когда вы остановитесь на оболочке Linux, убедитесь, что вы знакомы с основами сценариев оболочки.
Источник
О разных командных оболочках Linux и Unix
Наверняка почти все читатели Хабра знают оболочки sh и bash. Так же большинство из нас что-то слышали про zsh и tcsh. Однако на этом список существующих оболочек не заканчивается. Условно можно разделить их на три группы:
- Клоны Bourne shell (bash, zsh)
- C shell (csh, tcsh)
- Базирующиеся на популярных языках программирования(psh, ipython, scsh)
- Экзотические, специфические и все остальные
О наиболее интересных из них и пойдет речь.
Целью написания статьи не был обзор или классификация всех существующих командных оболочек. Просто хочу рассказать о некоторых интересных продуктах в этой области, расширить кругозор читателя. Буду рад. если этим сподвигну кого-то к более детальному изучению темы или даже к тому, чтоб перейти на другой шел.
Сначала коротко о том, что же это такое. Командная оболочка или командный интерпретатор- это приложение предоставляющее пользователю интерфейс командной строки в которой тот либо вводит команды по отдельности, либо запускает скрипты состоящие из списка команд. Устно и в неофициальных текстах часто называется «шел», от английского shell — оболочка.
Наибольшее распространение получили POSIX-совместимые оболочки, ведущие родословную от Bourne shell (шелл Борна), поэтому с него и начнем
Bourne shell и его клоны
Bourne shell, исполняемый файл: sh. Командная оболочка названная в честь своего создателя Стивена Борна. Большая часть операторов была заимствована им из языка Алгол 68. Вышла в 7-м издании операционной системы UNIX, где была оболочкой по умолчанию. До сих пор подавляющее большинство Unix-подобных систем имеют /bin/sh — символическую или жесткую ссылку на sh-совместимую оболочку.
Bourne again shell, исполняемый файл: bash. Название можно перевести, как «Возрождённый шел Борна». Скорее всего самая популярная оболочка на сегодняшний день. Де-факто стандарт для Linux. Не буду на ней останавливаться, т.к. в интернете много хороших статей про bash. Например вот и вот.
Z shell, исполняемый файл: zsh. Свободная современная sh-совместимая оболочка. Имеет ряд преимуществ перед bash касающихся в основном работы в интерактивном режиме. О ней на Хабре писали тут и тут
Кроме того существует довольно много оболочек попадающих в эту группу: Korn shell (ksh) и Almquist shell (ash) etc но не будем подробно на них останавливаться.
C shell
C shell, исполняемый файл: csh Командная оболочка разработанная автором vi Биллом Джоем. За основу для скриптового языка csh был взят, как понятно из названия, язык C. Т.к. на тот момент, в 1978 г., это был наиболее популярный язык программирования среди разработчиков и пользователей BSD UNIX. В настоящий момент более популярна свободная реализация csh — tcsh.
TENEX C Shell, исполняемый файл: tcsh. Именно в tcsh когда-то впервые появилось автодополнение. Является оболочкой по умолчанию в FreeBSD. Подробнее о ней почитать можно здесь.
Для того чтоб наглядно показать разницу в синтаксисе приведу несколько примеров скриптов делающих одно и то же для csh и sh-совместимого командного интерпретатора.
Множественное ветвление (Переключатель, Swich/case):
Цикл вычисляющий 10 первых степеней двойки:
Однако список фичь поддерживаемых свежими версиями bash, zsh и tcsh очень похож и выбор конкретной оболочки по большей части дело вкуса. С менее распространенными оболочками дело обстоит иначе. Тут различия существеннее.
Командные оболочки, базирующиеся на популярных языках программирования.
Perl Shell, исполняемый файл: psh. Оболочка сочетающая в себе функции вышеупомянутых оболочек и мощь языка Perl. Т.к. psh написана на perl она может запускаться даже на Windows. Несколько примеров использования psh:
Scsh, исполняемый файл scsh. Командный интерпретатор с открытым кодом использующий в качестве скриптового языка Scheme 48. Не поддерживает стандартные для других оболочек функции (история команд, редактирование текста в командной строке, дополнение путей/команд). Рекомендуется написания скриптов, но не для интерактивной работы. Может прийтись по вкусу любителям функционального программирования. Ниже приведен пример скрипта, который выводит имена всех исполняемых файлов находящихся в каталогах из переменной окружения PATH
IPython. Это интерактивная оболочка для языка программирования Python, имеющая ряд дополнительных функций. IPython имеет специальный профиль для работы в качестве системной командной оболочки. Способ запуска этого режима зависит, как я понял, от версии, но на моей машине это выглядит так:
ipython3 —profile=pysh
О IPython уже написано довольно много в том числе и на русском языке (ссылки в конце статьи). Постараюсь перечислить его основные фичи с точки зрения применения его как командной оболочки:
- Кросплатформенность. Есть даже версия под Windows
- Python версий 2.x или 3.x в качестве скриптового языка, расширенные возможности интроспекции
- Автодополнение кода Python а так же имен файлов и системных команд.
- История команд и макросы на ее основе
- Механизм ускоряющий навигацию по каталогам, закладки и многое другое
Как видите, по своим интерактивным возможностям IPython как минимум не уступает bash. Что же касается скриптов, то IPython будет удобен тем, кто знает python лучше чем bash. По сути скрипты на IPython будут отличаться от чистого питона только упрошенным вызовом системных команд. Приведу несколько примеров интеграции python и системных команд:
Остальные
Конечно это не полный список даже популярных оболочек. Помимо вышеперечисленных категорий существуют ещё использующие собственный синтаксис, не совместимый с sh и не копирующий существующие ЯП . Примером может служить friendly interactive shell (fish). Но на последок хотел бы рассказать не о ней, а более специфической sleepshell.
Sleep Dummy Shell, исполняемый файл: sleepshell. Строго говоря командным процессором sleepshell назвать нельзя, т.к. он не умеет обрабатывать команды. И вообще не умеет ничего, кроме как периодически записывать в стандартный вывод звёздочки «*». Однако используется она именно в качестве командной оболочки и вот для чего: Допустим мы хотим предоставить кому-то возможность делать тоннели ssh через наш сервер под управлением Linux или Unix. Подробнее про ssh-туннелирование читаем тут. Но нам не нужно при этом, что этот кто-то получил доступ к командной строке и файловой системе нашего сервера. Для такого случая и предназначена sleepshell. Создаем на сервере аккаунт в качестве шела для него устанавливаем sleepshell. Владелец аккаунта сможет подключаться и пробрасывать порты, но не сможет выполнять команды.
На этом всё. Надеюсь, что было интересно. Буду рад любым замечаниям и советам по тексту статьи.
Источник