Основные командные оболочки linux выберете 2

В чем разница между Bash, Zsh и другими командными оболочками для Linux?

Оригинал: What’s the Difference Between Bash, Zsh, and Other Linux Shells?
Автор: Yatri Trivedi
Дата публикации: 22 июля 2011 г.
Перевод: А.Панин
Дата перевода: 10 ноября 2016 г.

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

Каково предназначение командных оболочек?

Интерфейс командной строки системы является поистине любопытным. Изначально рассматриваемый как интерфейс для самых опытных пользователей, он прошел огромный путь, в некоторой степени потеряв свою актуальность. Хотя вы все еще можете считать его очень удобным и постоянно работать с ним, на сегодняшний день он используется главным образом энтузиастами, у которых есть время на его доскональное изучение. При этом этот интерфейс будет иметь отличия в каждой из существующих операционных систем, так как каждая из этих систем по своему интерпретирует команды. На сегодняшний день это утверждение актуально для таких операционных систем, как Linux, OS X и Windows, но ранее оно было актуально для систем большинства компьютеров.

(Иллюстрация от пользователя blakespot )

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

Почему существует так много командных оболочек?

Наиболее известным предком современных командных оболочек является командная оболочка Bourne Shell, известная, как «sh» и названная в честь ее создателя Стивена Борна (Stephen Bourne) из компании AT&T. Она стала стандартным интерпретатором команд в Unix благодаря поддержке механизма подстановки команд, программных каналов, переменных, условных инструкций, циклов, а также других возможностей. В то время создание сценариев командной оболочки стало поистине популярным занятием, чего, по мнению многих людей, не скажешь сегодня. При этом она не предоставляла пользователям специальных механизмов тонкой настройки в соответствии с их потребностями, таких, как псевдонимы и автозавершение команд, а также функции (хотя последний механизм был добавлен спустя некоторое время).

Командная оболочка C shell («csh») была разработана Билом Джоем из UCB и значительно изменила подход к использованию интерфейса командной строки системы. В нее было добавлено множество интерактивных элементов, которые могли применяться пользователями для управления их системами, таких, как псевдонимы команд (сокращения длинных команд), функции управления задачами, история команд и других. Она была смоделирована по образу и подобию языка программирования C, что было интересной идеей, так как для разработки самой операционной системы Unix также использовался язык C. Разумеется, для того, чтобы продуктивно работать с ней, пользователям Bourne Shell нужно было учить язык C, так как команды соответствовали его стандартным функциям. Кроме того, данная командная оболочка содержала поистине огромное количество ошибок, которые приходилось исправлять как пользователям, так и разработчикам в течение длительного промежутка времени. В конце концов пользователи начали использовать командную оболочку Bourne Shell для исполнения сценариев ввиду того, что она лучше обрабатывала неинтерактивные команды, а командую оболочку C shell — для выполнения всех остальных задач.

Со временем многие люди внесли свой вклад в процесс исправления ошибок и разработки новых функций C shell в рамках нового проекта «tcsh». Но проблема заключалась в том, что на компьютерах, поставляющихся с Unix, все также использовалась командная оболочка «csh» с «нестандартными» возможностями, что приводило к еще большей фрагментации интерфейсов командной строки различных компьютеров. Позднее Дэвид Корн из компании AT&T попытался исправить сложившуюся ситуацию, начав работу над командной оболочкой Korn Shell («ksh»), использующей в качестве базиса язык командной оболочки Bourne Shell с добавлением новых возможностей, к которым привыкло большинство пользователей. К сожалению, данная командная оболочка не была свободно распространяемой.

Еще одним ответом на некачественные коммерческие реализации командной оболочки csh был стандарт интерфейса переносимой операционной системы (Portable Operating System Interface или POSIX). Это была успешная попытка создания стандарта, описывающего процесс интерпретации команд (помимо других вещей), который в конце концов вобрал в себя множество возможностей командной оболочки Korn shell. В то же время, в рамках недавно созданного проекта GNU была предпринята попытка создания свободной, полностью совместимой с Unix операционной системы. В рамках этого проекта была начата разработка новой командной оболочки Bourne Again shell с реализациями многих функций из таких командных оболочек, как sh, csh и ksh. Результат этой инициативы оказался довольно впечатляющим.

Читайте также:  Linux find text from file

Кеннет Алмкист создал POSIX-совместимый клон командной оболочки Bourne shell под названием «ash», который впоследствии стал стандартной командной оболочкой BSD, еще одного ответвления/клона Unix. Уникальность данной командной оболочки заключается в ее реальной легковесности и именно поэтому она снискала особую популярность в мире встраиваемых Linux-систем. Если у вас есть телефон на базе Android с правами root, вы можете обнаружить в нем набор утилит BusyBox, в котором используется код из ash. Разработчики дистрибутива Debian создали клон командной оболочки ash под названием «dash».

(Иллюстрация от пользователя othree )

Одной из самых известных командных оболочек «новой волны» является командная оболочка «zsh», разработанная Полом Фалстадом в 1990 году. Это командная оболочка, поддерживающая синтаксис командной оболочки Bourne shell с возможностями командной оболочки bash и других бывших популярными ранее командных оболочек, а также с собственными дополнительными полезными возможностями. Она осуществляет проверку синтаксиса, позволяет отслеживать события вход/выхода из системы, поддерживает функцию интерпретации байткода и научную нотацию, позволяет работать с числами с плавающей точкой и так далее. Другой подобной командной оболочкой является Friendly Interactive Shell «fish», которая поддерживает команды, которые легко запомнить и использовать.

В общем, большинство командных оболочек является клонами существовавших ранее командных оболочек с дополнительными функциями, исправлениями ошибок и более либеральными лицензиями. Основными исключениями из данного правила являются оригинальные командные оболочки Bourne shell и C shell, а также командные оболочки rc shell и ash, которые не являются полностью оригинальными, но находят своего пользователя.

Какую командную оболочку следует использовать?

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

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

Если вы постоянно имеете дело с встраиваемыми Linux-системами, например, устанавливая Linux на такие экзотические устройства, как Nintendo DS или вам очень нравится дистрибутив Debian, вам наверняка лучше подойдут командные оболочки ash/dash. И снова напомню о том, что данные командные оболочки работают практически так же, как и все остальные, но ввиду их легковесности, они могут не поддерживать некоторые сложные функции.

(Иллюстрация от пользователя renrutal )

Если вы планируете изучать вопросы создания сценариев командной оболочки, вам придется потратить чуть больше времени на выбор командной оболочки. Командная оболочка Bash также является отличным выбором, но я знаю достаточно людей, которые перешли на Zsh из-за ее дополнительных функций. Я считаю, что выбор на самом деле зависит от сложности ваших будущих проектов и типов функций, которые вы хотели бы получить от командной оболочки. Некоторые люди используют командную оболочку tcsh по той причине, что они знают язык программирования C, регулярно используют его и им проще работать с ним, в том числе, в рамках сценариев. Если вы не уверены в том, какую командную оболочку следует выбрать, вы наверняка не имеете большого опыта в области разработки программных продуктов, поэтому вам стоит выбирать ту командную оболочку, которая будет лучше подходить для изучения интересных вам технологий и потратить дополнительное время на исследование функций всех командных оболочек.

Вы можете без каких-либо сложностей устанавливать и удалять различные командные с помощью центра приложений Ubuntu или менеджера пакетов программного обеспечения вашего любимого дистрибутива. Бинарные файлы командных оболочек размещаются в директории /bin/ и в том случае, если вы используете современный дистрибутив Linux, вы можете без каких-либо проблем изменять используемую по умолчанию командную оболочку. Просто введите следующую команду:

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

В квадратных скобках приведен путь к бинарному файлу текущей командной оболочки и если она устраивает вас, вы можете просто нажать клавишу Enter.

Читайте также:  Не запускается clickonce windows 10

Вы используете командную оболочку Bash? Вам нравится другая командная оболочка? Какую из ее возможностей вы используете чаще всего? Поделитесь своим мнением в разделе комментариев!

Источник

Оболочка пользователя ( shell ) в Linux.

Операционные системы семейства Linux, как впрочем, и любые другие ОС, предполагают наличие интерфейса взаимодействия между компонентами компьютерной системы и конечным пользователем, т. е. наличие программного уровня, который обеспечивает ввод команд и параметров для получения желаемых результатов. Такой программный уровень получил название «оболочка» или, на английском языке — shell .

Что такое оболочка ?

Командная оболочка ( shell ) обеспечивает взаимотействие между пользователем и средой операционной системы Linux. Она является специализированным программным продуктом, который обеспечивает выполнение команд и получения результатов их выполнения, или, если совсем уж упрощенно, оболочка — это программа, которая предназначена для обеспечения выполнения других программ по желанию пользователя. Примером оболочки может быть, например, интерпретатор команд command.com операционной системы MS DOS, или оболочка bash операционных систем Unix / Linux.

Все оболочки имеют схожие функции и свойства, в соответствием с их основным предназначением — выполнять команды пользователя и отображать результаты их выполнения:

— Интерпретация командной строки.

— Доступ к командам и результатам их выполнения.

— Поддержка переменных , специальных символов и зарезервированных слов.

— Обработка файлов, операций стандартного ввода и вывода.

— Реализация специального языка программирования оболочки.

Для операционных систем семейства Unix / Linux возможно использование нескольких различных оболочек, отличающихся свойствами и методами взаимодействия с системой. Наиболее распространенными оболочками являются

sh — оболочка Bourne , классическая оболочка для ОС Unix

bash оболочка Bourne Again (GNU Bourne-Again SHell). Пожалуй, наиболее распространенная на данный момент, оболочка в среде ОС семейства Linux.

ksh — оболочка Korn , разработанная в качестве развития оболочки Bourne с историей командной строки и возможностью редактирования команд.

csh — оболочка C , использующая синтаксис популярного языка программирования C

tcsh — версия оболочки C с интерактивным редактированием командной строки.

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

В процессе загрузки операционных систем семейства Linux, после загрузки ядра системы выполняется переход в интерактивный режим – режим взаимодействия пользователя и операционной системы. В ОС Linux, первым запускаемым в ходе загрузки процессом, является программа инициализации init , которая считывает содержимое конфигурационного файла /etc/inittab , определяет перечень и характеристики терминалов, имеющихся в системе, и вызывает программу интерактивного входа getty , отображающую приглашение для ввода имени пользователя. После ввода имени пользователя и пароля, программа getty вызывает программу login , которая проверяет достоверность учетной записи, выполняет переход в домашний каталог пользователя и передает управление программе начального запуска сеанса, в качестве которой обычно используется программа оболочки пользователя, конкретная разновидность которой определяется содержимым файла /etc/passwd для данной учетной записи. Например:

user1:x:508:511::/home/user1:/bin/sh
interbase:x:510:511::/home/interbase:/bin/csh
apb:x:511:513:apb:/home/apb:/bin/bash

Как видно из содержимого файла /etc/passwd, для пользователя user1 будет запущена оболочка sh ( оболочка Bourne ), для пользователя interbase — оболочка csh (оболочка C ) и для пользователя apb — оболочка bash ( Bourne Again ). После старта оболочки, на экран выводится приглашение к вводу команд ( обычно в виде знака доллара $ , если работа выполняется в контексте учетной записи обычного пользователя , или фунта # , если оболочка используется под учетной записью привилегированного пользователя ( root ).

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

— посредством команды exit выполненной пользователем

— при получении процессом оболочки сигнала kill , отправленного ядром, например при перезагрузке системы.

Интерпретация командной строки.

Пользовательский ввод в ответ на приглашение оболочки обычно называют командной строкой или командой . Команда Linux — это строка символов из имени команды и аргументов, разделенных пробелами. Аргументы предоставляют команде дополнительные параметры, определяющие ее поведение. Наиболее часто в качестве аргументов используются опции и имена файлов и каталогов. Например, командная строка

ls -l file01 file02

содержит команду ls , опцию -l и два имени файлов file01 file02 .

При использовании нескольких опций, их можно объединять. Например, варианты следующих команд идентичны :

Команды, являющиеся частью оболочки, называются встроенными. К таким командам относятся, например, cd, if, case и т. п. Естественно, встроенные команды могут отличаться для различных вариантов оболочек. Кроме встроенных команд, возможно использование программных модулей, представляющих собой отдельные исполняемые файлы, или файлов скриптов или сценариев — обычных текстовых файлов, содержащих последовательно выполняемые строки с командами оболочки. Некоторые скрипты (сценарии) могут выполняться процессами Linux, как например, планировщиком задач cron . Планировщик задач, как правило, предназначен для автоматического выполнения задач администрирования системы по расписанию. Задачи cron представляют собой команды или скрипты и выполняются автоматически, без какого либо вмешательства человека и могут выполняться в контексте разных учетных записей пользователей. В случае, когда задача планировщика предполагает выполнение какого-либо скрипта, возникает проблема выбора оболочки, которая должна быть запущена в качестве дочернего процесса cron для обработки команд из файла скрипта — ведь оболочка может быть любой, а синтаксис скрипта, как правило, предполагает использование конкретной оболочки, под которую он написан. Для устранения данной проблемы, в ОС семейства Linux принято в первой строке скрипта указывать разновидность оболочки, необходимой для его выполнения, в виде:

Читайте также:  Драйвера windows display driver

#!/bin/bash — для оболочки bash

#!/bin/sh — для оболочки sh

Знак # является признаком комментария и следующие за ним символы не интерпретируются в качестве команды. Такой прием позволяет явно указать, какая оболочка должна быть использована для обработки последующего содержимого файла. Если же скрипт не содержит запись, явно определяющую требуемую оболочку, то будут использованы настройки из учетной записи, в контексте которой выполняется данный скрипт. В этом случае, возможна ситуация, когда скрипт, написанный для оболочки, например, tch будет передан для выполнения в оболочку bash , что приведет к невозможности его выполнения.

При выполнении команд или сценариев используются переменные окружения (на английском языке — environment , значения которых характеризуют программную среду, в которой происходит выполнение команд. Такие переменные могут содержать общие настройки системы, параметры графической или командной оболочки, пути исполняемых файлов и т.п. Значения переменных окружения устанавливаются на уровне системы (для всех пользователей) и на уровне конкретного пользователя. Для установки переменных окружения на уровне системы используется содержимое файлов:

/etc/profile — устанавливает переменные только для командных оболочек. Может запускать любые скрипты в оболочках, совместимых с Bourne shell.

/etc/bash.bashrc — устанавливает переменные только для интерактивных оболочек. Он также запускает bash-скрипты.

/etc/environment — используется модулем PAM-env. В этом файле можно указывать только пары имя=значение .

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

/bin в переменную PATH для всех пользователей, поместите следующий код в один из системных файлов инициализации окружения (/etc/profile или /etc/bash.bashrc):

# Если идентификатор ID пользователя более или равно 1000, и существует каталог

#не был ранее добавлен в переменную PATH,

/bin в переменную $PATH.

if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin)

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

Если же нужно изменить среду окружения для конкретного пользователя, используется модификация содержимого среды окружения пользователя:

/.bash_login и т.п. — файлы инициализации командной оболочки из домашнего каталога пользователя.

/.profile — файл инициализации профиля пользователя. Используется многими оболочками для определения переменных среды.

/.pam_environment — пользовательский аналог файла /etc/environment, который используется модулем PAM-env.

Например, чтобы добавить каталог пользователя

/bin в пути поиска исполняемых файлов, заданных переменной PATH , можно например, в файл

/.profile поместить строку:

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

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

/bin в пути поиска исполняемых файлов:

Новое значение переменной PATH будет действовать только до завершения текущего сеанса пользователя.

Для просмотра значения переменной можно использовать команду echo $переменная , например:

В настоящее время, самой распространенной оболочкой, как уже упоминалось выше, является bash . Вызвано это, в первую очередь тем, что оболочка bash является sh — совместимой командной оболочкой, в которую добавлены полезные возможности из оболочек Korn shell ( ksh ) и C shell ( csh ). Оболочка bash может без какой-либо модификации выполнять большинство скриптов, написанных под язык программирования оболочки sh и в максимальной степени пытается приблизиться к стандарту POSIX , что привело к появлению множества улучшений, причем как для программирования, так и использования в интерактивном режиме. В современной реализации bash имеется режим редактирования командной строки, неограниченный размер истории команд, средства управление заданиями, возможность использования псевдонимов, обширный перечень встроенных команд, функции командной оболочки и т.п. В целом, bash в наибольшей степени соответствует потребностям среднестатистического пользователя, что и сделало ее наиболее используемой в среде Linux.

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

Если вы желаете помочь развитию проекта, можете воспользоваться кнопкой «Поделиться» для своей социальной сети

Источник

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