В вычислительной технике оболочка — это компьютерная программа, которая предоставляет услуги операционной системы пользователю-человеку или другим программам. В общем, оболочки операционной системы используют либо интерфейс командной строки (CLI), либо графический пользовательский интерфейс (GUI), в зависимости от роли компьютера и конкретной операции. Она называется оболочкой, потому что является самым внешним слоем вокруг операционной системы. [1] [2]
Операционные системы предоставляют своим пользователям различные услуги, включая управление файлами , управление процессами (запуск и завершение работы приложений ), пакетную обработку , а также мониторинг и настройку операционной системы.
Большинство оболочек операционных систем не являются прямыми интерфейсами к базовому ядру , даже если оболочка взаимодействует с пользователем через периферийные устройства, подключенные к компьютеру напрямую. Оболочки на самом деле являются специальными приложениями, которые используют API ядра точно так же, как его используют другие прикладные программы. Оболочка управляет взаимодействием пользователя с системой, запрашивая у пользователей ввод данных, интерпретируя их ввод и затем обрабатывая вывод из базовой операционной системы (во многом похоже на цикл чтение-оценка-печать, REPL ). [3] Поскольку оболочка операционной системы на самом деле является приложением, ее можно легко заменить другим аналогичным приложением для большинства операционных систем.
Помимо оболочек, работающих на локальных системах, существуют различные способы сделать удаленные системы доступными для локальных пользователей; такие подходы обычно называют удаленным доступом или удаленным администрированием. Первоначально доступный на многопользовательских мэйнфреймах , которые предоставляли текстовые пользовательские интерфейсы для каждого активного пользователя одновременно с помощью текстового терминала, подключенного к мэйнфрейму через последовательную линию или модем , удаленный доступ распространился на Unix-подобные системы и Microsoft Windows. В Unix-подобных системах протокол Secure Shell (SSH) обычно используется для текстовых оболочек, в то время как туннелирование SSH может использоваться для графических пользовательских интерфейсов (GUI) на основе X Window System . В Microsoft Windows протокол Remote Desktop может использоваться для предоставления удаленного доступа с графическим интерфейсом, а начиная с Windows Vista PowerShell Remote может использоваться для текстового удаленного доступа через WMI, RPC и WS-Management. [4]
Большинство оболочек операционных систем попадают в одну из двух категорий — командной строки и графические. Командные оболочки предоставляют интерфейс командной строки (CLI) для операционной системы, в то время как графические оболочки предоставляют графический пользовательский интерфейс (GUI). Другие возможности, хотя и не столь распространенные, включают голосовой пользовательский интерфейс и различные реализации текстового пользовательского интерфейса (TUI), которые не являются CLI, такие как текстовые системы меню. Относительные достоинства оболочек на основе CLI и GUI часто обсуждаются. Многие пользователи компьютеров используют оба в зависимости от выполняемой задачи.
Ранние интерактивные системы предоставляли простой интерпретатор командной строки как часть резидентного монитора . Этот интерпретатор мог называться по-разному, например, в системах COMCON
DEC TOPS-10 . [5] Интерпретатор выполнял одну из ряда предопределенных команд, одной из которых был запуск пользовательской программы. Обычные команды позволяли пользователю входить и выходить из системы, выделять, освобождать и манипулировать устройствами и файлами, а также запрашивать различные фрагменты информации о системе или пользовательском процессе. [6]
Целью такой процедуры является создание среды обмена, в которой можно активировать любую процедуру, как если бы она была вызвана изнутри другой программы . В дальнейшем, для упрощения, мы будем называть эту процедуру «ОБОЛОЧКОЙ».
Луи Пузен, SHELL: Глобальный инструмент для вызова и объединения процедур в цепочку в системе [7]
В 1964 году для операционной системы Multics Луи Пузен задумал идею «использования команд как-то вроде языка программирования» и ввел термин shell для ее описания. [8] В документе 1965 года shell определяется как «общая процедура, автоматически вызываемая супервизором всякий раз, когда пользователь вводит какое-либо сообщение на своей консоли, в то время, когда у него нет других активных процессов под управлением консоли. Эта процедура действует как интерфейс между сообщениями консоли и подпрограммой [в супервизоре]». [9] Эта система была впервые реализована Глендой Шредер и неназванным человеком из General Electric . [10]
Multics также ввел активную функцию , ключевую концепцию во всех более поздних оболочках. Она определяется как
строка... которая заменяется возвращаемым значением строки символов перед выполнением содержащей ее командной строки. Активные функции часто используются... для реализации макросов командного языка. [11]
В 1971 году Кен Томпсон разработал оболочку Thompson в первой версии Unix. Хотя она была проще оболочки Multics, она содержала некоторые инновационные функции, которые были перенесены в современные оболочки, включая использование < и > для перенаправления ввода и вывода .
Графическая оболочка впервые появилась в системе NLS Дугласа Энгельбарта , продемонстрированной в декабре 1968 года на осенней совместной компьютерной конференции в Сан-Франциско, в том, что было названо Матерью всех демонстраций . Коллеги Энгельбарта из Стэнфордского исследовательского института принесли эту концепцию в исследовательский центр Xerox Palo Alto (PARC), где она появилась на Alto , представленном в 1973 году. Оттуда эта идея распространилась на Lilith Никлауса Вирта в 1980 году и на Apple Lisa в 1983 году, а затем стала повсеместной.
Интерфейс командной строки ( CLI ) — это оболочка операционной системы, которая использует буквенно-цифровые символы, набираемые на клавиатуре, для предоставления инструкций и данных операционной системе в интерактивном режиме. Например, телетайп может отправлять коды, представляющие нажатия клавиш, в программу интерпретатора команд, запущенную на компьютере; интерпретатор команд анализирует последовательность нажатий клавиш и отвечает сообщением об ошибке, если не может распознать последовательность символов, или может выполнить какое-либо другое действие программы, например, загрузку прикладной программы, вывод списка файлов, вход пользователя в систему и многие другие. Операционные системы, такие как UNIX, имеют большое разнообразие программ- оболочек с различными командами, синтаксисом и возможностями, при этом оболочка POSIX является базовой. Некоторые операционные системы имели только один стиль командного интерфейса; массовые операционные системы, такие как MS-DOS, поставлялись со стандартным командным интерфейсом ( COMMAND.COM ), но также часто были доступны сторонние интерфейсы, предоставляющие дополнительные возможности или функции, такие как меню или удаленное выполнение программ.
Прикладные программы также могут реализовывать интерфейс командной строки. Например, в Unix-подобных системах программа telnet имеет ряд команд для управления связью с удаленной компьютерной системой. Поскольку команды для программы состоят из тех же нажатий клавиш, что и данные, отправляемые на удаленный компьютер, требуются некоторые средства для различения этих двух. Последовательность выхода может быть определена с использованием либо специального локального нажатия клавиши, которое никогда не передается, но всегда интерпретируется локальной системой. Программа становится модальной, переключаясь между интерпретацией команд с клавиатуры или передачей нажатий клавиш в качестве данных для обработки.
Особенностью многих оболочек командной строки является возможность сохранять последовательности команд для повторного использования. Файл данных может содержать последовательности команд, которые CLI может заставить выполнять так, как будто они введены пользователем. Специальные функции CLI могут применяться при выполнении этих сохраненных инструкций. Такие пакетные файлы (файлы сценариев) могут использоваться повторно для автоматизации рутинных операций, таких как инициализация набора программ при перезапуске системы. Пакетное использование оболочек обычно включает структуры, условные операторы, переменные и другие элементы языков программирования; некоторые имеют только самое необходимое для такой цели, другие сами по себе являются очень сложными языками программирования. И наоборот, некоторые языки программирования можно использовать интерактивно из оболочки операционной системы или в специально созданной программе.
Несколько оболочек командной строки, такие как Nushell , Xonsh, Bash (оболочка Unix) и Z shell , предлагают автодополнение командной строки , позволяя интерпретатору расширять команды на основе нескольких символов, введенных пользователем. [12]
Интерпретатор командной строки может предложить функцию истории, чтобы пользователь мог вызывать ранее введенные в систему команды и повторять их, возможно, с некоторым редактированием. Поскольку все команды операционной системе должны были вводиться пользователем, были распространены короткие имена команд и компактные системы для представления параметров программы. Короткие имена иногда было трудно запомнить пользователю, и ранним системам не хватало ресурсов хранения, чтобы предоставить подробное руководство пользователя в режиме онлайн.
Графический пользовательский интерфейс (GUI) предоставляет средства для графического управления программами, позволяя выполнять такие операции, как открытие, закрытие, перемещение и изменение размера окон , а также переключение фокуса между окнами. Графические оболочки могут быть включены в среду рабочего стола или поставляться отдельно, даже как набор слабосвязанных утилит.
Большинство графических пользовательских интерфейсов развивают метафору «электронного рабочего стола» , где файлы данных представлены так, как если бы они были бумажными документами на столе, а прикладные программы аналогичным образом имеют графические представления, а не вызываются именами команд.
Графические оболочки обычно строятся поверх оконной системы . В случае X Window System или Wayland оболочка состоит из оконного менеджера X или композитора Wayland соответственно, а также из одной или нескольких программ, обеспечивающих функциональность для запуска установленных приложений, управления открытыми окнами и виртуальными рабочими столами, а также часто для поддержки движка виджетов.
В случае macOS Quartz Compositor действует как оконная система , а оболочка состоит из Finder , [ 13] Dock , [13] SystemUIServer, [13] и Mission Control . [14]
Современные версии операционной системы Microsoft Windows используют оболочку Windows в качестве своей оболочки. Оболочка Windows предоставляет среду рабочего стола , меню «Пуск » и панель задач , а также графический пользовательский интерфейс для доступа к функциям управления файлами операционной системы. Более старые версии также включают диспетчер программ , который был оболочкой для серии 3.x Microsoft Windows и который фактически поставлялся с более поздними версиями Windows как 95, так и NT, по крайней мере, до Windows XP. Интерфейсы версий Windows 1 и 2 заметно отличались.
Приложения рабочего стола также считаются оболочками, если они используют сторонний движок. Аналогично, многие люди и разработчики, недовольные интерфейсом Windows Explorer, разработали программное обеспечение, которое либо изменяет функционирование и внешний вид оболочки, либо полностью заменяет ее. WindowBlinds от StarDock — хороший пример первого типа приложений. LiteStep и Emerge Desktop — хорошие примеры второго типа.
Программы взаимодействия и специально разработанное программное обеспечение позволяют пользователям Windows использовать эквиваленты многих различных графических интерфейсов на основе Unix, обсуждаемых ниже, а также Macintosh. Эквивалент OS/2 Presentation Manager для версии 3.0 может запускать некоторые программы OS/2 при определенных условиях, используя подсистему среды OS/2 в версиях Windows NT.
«Оболочка» также используется в широком смысле для описания прикладного программного обеспечения, которое «построено вокруг» определенного компонента, например, веб-браузеров и почтовых клиентов, по аналогии с оболочками, встречающимися в природе. Действительно, оболочка (командной строки) инкапсулирует ядро операционной системы . Их также иногда называют «оболочками». [2]
В экспертных системах оболочка — это часть программного обеспечения, которая представляет собой «пустую» экспертную систему без базы знаний для какого-либо конкретного приложения. [15]
г-н Пузен создал программу RUNCOM, которая помогала пользователям автоматизировать утомительные и повторяющиеся команды. Эта программа, которую он описал как "оболочку" вокруг жужжащих внутренностей компьютера, дала вдохновение — и название — целому классу программных инструментов, называемых оболочками командной строки, которые все еще скрываются под поверхностью современных операционных систем.
можете запускать команды на одном или сотнях компьютеров с помощью одной команды PowerShell. Windows PowerShell поддерживает удаленные вычисления с использованием различных технологий, включая WMI, RPC и WS-Management.