Unix оболочки является командной строки , интерпретатор или оболочка , которая обеспечивает командной строки пользовательский интерфейс для Unix-подобных операционных систем . Оболочка как интерактивный командный язык и язык сценариев , и используется операционной системой для управления выполнением системы с помощью сценариев оболочки . [2]
Пользователи обычно взаимодействуют с оболочкой Unix с помощью эмулятора терминала ; однако прямая работа через последовательные аппаратные соединения или Secure Shell обычна для серверных систем. Все оболочки Unix предоставляют подстановочные знаки имен файлов , конвейерную обработку , здесь документы , подстановку команд , переменные и управляющие структуры для проверки условий и итераций .
Концепция
В самом общем смысле термин « оболочка» означает любую программу, которую пользователи используют для ввода команд. Оболочка скрывает детали базовой операционной системы и управляет техническими деталями интерфейса ядра операционной системы , который является самым низкоуровневым или «самым внутренним» компонентом большинства операционных систем.
В Unix-подобных операционных системах у пользователей обычно есть много вариантов интерпретаторов командной строки для интерактивных сеансов. Когда пользователь входит в систему в интерактивном режиме, программа оболочки автоматически выполняется на время сеанса. Тип оболочки, которая может быть настроена для каждого пользователя, обычно хранится в профиле пользователя, например, в локальном файле passwd или в системе распределенной конфигурации, такой как NIS или LDAP ; однако пользователь может выполнять любую другую доступную оболочку в интерактивном режиме.
На хостах с оконной системой , такой как macOS , некоторые пользователи могут никогда не использовать оболочку напрямую. В системах Unix оболочка исторически была языком реализации сценариев запуска системы, включая программу, которая запускает оконную систему, настраивает сеть и многие другие важные функции. Однако некоторые поставщики систем заменили традиционную систему запуска на основе оболочки ( init ) другими подходами, такими как systemd .
Ранние ракушки
Первой оболочкой Unix была оболочка Томпсона , sh , написанная Кеном Томпсоном из Bell Labs и распространявшаяся с версиями 1–6 Unix с 1971 по 1975 год. [3] Хотя по современным стандартам она была примитивной, она представила многие из основных общих функций ко всем более поздним оболочкам Unix, включая конвейер, простые управляющие структуры с использованием if
и goto
и подстановочные знаки имен файлов. Хотя в настоящее время он не используется, он все еще доступен как часть некоторых древних систем UNIX .
Он был смоделирован по образцу оболочки Multics , разработанной в 1965 году американским инженером-программистом Глендой Шредер . Оболочка Multics Шредера была создана по образцу программы RUNCOM, которую Луи Пузен показал команде Multics. Суффикс «rc» в некоторых файлах конфигурации Unix (например, «.vimrc») является остатком предшественника RUNCOM оболочек Unix. [1] [4]
PWB оболочки или Mashey оболочки, ш , была вверх-совместимой версии Томпсона оболочки, дополненное энциклопедической статье и других и распространяемых с Программиста Workbench UNIX , около 1975-1977. Он сосредоточился на том, чтобы сделать программирование оболочки практичным, особенно в крупных общих вычислительных центрах. Он добавил переменные оболочки (предшественники переменных среды , включая механизм пути поиска, который превратился в $ PATH), исполняемые пользователем сценарии оболочки и обработку прерываний. Структуры управления были расширены с if / goto на if / then / else / endif, switch / breaksw /ndsw и while / end / break / continue. Поскольку программирование оболочки стало широко распространенным, эти внешние команды были включены в саму оболочку для повышения производительности.
Но наиболее широко распространен и влиятельных ранних оболочек Unix были Bourne оболочки и C оболочки . Обе оболочки использовались в качестве основы кодирования и модели для многих производных и аналогичных оболочек с расширенными наборами функций. [5]
Оболочка Борна
Bourne оболочки , ш , был новый Unix оболочки от Стивена Борна в Bell Labs. [6] Распространенная как оболочка для UNIX версии 7 в 1979 году, она представила остальные основные функции, которые считаются общими для всех оболочек Unix, включая здесь документы , подстановку команд , более общие переменные и более обширные встроенные управляющие структуры . На язык, включая использование перевернутого ключевого слова для обозначения конца блока, повлиял АЛГОЛ 68 . [7] Традиционно имя программы оболочки Bourne - sh, а путь к ней в иерархии файловой системы Unix - / bin / sh . Но также доступен ряд совместимых рабочих приложений с различными улучшениями и дополнительными функциями. Во многих системах sh может быть символической или жесткой ссылкой на одну из этих альтернатив:
- Оболочка Almquist (ясень): написана как замена Bourne Shell под лицензией BSD; часто используется в средах с ограниченными ресурсами. Sh из FreeBSD , NetBSD (и их производных) основан на ash, который был улучшен, чтобы быть совместимым с POSIX .
- Busybox : набор утилит Unix для небольших и встроенных систем, который включает 2 оболочки: ash, производную от оболочки Almquist; и тишина, независимая реализация оболочки Борна.
- Оболочка Debian Almquist (тире): современная замена пеплу в Debian и Ubuntu
- Оболочка Bourne-Again (bash): написана как часть проекта GNU для обеспечения расширенного набора функций Bourne Shell. Эту оболочку можно найти установленной и она является интерактивной оболочкой по умолчанию для пользователей в большинстве систем Linux .
- KornShell (ksh): написано Дэвидом Корном на основе исходников оболочки Bourne [8] во время работы в Bell Labs.
- Общественное достояние Korn shell (pdksh)
- Оболочка MirBSD Korn (mksh): потомок OpenBSD / bin / ksh и pdksh, разработанный как часть MirOS BSD
- Z shell (zsh): относительно современная оболочка, обратно совместимая с bash . Это оболочка по умолчанию в Kali Linux с 2020.4 и macOS с 10.15 Catalina .
Стандарт POSIX определяет свою стандартную оболочку как строгое подмножество оболочки Korn , расширенной версии оболочки Bourne. С точки зрения пользователя оболочка Bourne сразу распознавалась, когда она активна, по характерному по умолчанию символу командной строки, знаку доллара ( $ ).
Оболочка C
С оболочкой , CSH , была смоделирована на языке программирования, в том числе управляющих структурами и грамматики выражения. Он был написан Биллом Джоем, аспирантом Калифорнийского университета в Беркли , и широко распространялся вместе с BSD Unix . [9]
Оболочка C также представила множество функций для интерактивной работы, включая механизмы истории и редактирования , псевдонимы , стеки каталогов , нотацию тильды , cdpath , управление заданиями и хеширование пути . Во многих системах csh может быть символической ссылкой или жесткой ссылкой на оболочку TENEX C (tcsh), улучшенную версию исходной версии Joy. Хотя интерактивные возможности csh были скопированы в большинство других оболочек, структура языка не получила широкого распространения. Единственная подобная работа - это оболочка Hamilton C , написанная Николь Гамильтон, впервые распространенная на OS / 2 в 1988 году и на Windows с 1992 года. [10]
Файлы конфигурации
Оболочки читают файлы конфигурации в различных обстоятельствах. Эти файлы обычно содержат команды для оболочки и выполняются при загрузке; они обычно используются для установки важных переменных, используемых для поиска исполняемых файлов, таких как $ PATH , и других, которые управляют поведением и внешним видом оболочки. В таблице в этом разделе показаны файлы конфигурации для популярных оболочек. [11]
ш | кш | csh | tcsh | трепать | zsh | |
---|---|---|---|---|---|---|
/etc/.login | авторизоваться | авторизоваться | ||||
/etc/csh.cshrc | да | да | ||||
/etc/csh.login | авторизоваться | авторизоваться | ||||
~ / .tcshrc | да | |||||
~ / .cshrc | да | да [а] | ||||
~ / etc / ksh.kshrc | внутр. | |||||
/etc/sh.shrc | внутр. [b] | |||||
$ ENV (обычно ~ / .kshrc) [12] | внутр. [c] [d] | внутр. | внутр. [e] | |||
~ / .login | авторизоваться | авторизоваться | ||||
~ / .logout | авторизоваться | авторизоваться | ||||
/ etc / profile | авторизоваться | авторизоваться | авторизоваться | логин [f] | ||
~ / .profile | авторизоваться | авторизоваться | войти [g] | логин [f] | ||
~ / .bash_profile | войти [g] | |||||
~ / .bash_login | войти [g] | |||||
~ / .bash_logout | авторизоваться | |||||
~ / .bashrc | int. + n / логин | |||||
/ etc / zshenv | да | |||||
/ etc / zprofile | авторизоваться | |||||
/ etc / zshrc | внутр. | |||||
/ etc / zlogin | авторизоваться | |||||
/ etc / zlogout | авторизоваться | |||||
~ / .zshenv | да | |||||
~ / .zprofile | авторизоваться | |||||
~ / .zshrc | внутр. | |||||
~ / .zlogin | авторизоваться |
Объяснение:
- пустой означает, что файл вообще не читается оболочкой.
- «да» означает, что файл всегда читается оболочкой при запуске.
- "login" означает, что файл читается, если оболочка является оболочкой входа в систему.
- «n / login» означает, что файл читается, если оболочка не является оболочкой входа в систему.
- "внутр." означает, что файл читается, если оболочка интерактивна.
- ^ только если ~ / .tcshrc не найден
- ^ Только более новые версии Bourne Shell
- ^ Доступно в системах, поддерживающих опцию «User Portability Utilities»; Значение переменной должно быть абсолютным путем, и оно игнорируется, «если реальный и эффективный идентификаторы пользователя или реальный и эффективный идентификаторы группы отличаются». [13]
- ^ $ ENV - это $ HOME / .shrc в новых версиях Bourne Shell.
- ^ То же поведение, что и sh , но только при вызове как sh (bash 2+) или, начиная с bash 4.2, также при явном вызовев режиме совместимости с POSIX (с параметрами --posix или -o posix ). [14]
- ^ a b Только в режиме совместимости sh / ksh (при вызове как bash, sh, ksh)
- ^ a b c Первый доступный для чтения файл в порядке ~ / .bash_profile , ~ / .bash_login и ~ / .profile ; и только ~ / .profile, если вызывается как sh или, по крайней мере, с Bash 4.2, если вызывается явно в режиме совместимости с POSIX (с параметрами --posix или -o posix )
Прочие снаряды
Варианты концепции оболочки Unix, которые не происходят от оболочки Bourne или оболочки C, включают следующее: [15]
- es - rc-совместимая оболочка функционального программирования, написанная в середине 1990-х годов.
- Дружественная интерактивная оболочка (рыба) - впервые выпущена в 2005 году.
- PowerShell - объектно-ориентированная оболочка, изначально разработанная для ОС Windows и теперь доступная для macOS и Linux.
- Qshell - оболочка в операционной системе IBM i, основанная на стандартах POSIX и X / Open .
- rc - оболочка по умолчанию на Plan 9 от Bell Labs и Unix версии 10, написанная Томом Даффом . Были сделаны порты для различных Unix-подобных операционных систем.
- scsh - Оболочка схемы .
- wish - оконная оболочка для Tcl / Tk .
Смотрите также
- Сравнение командных оболочек
- Список команд Unix
- Цикл чтения-оценки-печати
- Ограниченная оболочка
- Оболочка (вычисления)
- Счет Shell
- Сценарий оболочки
- Лопатой для снарядов
Рекомендации
- ^ a b Том Ван Флек (1995-02-05). «Юникс и Мультик» . MultICAL.org . Проверено 14 августа 2012 .
- ^ Борн, Стивен Р. (октябрь 1983 г.). «Оболочка Unix» . БАЙТ . п. 187 . Проверено 30 января 2015 года .
- ^ "Порт V6 Thompson Shell - История" . V6shell.org . Проверено 14 августа 2012 .
- ^ Луи Пузен (25 ноября 2000 г.). «Происхождение ракушки» . MultICAL.org . Проверено 14 августа 2012 .
- ^ Николай Безруков (13.08.2015). «Введение в историю оболочки Unix» . Мягкая панорама . Проверено 21 августа 2016 .
- ^ «Панцирь Борна, или ш» . Интервью со Стивом Борном . Компьютерный мир . 2009-03-05 . Проверено 21 августа 2016 .
- ^ " Re: Возвращение к поздним шароварам " . Проверено 20 сентября 2014 года .
- ^ Корн, Дэвид Г. (26 октября 1994 г.), "ksh - An Extensible High Level Language" , Proceedings of the USENIX 1994 Very High Level Languages Symposium , USENIX Association , извлечено 5 февраля 2015 г. ,
Вместо изобретения нового языка сценариев, мы создали систему ввода формы, изменив оболочку Bourne, добавив при необходимости встроенные команды.
- ^ Харли Хан, Руководство Харли Хана по Unix и Linux .
- ^ «Оболочка Hamilton C для Windows Release Notes 4.0» . Проверено 20 сентября 2014 года .
- ^ «Различные оболочки UNIX» . unixnote.com. 2010 . Проверено 21 августа 2016 .
- ^ SCO Unix Group, SCO Unixware 7 документации, 22 Апрель 2004, извлекаться 18 окт 2012 .
- ^ «Командный язык оболочки» . opengroup.org . Проверено 15 июня 2015 года .
- ^ «Справочное руководство Bash: файлы запуска Bash» . gnu.org . Проверено 15 июня 2015 года .
- ^ «Порты FreeBSD: оболочки» . Freebsd.org. 2014-03-30 . Проверено 5 апреля 2014 .