оболочка Unix
Оболочка 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 год [3] Хотя по современным стандартам он был элементарным, он представил многие основные функции, общие для всех более поздних оболочек 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: /бин/ш . Но также доступен ряд совместимых аналогов с различными улучшениями и дополнительными функциями. Во многих системах sh может быть символической ссылкой или жесткой ссылкой на одну из этих альтернатив:
- Оболочка Almquist (ясень): написана как замена Bourne Shell под лицензией BSD; часто используется в средах с ограниченными ресурсами. Sh FreeBSD , NetBSD (и их производные) основаны на ash, который был улучшен для соответствия POSIX .
- Busybox : набор утилит Unix для малых и встраиваемых систем, включающий в себя 2 оболочки: ash, производную от оболочки Almquist; и тише, независимая реализация оболочки Bourne.
- Оболочка Debian Almquist (тире): современная замена ash в Debian и Ubuntu.
- Оболочка Bourne-Again (bash): написана как часть проекта GNU для предоставления расширенного набора функций Bourne Shell. Эту оболочку можно найти установленной, и она является интерактивной оболочкой по умолчанию для пользователей большинства систем Linux .
- KornShell (ksh): написан Дэвидом Корном на основе исходников оболочки Bourne. [8] во время работы в Bell Labs
- Общественное достояние оболочки Korn (pdksh)
- Оболочка MirBSD Korn (mksh): потомок OpenBSD /bin/ksh и pdksh, разработанный как часть MirOS BSD.
- Z-оболочка (zsh): относительно современная оболочка, обратно совместимая с bash . Это оболочка по умолчанию в Kali Linux с 2020.4 и macOS с 10.15 Catalina .
Стандарт POSIX определяет свою стандартную оболочку как строгое подмножество оболочки Korn , расширенной версии оболочки Bourne. С точки зрения пользователя активная оболочка Bourne сразу распознавалась по характерному символу командной строки по умолчанию — знаку доллара ( $ ).
оболочка C
[ редактировать ]Оболочка C , csh , была смоделирована на языке программирования C, включая структуры управления и грамматику выражений. Он был написан Биллом Джоем, будучи аспирантом Калифорнийского университета в Беркли , и широко распространялся вместе с BSD Unix . [9] [ нужен лучший источник ]
Оболочка C также представила множество функций для интерактивной работы, включая механизмы истории и редактирования , псевдонимы , стеки каталогов , нотацию тильды , cdpath , управление заданиями и хеширование путей . Во многих системах csh может быть символической ссылкой или жесткой ссылкой на оболочку TENEX C (tcsh), улучшенную версию исходной версии Joy. Хотя интерактивные функции csh были скопированы в большинство других оболочек, структура языка не получила широкого распространения. Единственным аналогом является оболочка Hamilton C , написанная Николь Гамильтон, впервые распространяемая на OS/2 в 1988 году и на Windows с 1992 года. [10]
Конфигурационные файлы
[ редактировать ]Оболочки читают файлы конфигурации в различных обстоятельствах. Эти файлы обычно содержат команды для оболочки и выполняются при загрузке; они обычно используются для установки важных переменных, используемых для поиска исполняемых файлов, таких как $PATH и других, которые контролируют поведение и внешний вид оболочки. В таблице этого раздела показаны файлы конфигурации для популярных оболочек. [11]
Конфигурационный файл | ш | кш | csh | ткш | бить | zsh |
---|---|---|---|---|---|---|
/etc/.login | авторизоваться | авторизоваться | ||||
/etc/csh.cshrc | да | да | ||||
/etc/csh.login | авторизоваться | авторизоваться | ||||
~/.tcshrc | да | |||||
~/.cshrc | да | да [а] | ||||
/etc/ksh.kshrc | инт. | |||||
/etc/sh.shrc | инт. [б] | |||||
$ENV (обычно ~/.kshrc ) [12] | инт. [с] [д] | инт. | инт. [и] | |||
~/.логин | авторизоваться | авторизоваться | ||||
~/.выйти | авторизоваться | авторизоваться | ||||
/etc/профиль | авторизоваться | авторизоваться | авторизоваться | авторизоваться [ф] | ||
~/.профиль | авторизоваться | авторизоваться | авторизоваться [г] | авторизоваться [ф] | ||
~/.bash_profile | авторизоваться [г] | |||||
~/.bash_login | авторизоваться [г] | |||||
~/.bash_logout | авторизоваться | |||||
~/.bashrc | int.+n/логин | |||||
/etc/zshenv | да | |||||
/etc/zprofile | авторизоваться | |||||
/etc/zshrc | инт. | |||||
/etc/злогин | авторизоваться | |||||
/etc/zlogout | авторизоваться | |||||
~/.zshenv | да | |||||
~/.zпрофиль | авторизоваться | |||||
~/.zshrc | инт. | |||||
~/.zlogin | авторизоваться | |||||
~/.zlogout | авторизоваться |
Объяснение:
- пусто означает, что файл вообще не читается оболочкой.
- «да» означает, что файл всегда читается оболочкой при запуске.
- «вход» означает, что файл читается, если оболочка является оболочкой входа в систему.
- «n/login» означает, что файл читается, если оболочка не является оболочкой входа в систему.
- "инт." означает, что файл читается, если оболочка интерактивна.
- ^ только если ~/.tcshrc не найден
- ^ Только новые версии Bourne Shell.
- ^ Доступно в системах, поддерживающих «опцию пользовательских утилит переносимости»; значением переменной должен быть абсолютный путь, и оно игнорируется, «если реальный и эффективный идентификаторы пользователя или реальные и эффективные идентификаторы группы различны». [13]
- ^ $ENV — это $HOME/.shrc в новых версиях Bourne Shell
- ^ То же поведение, что и sh , но только если он вызывается как sh (bash 2+) или, начиная с bash 4.2, также, если он вызывается явно в режиме совместимости POSIX (с параметрами --posix или -о позикс ). [14]
- ^ Перейти обратно: а б Только в режиме совместимости sh/ksh (при вызове как bash, sh, ksh)
- ^ Перейти обратно: а б с Первый читаемый файл в порядке ~/.bash_profile , ~/.bash_login и ~/.профиль ; и только ~/.profile, если вызывается как sh или, по крайней мере, начиная с Bash 4.2, если он вызывается явно в режиме совместимости POSIX (с параметрами --posix или -о позикс )
Другие снаряды
[ редактировать ]Вариации концепции оболочки Unix, которые не происходят от оболочки Bourne или оболочки C, включают следующее: [15]
- es — RC-совместимая оболочка функционального программирования, написанная в середине 1990-х годов.
- Дружественная интерактивная ракушка (рыба) – впервые выпущена в 2005 году.
- PowerShell — объектно-ориентированная оболочка, изначально разработанная для ОС Windows и теперь доступная для macOS и Linux.
- Qshell – оболочка операционной системы IBM i , основанная на стандартах POSIX и X/Open .
- rc — оболочка по умолчанию в Plan 9 от Bell Labs и версии 10 Unix, написанная Томом Даффом . Были портированы различные Unix-подобные операционные системы.
- scsh — оболочка схемы .
- Wish — оконная оболочка для Tcl/Tk .
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б Том Ван Флек (5 февраля 1995 г.). «Юникс и мультики» . Multicians.org . Проверено 14 августа 2012 г.
- ^ Борн, Стивен Р. (октябрь 1983 г.). «Оболочка Unix» . БАЙТ . п. 187 . Проверено 30 января 2015 г.
- ^ «Порт V6 Thompson Shell — История» . V6shell.org . Проверено 14 августа 2012 г.
- ^ Луи Пузен (25 ноября 2000 г.). «Происхождение ракушки» . Multicians.org . Проверено 14 августа 2012 г.
- ^ Николай Безруков (13 августа 2015 г.). «Введение в историю оболочки Unix» . Мягкая панорама. Архивировано из оригинала 8 июня 2022 г. Проверено 21 августа 2016 г.
- ^ Борн, Стивен (5 марта 2009 г.). «А-Я языков программирования: оболочка Bourne, или sh» (интервью). Беседовал Говард Дада. Компьютерный мир . Проверено 16 августа 2022 г.
- ^ « Re: Возвращение к поздним цветущим людям » . Проверено 20 сентября 2014 г.
- ^ Корн, Дэвид Г. (26 октября 1994 г.), «ksh - расширяемый язык высокого уровня» , Труды симпозиума USENIX 1994 г. по языкам очень высокого уровня , Ассоциация USENIX , получено 5 февраля 2015 г. ,
Вместо изобретения нового скриптового языка, мы создали систему ввода форм, изменив оболочку Bourne, добавив при необходимости встроенные команды.
- ^ Харли Хан, Руководство Харли Хана по Unix и Linux: Хронология Unix/Linux .
- ^ «Оболочка Hamilton C для примечаний к выпуску Windows 4.0» . Проверено 20 сентября 2014 г.
- ^ «Различные оболочки UNIX» . unixnote.com. 2010. Архивировано из оригинала 3 апреля 2016 г. Проверено 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. 30 марта 2014 г. Архивировано из оригинала 12 января 2021 г. Проверено 5 апреля 2014 г.