Оболочка Unix — это интерпретатор или оболочка командной строки , которая обеспечивает пользовательский интерфейс командной строки для Unix-подобных операционных систем . Оболочка является одновременно интерактивным командным языком и языком сценариев и используется операционной системой для управления выполнением системы с помощью сценариев оболочки . [2]
Пользователи обычно взаимодействуют с оболочкой Unix, используя эмулятор терминала ; однако для серверных систем обычно используется прямая работа через последовательные аппаратные соединения или Secure Shell . Все оболочки Unix обеспечивают подстановочные знаки файлов , конвейерную обработку , здесь документы , подстановку команд , переменные и структуры управления для проверки условий и итерации .
Как правило, оболочка — это программа, которая запускает другие программы в ответ на текстовые команды. Сложная оболочка также может изменять среду, в которой выполняются другие программы, передавая именованные переменные , список параметров или источник входных данных.
В Unix-подобных операционных системах пользователи обычно имеют множество вариантов интерпретаторов командной строки для интерактивных сеансов. Когда пользователь входит в систему в интерактивном режиме, программа оболочки автоматически выполняется на время сеанса. Тип оболочки, который может быть настроен для каждого пользователя, обычно хранится в профиле пользователя, например, в локальном файле passwd или в распределенной системе конфигурации, такой как NIS или LDAP ; однако пользователь может запустить любую другую доступную оболочку в интерактивном режиме.
В операционных системах с оконной системой , таких как macOS и настольные дистрибутивы Linux , некоторые пользователи могут никогда не использовать оболочку напрямую. В системах Unix оболочка исторически была языком реализации сценариев запуска системы, включая программу, которая запускает оконную систему, настраивает сеть и многие другие важные функции. Однако некоторые поставщики систем заменили традиционную систему запуска на основе оболочки ( init ) другими подходами, такими как systemd .
Первой оболочкой Unix была оболочка Томпсона sh , написанная Кеном Томпсоном из Bell Labs и распространявшаяся вместе с версиями Unix с 1 по 6 с 1971 по 1975 год . для всех более поздних оболочек Unix, включая конвейеры, простые структуры управления с использованием if
и goto
и подстановочные знаки имени файла. Хотя в настоящее время он не используется, он все еще доступен как часть некоторых древних систем UNIX.
Он был создан по образцу оболочки Multics , разработанной в 1965 году американским инженером-программистом Глендой Шредер . Оболочка Multics Шредера сама была смоделирована по образцу программы RUNCOM , которую Луи Пузен показал команде Multics. Суффикс «rc» в некоторых файлах конфигурации Unix (например, «.vimrc») является остатком RUNCOM-родословной оболочек Unix. [1] [4]
Оболочка PWB или оболочка Mashey, sh , была версией оболочки Thompson, совместимой с предыдущими версиями, дополненной Джоном Маши и другими и распространявшейся вместе с Programmer's Workbench UNIX примерно в 1975–1977 годах. Он был сосредоточен на том, чтобы сделать программирование оболочки практичным, особенно в крупных общих вычислительных центрах. В него были добавлены переменные оболочки (предшественники переменных среды , включая механизм поиска пути, который превратился в $PATH), исполняемые пользователем сценарии оболочки и обработка прерываний. Структуры управления были расширены с if/goto на if/then/else/endif, switch/breaksw/endsw и while/end/break/continue. По мере того как программирование оболочки стало широко распространенным, эти внешние команды были включены в саму оболочку для повышения производительности.
Но наиболее широко распространенными и влиятельными из ранних оболочек Unix были оболочки Bourne и C. Обе оболочки использовались в качестве базы кодирования и модели для многих производных и аналогичных оболочек с расширенными наборами функций. [5]
Оболочка Bourne , sh , была новой оболочкой Unix, разработанной Стивеном Борном из Bell Labs. [6] Распространяемая как оболочка для UNIX версии 7 в 1979 году, она представила остальные основные функции, считающиеся общими для всех более поздних оболочек Unix, включая здесь документы , подстановку команд , более общие переменные и более обширные встроенные структуры управления . Язык, включая использование перевернутого ключевого слова для обозначения конца блока, был создан под влиянием АЛГОЛА 68 . [7] Традиционно имя программы оболочки Bourne — sh , а ее путь в иерархии файловой системы Unix — /bin/sh . Но также доступен ряд совместимых аналогов с различными улучшениями и дополнительными функциями. Во многих системах sh может быть символической ссылкой или жесткой ссылкой на одну из этих альтернатив:
Стандарт POSIX определяет свою стандартную оболочку как строгое подмножество оболочки Korn , расширенной версии оболочки Bourne. С точки зрения пользователя активная оболочка Bourne сразу распознавалась по характерному символу приглашения командной строки по умолчанию — знаку доллара ( $ ).
Оболочка C , csh , была смоделирована на языке программирования C, включая структуры управления и грамматику выражений. Он был написан Биллом Джоем, будучи аспирантом Калифорнийского университета в Беркли , и широко распространялся вместе с BSD Unix . [9] [ нужен лучший источник ]
Оболочка C также представила множество функций для интерактивной работы, включая механизмы истории и редактирования , псевдонимы , стеки каталогов , нотацию тильды , cdpath , управление заданиями и хеширование путей . Во многих системах csh может быть символической ссылкой или жесткой ссылкой на оболочку TENEX C (tcsh), улучшенную версию исходной версии Joy. Хотя интерактивные функции csh были скопированы в большинство других оболочек, структура языка не получила широкого распространения. Единственным аналогом является оболочка Hamilton C , написанная Николь Гамильтон, впервые распространяемая на OS/2 в 1988 году и на Windows с 1992 года. [10]
Оболочки читают файлы конфигурации в различных обстоятельствах. Эти файлы обычно содержат команды для оболочки и выполняются при загрузке; они обычно используются для установки важных переменных, используемых для поиска исполняемых файлов, таких как $PATH и других, которые управляют поведением и внешним видом оболочки. В таблице этого раздела показаны файлы конфигурации для популярных оболочек. [11]
Объяснение:
Вариации концепции оболочки Unix, которые не происходят от оболочки Bourne или оболочки C, включают следующее: [15]
Вместо изобретения нового языка сценариев , мы создали систему ввода форм, изменив оболочку Bourne, добавив при необходимости встроенные команды.