Оболочка Unix — это интерпретатор командной строки или оболочка , которая предоставляет пользовательский интерфейс командной строки для операционных систем типа Unix . Оболочка является как интерактивным командным языком , так и языком сценариев и используется операционной системой для управления выполнением системы с помощью сценариев оболочки . [2]
Пользователи обычно взаимодействуют с оболочкой Unix с помощью эмулятора терминала ; однако для серверных систем распространены прямые операции через последовательные аппаратные соединения или Secure Shell . Все оболочки Unix предоставляют подстановочные знаки имен файлов , конвейеризацию , документы here , подстановку команд , переменные и управляющие структуры для проверки условий и итерации .
Обычно оболочка — это программа, которая выполняет другие программы в ответ на текстовые команды. Сложная оболочка также может изменять среду, в которой выполняются другие программы, передавая именованные переменные , список параметров или источник ввода.
В Unix-подобных операционных системах пользователи обычно имеют много вариантов выбора интерпретаторов командной строки для интерактивных сеансов. Когда пользователь входит в систему в интерактивном режиме, программа оболочки автоматически выполняется на протяжении сеанса. Тип оболочки, который может быть настроен для каждого пользователя, обычно хранится в профиле пользователя, например, в локальном файле passwd или в распределенной системе конфигурации, такой как NIS или LDAP ; однако пользователь может выполнить любую другую доступную оболочку в интерактивном режиме.
В операционных системах с оконной системой , таких как macOS и настольные дистрибутивы Linux , некоторые пользователи могут никогда не использовать оболочку напрямую. В системах Unix оболочка исторически была языком реализации сценариев запуска системы, включая программу, которая запускает оконную систему, настраивает сеть и многие другие важные функции. Однако некоторые поставщики систем заменили традиционную систему запуска на основе оболочки ( init ) другими подходами, такими как systemd .
Первой оболочкой Unix была оболочка Thompson , sh , написанная Кеном Томпсоном в Bell Labs и распространявшаяся с версиями 1–6 Unix с 1971 по 1975 год. [3] Хотя она и была рудиментарной по современным стандартам, она ввела многие из основных функций, общих для всех более поздних оболочек Unix, включая конвейеризацию, простые структуры управления с использованием if
и goto
и подстановочные знаки в именах файлов. Хотя она в настоящее время не используется, она все еще доступна как часть некоторых древних систем UNIX.
Она была смоделирована по образцу оболочки Multics , разработанной в 1965 году американским инженером-программистом Глендой Шредер . Сама оболочка Multics Шредера была смоделирована по образцу программы RUNCOM, которую Луи Пузен показал команде Multics. Суффикс "rc" в некоторых файлах конфигурации Unix (например, ".vimrc") является остатком предков оболочек Unix RUNCOM. [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 shell , sh , была новой оболочкой Unix, разработанной Стивеном Борном в Bell Labs. [6] Распространённая как оболочка для UNIX версии 7 в 1979 году, она представила остальные основные функции, считающиеся общими для всех более поздних оболочек Unix, включая здесь документы , подстановку команд , более общие переменные и более обширные встроенные структуры управления . Язык, включая использование обратного ключевого слова для обозначения конца блока, находился под влиянием ALGOL 68. [ 7] Традиционно имя программы оболочки Bourne shell — 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 shell , написанная Николь Гамильтон, впервые распространенная на OS/2 в 1988 году и на Windows с 1992 года. [10]
Оболочки считывают файлы конфигурации в различных обстоятельствах. Эти файлы обычно содержат команды для оболочки и выполняются при загрузке; они обычно используются для установки важных переменных, используемых для поиска исполняемых файлов, таких как $PATH и других, которые управляют поведением и внешним видом оболочки. Таблица в этом разделе показывает файлы конфигурации для популярных оболочек. [11]
Объяснение:
Вариации концепции оболочки Unix, которые не являются производными от оболочки Bourne или оболочки C, включают в себя следующее: [15]
того чтобы изобретать новый язык сценариев, мы построили систему ввода форм, изменив оболочку Bourne, добавив встроенные команды по мере необходимости.