в чем разница между shell, консолью и терминалом?

<p>я запутался с терминологией. в чем разница между shell, консолью и терминалом?</p>

<p>в мире linux все они могут выглядеть одинаково с точки зрения пользователя на клавиатуре. различия в том, как они взаимодействуют друг с другом.</p><p>оболочка <strong> </strong> - это программа, которая фактически обрабатывает команды и возвращает результат. большинство оболочек также управляют передним и фоновым процессами, историей команд и редактированием командной строки. эти функции (и многие другие) являются стандартными в <code>bash</code>, самой распространенной оболочке в современных системах linux.</p><p>терминал <strong> </strong> относится к программе-оболочке, которая запускает оболочку. несколько десятилетий назад это было физическое устройство, состоящее из чуть больше, чем монитор и клавиатура. поскольку системы unix/linux добавили более совершенные многопроцессорные и оконные системы, эта концепция терминала была абстрагирована в программное обеспечение. теперь у вас есть такие программы, как <a href="http://directory.fsf.org/project/gnome-terminal/">gnome terminal</a> , которая запускает окно в оконной среде gnome, которое запускает <em> оболочку </em>, в которую вы можете вводить команды.</p><p>консоль <strong> </strong> представляет собой специальный вид терминала <em> </em>. исторически консоль представляла собой единственную клавиатуру и монитор, подключенные к выделенному последовательному консольному порту на компьютере, который используется для прямой связи на низком уровне с операционной системой. современные системы linux предоставляют <em> виртуальные консоли </em>. доступ к ним осуществляется с помощью сочетаний клавиш (например, <kbd>alt</kbd>+<kbd>f1</kbd> или же <kbd>ctrl</kbd>+<kbd>alt</kbd>+<kbd>f1</kbd>; <a href="http://en.wikipedia.org/wiki/function\_key">функциональная клавиша</a> нумерует разные консоли), которые обрабатываются на низких уровнях операционной системы linux - это означает, что не существует специальной службы, которую необходимо установить и настроить для работы. взаимодействие с консолью также осуществляется с помощью <em> shell </em> программы.</p>

<p>оболочка - это программа, которая выдает подсказку и ждет от вас ввода команд. он выполняет их, а затем печатает еще один запрос. так, как cmd в windows или bash в unix. он может работать в терминале или на консоли.</p><p>консоль изначально была физической вещью, панелью управления. в вычислительном отношении это обычно означает отображение, которое вы видите перед запуском gui или после его завершения; иногда вы можете переключиться на отображение вместо gui. это место, где операционная система печатает сообщения об ошибках. на многопользовательском компьютере это дисплей, который фактически подключен к компьютеру. просто чтобы сбить вас с толку, в windows это также может означать окно с командой shell в нем, то есть терминал.</p><p>терминал также изначально был аппаратным, использовался для связи с компьютером. в настоящее время это обычно относится к окну с командной строкой (shell), которое может появиться в окне gui или вместо gui.</p>

<p>подумайте о другом контексте, это развитие.<br> даже если вы не обладаете глубокими знаниями в области разработки, вы, вероятно, знаете основы, а именно: вы редактируете программу, отправляете ее компилятору или интерпретатору, который создает скомпилированное приложение.<br> консоль похожа на редактор вашей программы; это помогает вам в<em> написании </em>но на самом деле ничего не выполняет: когда вы закончите, вы отправите его компилятору для этого.<br> <br> вы можете использовать предпочитаемый вами редактор, vim, gedit, emacs, notepad ++, netbeans, eclise и т.д., но в конце они просто разные инструменты: если вы напишите одну и ту же программу, результат будет одинаковым.<br> в этой метафоре shell является компилятором. команды, которые вводятся в терминал, отправляются в оболочку, которая их интерпретирует и выполняет немедленно.<br> таким образом, в то время как терминалы являются лишь интерфейсом для оболочки, оболочка содержит реальный язык, как это происходит для компилятора.</p><p>очевидно, что терминал не является текстовым редактором, в основном потому, что он не создает файл, а отправляет текст в базовую оболочку и извлекает из него выходные данные.<br></p><p>и оболочка не является компилятором, фактически она интерпретирует вашу команду и выполняет ее немедленно, а не создает исполняемый файл.</p><p>даже несмотря на эту большую разницу, я нахожу эту метафору, которая очень помогает в понимании этой идеи.</p>

<h2>для начинающих начинающих</h2><p>для более подробного описания: <a href="https://askubuntu.com/a/506628/130518">https://askubuntu.com/a/506628/130518</a> </p><ul> <li>терминал = среда ввода/вывода текста</li> <li>консоль = физический терминал</li> <li>shell = интерпретатор командной строки</li> </ul><p>я опишу наиболее нормальный вариант использования этого в следующем тексте.</p><p>терминал <em>использует</em> оболочка. shell может работать без терминала.</p><p>относиться к предметам быта:</p><ul> <li>терминал -> тв экран в вашем доме</li> <li>shell -> программа, которая работает на экране телевизора</li> </ul><p>еще один способ взглянуть на это: ваши уши (вход) и рот (выход) являются терминалами для звука. ваш мозг интерпретирует эти звуки с помощью определенной оболочки (обработки).</p><p><strong> терминал для нас, людей, поэтому мы можем читать и писать в/из оболочки. </strong>оболочки могут работать в фоновых процессах, которые не требуют взаимодействия с человеком, например работа cron, и, следовательно, не требует терминала.</p><p>несколько примеров существующих терминалов:</p><ul> <li>командная строка</li> <li>guake</li> <li>гном-терминал</li> <li>терминатор</li> </ul><p>несколько примеров существующих оболочек:</p><ul> <li>bash</li> <li>ш (борн шелл)</li> <li>powershell [windows]</li> <li>zsh (z shell)</li> </ul><p>я только написал, как эти два обычно работают, есть другие способы, которыми они работают, но это для более опытного пользователя.</p>

<h2>терминал - это текстовый интерфейс (возможно, для shell)</h2><p>разницу между консолью и оболочкой я не понимаю, но могу сказать, чем терминал отличается от оболочки.</p><p><strong> терминал </strong>is ( <a href="https://en.wikipedia.org/wiki/computer\_terminal#text\_terminals">согласно википедии</a> ) "последовательный компьютерный интерфейс для ввода и отображения текста. информация представляется в виде массива предварительно выбранных сформированных символов".</p><p>вы можете использовать терминал для взаимодействия с shell, но вы также можете использовать его для взаимодействия с<strong> текстовым gui </strong>, иногда называемым <a href="https://en.wikipedia.org/wiki/text-based\_user\_interface">terminal user interface</a> . например:</p><ul> <li> <a href="https://en.wikipedia.org/wiki/vim\_%28text\_editor%29">vim</a> имеет элементы графического интерфейса, включая номера строк и именные вкладки</li> <li> <a href="https://en.wikipedia.org/wiki/gnu\_nano">nano</a> имеет элементы gui, включая меню справки команд</li> <li> <a href="https://en.wikipedia.org/wiki/tmux">tmux</a> имеет элементы графического интерфейса, включая строку состояния и разделительные линии между панелями</li> <li> <a href="https://en.wikipedia.org/wiki/minicom">minicom</a> имеет элементы графического интерфейса, включая меню и строку состояния</li> </ul><p>в каждом случае элементы графического интерфейса «рисуются» текстом, а не пикселями.</p>

<p>там действительно нет большой разницы. в далеком прошлом, когда «shell» была программой, «терминал» был оболочкой для этой программы, а «консоль» была физическим соединением с компьютером (клавиатура/экран).</p><p>существует разница в зависимости от того, какую ос вы используете. «стандартная» оболочка - это <a href="http://en.wikipedia.org/wiki/bash">bash</a> , которая обычно доступна во всех версиях linux/unix. windows использует совершенно другую оболочку.</p>