Терминалы, оболочки, консоли и командные строки
Оригинал: Terminals, shells, consoles, and command lines
Автор: Seth Kenlon (Red Hat).
Дата публикации: 23 марта 2020 г.
Перевод: В.Костромин
Дата перевода: 12 мая 2020 г.
Терминалы, оболочки, консоли и командные строки связаны, но эти термины не являются синонимами. Сет Кенлон объясняет различия.
Если вы изучаете Linux или Unix, вы могли встречать термины «терминал», «командная строка», «оболочка» и «консоль», и у вас может быть справедливое замешательство относительно того, что есть что, и обозначают ли эти слова одно и то же. Определенно эти термины связаны, но есть нюансы и различия, которые могут иметь важные последствия. В этой статье вы найдете необходимые разъяснения.
Как работают компьютеры
Когда компьютер запускается, ядро ОС распознает его физические устройства и обеспечивает возможность взаимодействия между ними. Существует много разных ядер: давным-давно было ядро Unix, ядро Sun, ядро BSD, а позже появилось ядро Linux, ядро Hurd, ядро Mach и ядро NT.
И это еще не всё. Существуют специализированные ядра для различных типов вычислительных устройств. Некоторые из них совсем простые, другие очень сложные. Все зависит от потребностей устройств, на которых они запускаются.
Самый базовый набор инструкций для компьютера поддерживает его во включенном состоянии. Драйверы устройств, управляемые ядром, следят за вентиляторами, предотвращая перегрев, мониторят использование дискового пространства, управляют состоянием оперативной памяти, обнаруживают новые устройства и так далее. Самые первые компьютеры в состоянии простоя делали даже меньше этого, и каждая программа, которая запускалась на ранних моделях компьютеров, была единственной целью использования компьютера, по крайней мере на то время, пока эта программа (в виде колоды перфокарт) исполнялась. Возможность запуска фонового задания или двух приложений одновременно была невообразимой. Если вы хотели запустить два процесса одновременно, вы должны были использовать второй компьютер.
Интерактивная оболочка
Однако по мере развития комьютеров, некоторые ученые осознали, что использование компьютера для выполнения одной задачи при каждом его запуске является неэффективным и, с развитием технологий, нерациональным использованием его мощности. Поэтому они разработали нечто, что они назвали оболочкой — shell.
Существуют разные версии того, почему был выбран термин «оболочка», самое правдоподобное и удовлетворительное объяснение состоит в том, что интерфейс оболочки окружает ядро так же, как ореховая скорлупа окружает орех. Оболочка — это та часть, с которой взаимодействует пользователь, а запросы на вычислительную мощность управляются ядром.
Когда мы говорим об оболочке, важно понимать, что ее появление определило новый этап в развитии компьютерных технологий. Оболочка превратила компьютер из изолированного прибора в мощный инструмент, который может менять свою функцию по требованию. Компьютеры стали интерактивными. Даже в современных компьютерах оболочка — это самый низкий уровень взаимодействия пользователя с компьютером. Это самый прямой способ проинструктировать компьютер о том, что вы хотите делать дальше, поэтому умение использовать возможности оболочки является бесценным знанием для опытных пользователей.
Оболочка является абстрактной концепцией для многих людей. Когда мы думаем или говорим об оболочке, полезно иметь в виду какую-то конкретную. Их много и есть из чего выбрать. Самая популярная — это (GNU) Bash, но альтернативой ей могут служть Zsh и Fish. Tcsh и Ksh — это надежные старые фавориты ранних версий UNIX со строгим соответствием POSIX. Ash и Dash стремятся быть легкими и быстрыми, что делает их идеальными для встраиваемых систем и для минимальных сред. Powershell от Microsoft — это основанная на .NET оболочка с открытым кодом.
Командная строка
Когда вы обращаетесь к оболочке, вы видите вначале приглашение. Некоторые называют приглашение оболочки командной строкой, что понятно: приглашение появляется в строке, в которой вы можете ввести (набрать, напечатать) какую-то команду.
Приглашение представляет собой некоторый символ, который дает вам понять, что оболочка ожидает ваших инструкций. Обычно это символ доллара ( $ ), но это может быть также символ процента ( % ), угловая скобка ( > ), знак числа ( # ) или что-то еще. То есть приглашение оболочки может выглядеть примерно следующим образом:
Одно из заметных различий между оболочками заключается в синтаксисе. Например, в Bash, Zsh, Ash и Ksh значения переменных задаются с помощью знака равенства:
В Tcsh, однако, используется ключевое слово set :
Помощь
На первый взгляд интерфейс оболочки не очень удобен для пользователя, потому что кажется, что вы должны заранее точно знать, что вы хотите делать с помощью оболочки. Это не то, к чему привыкло большинство современных компьютерщиков, потому что графические приложения по крайней мере предоставляют пользователям кнопки и меню, которые можно исследовать, даже не зная точно, что делает приложение.
Даже если пользователь понимает, что оболочка ожидает ввода, попытка ввести какое-то слово английского или другого языка, приводит либо к выводу сообщения об ошибке, либо какой-то бессмыслицы.
Даже если вы введете команду help в ответ на приглашение Bash, вы получите только список встроенных команд, только немногие из которых могут показаться полезными для дальнейшего взаимодействия с оболочкой.
В этом смысле оболочка не похожа на привычные для вас приложения. Она действительно для большинства просто командная строка: строка, в которой вы можете набрать какую-то команду. Пользователь должен знать, какие команды доступны, и предполагается, что пользователь, открывающий оболочку, ознакомился по крайней мере с самыми простыми командами, чтобы с их помощью он мог больше узнать о системе.
Поскольку пользователь не всегда имеет даже необходимый минимум знаний, в публичных системах заменяют не всегда полезную команду help на что-то более информативное, например, на shellp.
Консоль
В Linux или BSD вы можете получить доступ к оболочке не запуская графическое окружение вообще (то есть оболочка — это все, что будет вам доступно), либо набрав сочетание клавиш Alt+Shift с одной из функциональных клавиш от F2 до F6. Каждая из этих функциональных клавиш открывает для вас экран, предоставляемый getty (или agetty, или еще чем-то подобным, в зависимости от того, что используется в вашем дистрибутиве). На этом экране отображается приглашение для входа в оболочку, и этот экран часто называют консолью. Строго говоря, это сеанс getty или эмулированное tty-устройство.
На Mac нет никакого способа отказаться от запуска графического интерфейса в работающей системе, хотя во время загрузки вы можете использовать специальные (snag) клавиши для загрузки в однопользовательском режиме. В однопользовательском режиме в Mac OS отключены многие функции, в том числе управление пользователями, поэтому обычно это не рекомендуется.
Наиболее распространенный способ доступа к оболочке на современных компьютерах — это открыть эмулятор терминала, в котором запускается оболочка.
Терминал
Терминал исторически был физическим устройством, которое использовалось еще до того, как появилась концепция персонального компьютера (ПК). Терминал был в чем-то похож на современный компьютер, но на самом деле это был просто экран (иногда даже просто принтер!) с подключенной клавиатурой. Окно терминала на современном компьютере является эмуляцией этого исторического объекта, и вы обычно можете запустить любую оболочку внутри эмулятора терминала.
Например, на рабочем столе Linux вы можете запустить один экземпляр терминала GNOME (GNOME Terminal), который будет служить окном для доступа к оболочке Bash, и другой экземпляр терминала GNOME, который послужит окном в оболочку Tcsh.
Сам терминал служит только для запуска работающей оболочки. Эмулятор терминала не обрабатывает данные и не запускает команды, хотя он может добавлять функции пользовательского интерфейса, такие как специальные сочетания клавиш, возможность перетаскивания файлов в оболочку, цветовые темы и т.д.
Существует множество эмуляторов терминала для любой операционной системы. Настольные компьютеры с Linux и BSD поставляются с xterm в качестве запасного варианта и обычно включают современный эмулятор для ежедневного использования (например, GNOME Terminal, Konsole и т.д.). Mac OS поставляется с проприетарным эмулятором терминала, но существует намного лучшая замена — iTerm2 (поставляется под лицензией GPLv2).
Windows по умолчанию включает PowerShell, но существует много возможностей замены этого эмулятора программами с открытым кодом, такими как ConEmu или Cmder.
Источник
В чем разница между оболочкой, консолью и терминалом?
Я запутался с терминологией. В чем разница между оболочкой, консолью и терминалом?
6 ответов 6
В мире Linux все они могут выглядеть одинаково с точки зрения пользователя на клавиатуре. Различия в том, как они взаимодействуют друг с другом.
Оболочка — это программа, которая фактически обрабатывает команды и возвращает результат. Большинство оболочек также управляют передним и фоновым процессами, историей команд и редактированием командной строки. Эти функции (и многие другие) являются стандартными в bash , самой распространенной оболочке в современных системах Linux.
Терминал относится к программе-оболочке, которая запускает оболочку. Несколько десятилетий назад это было физическое устройство, состоящее из чуть больше, чем монитор и клавиатура. Поскольку системы Unix / Linux добавили более совершенные многопроцессорные и оконные системы, эта концепция терминала была абстрагирована в программное обеспечение. Теперь у вас есть такие программы, как Gnome Terminal, который запускает окно в оконной среде Gnome, которое запускает оболочку, в которую вы можете вводить команды.
Консоль — это особый вид терминала. Исторически консоль представляла собой единственную клавиатуру и монитор, подключенные к выделенному последовательному консольному порту на компьютере, который используется для прямой связи на низком уровне с операционной системой. Современные Linux-системы предоставляют виртуальные консоли. Доступ к ним осуществляется через комбинации клавиш (например, Alt + F1 или Ctrl + Alt + F1 ; функциональные клавиши нумеруют разные консоли), которые обрабатываются на низких уровнях операционной системы Linux — это означает, что не существует специального сервиса, который необходимо установлен и настроен для запуска. Взаимодействие с консолью также осуществляется с помощью программы оболочки.
Оболочка — это программа, которая выдает подсказку и ждет от вас ввода команд. Он выполняет их, а затем печатает другое приглашение. Так, как CMD в Windows или Bash в Unix. Он может работать в терминале или на консоли.
Консоль изначально была физической вещью, панелью управления. В вычислительном отношении это обычно означает отображение, которое вы видите перед запуском GUI или после его завершения; иногда вы можете переключиться на отображение вместо GUI. Это место, где операционная система печатает сообщения об ошибках. На многопользовательском компьютере это дисплей, который фактически подключен к компьютеру. Просто чтобы сбить вас с толку, в Windows это также может означать окно с командной оболочкой, то есть терминал.
Терминал также был изначально аппаратным, использовался для связи с компьютером. В настоящее время это обычно относится к окну с командной строкой (оболочкой), которое может появиться в окне графического интерфейса или вместо графического интерфейса.
Подумайте о другом контексте, это развитие.
Даже если у вас нет очень глубоких знаний о разработке, вы, вероятно, знаете основы, а именно: вы редактируете программу, отправляете ее компилятору или интерпретатору, который создает скомпилированное приложение.
Консоль похожа на редактор вашей программы; это помогает вам в написании, но на самом деле ничего не выполняет: когда вы закончите, вы отправляете его компилятору для этого.
Вы можете использовать предпочитаемый вами редактор, vim, gedit, emacs, notepad++, Netbeans, eclise и т.д., Но в конце концов это просто разные инструменты: если вы напишите одну и ту же программу, результат будет одинаковым.
В этой метафоре оболочка является компилятором. Команды, которые вводятся в терминал, отправляются в оболочку, которая их интерпретирует и выполняет немедленно.
Таким образом, хотя терминалы являются лишь интерфейсом для оболочки, оболочка содержит реальный язык, как это происходит для компилятора.
Очевидно, что терминал не является в точности текстовым редактором, в основном потому, что он не создает файл, а отправляет текст в базовую оболочку и извлекает из него выходные данные.
И оболочка не является компилятором, фактически она интерпретирует вашу команду и выполняет ее немедленно, вместо того, чтобы создавать исполняемый файл.
Даже несмотря на эту большую разницу, я нахожу эту метафору, которая очень помогает в понимании этой идеи.
Терминал — это текстовый интерфейс (возможно, для оболочки)
Разницу между консолью и оболочкой я не понимаю, но могу сказать, чем терминал отличается от оболочки.
Терминал является (согласно Википедии) «последовательным компьютерным интерфейсом для ввода и отображения текста. Информация представлена в виде массива предварительно выбранных сформированных символов ».
Вы можете использовать терминал для взаимодействия с оболочкой, но вы также можете использовать его для взаимодействия с текстовым графическим интерфейсом, иногда называемым пользовательским интерфейсом терминала. Например:
- Vim имеет элементы графического интерфейса, включая номера строк и именные вкладки
- Nano имеет элементы графического интерфейса, включая меню справки команд
- Tmux имеет элементы графического интерфейса, включая строку состояния и разделительные линии между панелями
- Minicom имеет элементы графического интерфейса, включая меню и строку состояния
В каждом случае элементы графического интерфейса «рисуются» текстом, а не пикселями.
Там действительно нет большой разницы. В далеком прошлом, когда «оболочкой» была программа, «терминалом» была оболочка внешнего интерфейса этой программы, а «консолью» было физическое соединение с компьютером (клавиатура / экран).
Существует разница в зависимости от того, какую ОС вы используете. «Стандартной» оболочкой является BASH, которая обычно доступна во всех версиях Linux / Unix. Windows использует совершенно другую оболочку.
Для начинающих начинающих
- терминал = среда ввода / вывода текста
- консоль = физический терминал
- shell = интерпретатор командной строки
Я опишу наиболее нормальный вариант использования этого в следующем тексте.
Терминал использует оболочку. Оболочка может работать без терминала.
Относиться к предметам быта:
- Терминал -> ТВ экран в вашем доме
- Shell -> Программа, которая работает на экране телевизора
Другой способ взглянуть на это: ваши уши (вход) и рот (выход) являются терминалами для звука. Ваш мозг интерпретирует эти звуки, используя особую оболочку (обработку).
Терминал для нас, людей, поэтому мы можем читать и писать в / из оболочки. Оболочки могут выполняться в фоновых процессах, которые не требуют взаимодействия с человеком, например, задание cron, и, следовательно, не требуют терминала.
Несколько примеров существующих терминалов:
- Командная строка
- Guake
- гном-терминал
- терминатор
Несколько примеров существующих оболочек:
- удар
- Sh (Борн оболочки)
- PowerShell [windows]
- Zsh (Z оболочка)
Я только написал, как эти два обычно работают, есть другие способы, которыми они работают, но это для более опытного пользователя.
Источник