stringtranslate.com

Оболочка Unix

Окна оболочек tcsh и sh на рабочем столе Mac OS X Leopard [1]

Оболочка 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

Оболочка 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]

Объяснение:

  1. ^ только если ~/.tcshrc не найден
  2. ^ Только более новые версии Bourne Shell
  3. ^ Доступно в системах, которые поддерживают «параметр User Portability Utilities»; значение переменной должно быть абсолютным путем, и оно игнорируется, «если реальные и эффективные идентификаторы пользователя или реальные и эффективные идентификаторы группы различаются». [13]
  4. ^ $ENV — это $HOME/.shrc в новых версиях Bourne Shell
  5. ^ То же поведение, что и у sh , но только если вызывается как sh (bash 2+) или, начиная с bash 4.2, также если вызывается явно в режиме совместимости с POSIX (с параметрами --posix или -o posix ). [14]
  6. ^ ab Только в режиме совместимости с sh/ksh (при вызове как bash, sh, ksh)
  7. ^ abc Первый читаемый файл в порядке ~/.bash_profile , ~/.bash_login и ~/.profile ; и только ~/.profile , если вызывается как sh или, по крайней мере, с Bash 4.2, если вызывается явно в режиме совместимости с POSIX (с параметрами --posix или -o posix )

Другие оболочки

Вариации концепции оболочки Unix, которые не являются производными от оболочки Bourne или оболочки C, включают в себя следующее: [15]

Смотрите также

Ссылки

  1. ^ Том Ван Флек (1995-02-05). "Unix и Multics". Multicians.org . Получено 2012-08-14 .
  2. ^ Борн, Стивен Р. (октябрь 1983 г.). «Оболочка Unix». BYTE . стр. 187. Получено 30 января 2015 г.
  3. ^ "V6 Thompson Shell Port - История". V6shell.org . Получено 2012-08-14 .
  4. ^ Луи Пузен (25.11.2000). «Происхождение оболочки». Multicians.org . Получено 14.08.2012 .
  5. ^ Николай Безруков (2015-08-13). "Введение в историю оболочки Unix". Softpanorama. Архивировано из оригинала 2022-06-08 . Получено 2016-08-21 .
  6. ^ Борн, Стивен (2009-03-05). «Языки программирования от А до Я: оболочка Борна, или sh» (интервью). Интервью взял Говард Дахдах. Computerworld . Получено 2022-08-16 .
  7. ^ "Re: Late Bloomers Revisited" . Получено 20 сентября 2014 г. .
  8. ^ Korn, David G. (26 октября 1994 г.), «ksh — расширяемый язык высокого уровня», Труды симпозиума по языкам очень высокого уровня USENIX 1994 г. , Ассоциация USENIX , получено 5 февраля 2015 г. Вместо того чтобы изобретать новый язык сценариев, мы построили систему ввода форм, изменив оболочку Bourne, добавив встроенные команды по мере необходимости.
  9. ^ Харли Хан, Руководство Харли Хана по Unix и Linux: Хронология Unix/Linux.
  10. ^ "Hamilton C shell for Windows Release Notes 4.0" . Получено 20 сентября 2014 г. .
  11. ^ "Different UNIX Shells". unixnote.com. 2010. Архивировано из оригинала 2016-04-03 . Получено 2016-08-21 .
  12. ^ SCO Unix Group, Документация SCO Unixware 7, 22 апреля 2004 г., получено 18 октября 2012 г.
  13. ^ "Shell Command Language". opengroup.org . Получено 15 июня 2015 г. .
  14. ^ "Справочное руководство Bash: файлы запуска Bash". gnu.org . Получено 15 июня 2015 г. .
  15. ^ "FreeBSD Ports: Shells". Freebsd.org. 2014-03-30. Архивировано из оригинала 2021-01-12 . Получено 2014-04-05 .