Linux Tools: shells - историческая часть
linux linux-tools shellShell, шелл, терминал, консоль, Command Line Interface, cli – по сути все это название командного интерпретатора, которые существует во всех операционных системах и позволяет посылать системе команды для выполнения, собирать эти команды в скрипты и выполнять уже наборы команд.
Звучит все очень просто, но так было не всегда и все удобства современных командных интерпретаторов появились не сразу. Сегодня кратко рассмотрим историю развития шеллов.
1971, Thompson shell - написан Кеном (внезапно) Томпсоном в Bell Labs и использовался в первой версии Unix. Кен Томпсон совместно с Денисом Ритчи являются ни много ни мало создателями операционной система Unix и языка программирования C.
1975, PWB (Mashey) shell - разработан Джоном Маши (John Mashey) в Bell Labs для PWB (Programmer’s Workbench) Unix - дистрибутив для разработчиков (но не взлетел). Основан на Thompson Shell c фичами для упрощения разработки.
Тут следует сделать небольшое отступление – все шеллы до Borne Shell были больше нацелены на выполнения команд (интерактивный режим), а не для скриптов.
Thompson Shell создавался очень минималистичным, в одной из последних был реализован концепт пайпов (command1 > command2
), но в остальном даже такие простые вещи как if
были сделаны отдельными командами — основной функционал был направлен именно на выполнение команд.
В Mashey shell if
, elseif
, goto
(и другие) были добавлены как часть самого шелла, появились аналоги $HOME, $PATH.
Bourne Shell был написан с нуля, фичи обсуждались с участниками сообщества, плюс популярность после публикации книги The Unix Programming Environment Брайна Кернигана и Роба Пайка — все это сыграло в пользу Borne Shell и разработка Mashey Shell была прекращена, хотя достаточно много фич из Mashey были реализованы в Borne.
1976, 1979, Bourne Shell (sh) - в 1976 Стивен Борн начал разработку, а в 1979 Bourne Shell был включен в Unix версии 7 как шелл по умолчанию. Это первый распространенный шелл со скриптовым языком.
1978, C shell (csh) – разработан Биллом Джоем, шелл с собственным синтаксисом несовместимым с sh, был широко распространен в BSD-дистрибутивах. Если sh привносил удобства написания скриптов, то сsh добавлял множество фич именно для пользователя: перенаправление потоков, пайпы, история, навигация внутри командной строки, автодополнение и еще много удобств интерактивного режима.
1983, Korn Shell (ksh) - разработан Дэвидом Корном и первоначально основан на bash (видимо на каких-то дорелизных версиях). Позже реализованный в ksh механизм работы с задачами (jobs) был добавлен в bash.
1989, Born Again Shell (bash) - первый релиз того самого шелла. Разрабатывался сначала Ричардом Столлманом, потом Брайном Фоксом. bash совместил лучшее из sh и csh, привнес свое и стал популярен в том числе благодаря Линусу Торвальдсу, который запустил bash одной из первых программ на своем новом ядре.
1989, Almquist shell (ash) - Kenneth Almquist выпустил первую версию легковесного шелла совместимого с Bourne Shell. ash пришел на замену sh в BSD версиях Unix. Основным плюсом была его малый размер и скорость работы и конечно совместимость с sh.
1990, Z Shell (zsh) - разработан Паулем Фалстадом (Paul Falstad). Кратко - это bash с кучей улучшений: история выполненных команд шарится между сессиями, программируемое автодополнение команд, коррекция опечаток (это все конечно уже в настоящее время).
1997, 2002, Debian Almquist shell (dash) - в 1997 Herbert Xu портирует код из NetBSD в Debian Linux, а в 2002 происходит переимнование в dash.
2001 - код ash добавлен в Busybox (это минимальный набор unix-утилит в одном бинарнике).
2005, Friendly interactive shell (fish) - начал разрабатываться Акселем Лильенкранцем. Расширенное автодополнение, подсветка синтаксиса и другие улучшения нацеленные именно на удобство пользователя.
2006 - dash становится дефолтным шелом /bin/sh в дистрибутивах Ubuntu и Debian — вот так из 1980’ых в 2000’ые ash попал как базовый скриптовый шелл в одни из самых популярных дистрибутивов Linux.
Многие шеллы завершили разработку, но в них были разработаны фичи, которые перенесли в более популярных реализации. С этой стороны, глобально, разработка каждого шелла в чем-то способствовала общему развитию.
Итого #
Дальше более подробно рассмотрим современную реализацию ash. По скриптовым возможностям ash совместим с bash, но по функционалу (особенно интерактивному) гораздо меньше — поэтому изучив ash, изучим основу bash.
Следующая статья: Linux Tools: shells, ash #1 - ash startup, ash arguments
Ссылки #
- https://en.wikipedia.org/wiki/Thompson_shell
- https://en.wikipedia.org/wiki/PWB_shell
- https://en.wikipedia.org/wiki/Bourne_shell
- https://en.wikipedia.org/wiki/Bash_(Unix_shell)
- https://en.wikipedia.org/wiki/Almquist_shell
- https://en.wikipedia.org/wiki/Z_shell
- https://en.wikipedia.org/wiki/KornShell
- https://en.wikipedia.org/wiki/Ken_Thompson
- https://en.wikipedia.org/wiki/John_Mashey
- https://en.wikipedia.org/wiki/Stephen_R._Bourne
- The Unix Programming Environment by Brian Kernighan and Rob Pike
- https://en.wikipedia.org/wiki/Version_7_Unix
- Dash by Herbert Xu
- https://ru.wikipedia.org/wiki/BusyBox
- https://wiki.ubuntu.com/DashAsBinSh