Qual é a diferença entre shell, console e terminal?

188

Estou confuso com a terminologia. Qual é a diferença entre shell, console e terminal?

garras
fonte
8
e quanto prompte até command line?
N611x007
1
Dê uma olhada nesta pergunta do Unix e Linux: unix.stackexchange.com/questions/4126/…
Flimm
4
Minha esposa disse "a tela preta"
Kenji Noguchi

Respostas:

168

No mundo do Linux, todos podem ter a mesma aparência do ponto de vista do usuário no teclado. As diferenças estão em como elas interagem umas com as outras.

O shell é o programa que realmente processa comandos e retorna a saída. A maioria dos shells também gerencia processos de primeiro e segundo plano, histórico de comandos e edição de linha de comando. Esses recursos (e muitos mais) são padrão bash, o shell mais comum nos modernos sistemas linux.

Um terminal refere-se a um programa wrapper que executa um shell. Décadas atrás, esse era um dispositivo físico que consistia em pouco mais que um monitor e teclado. Como os sistemas unix / linux adicionaram melhores sistemas de multiprocessamento e de janelas, esse conceito de terminal foi abstraído para o software. Agora você tem programas como o Gnome Terminal, que abre uma janela em um ambiente de janelas do Gnome, que executa um shell no qual você pode inserir comandos.

O console é um tipo especial de terminal . Historicamente, o console era um único teclado e monitor conectado a uma porta dedicada do console serial em um computador usado para comunicação direta em um nível baixo com o sistema operacional. Os sistemas linux modernos fornecem consoles virtuais . Eles são acessados ​​através de combinações de teclas (por exemplo, Alt+ F1ou Ctrl+ Alt+ F1; as teclas de função numeram consoles diferentes) que são tratadas em níveis baixos do sistema operacional linux - isso significa que não há nenhum serviço especial que precise ser instalado e configurado para executar . A interação com o console também é feita usando um programa shell .

Doug Harris
fonte
1
Antes dos terminais serem monitores com teclados, eram teletipos - uma espécie de máquina de escrever elétrica. en.wikipedia.org/wiki/Teleprinter
Kevin Panko
13
Console às vezes significa "o teclado e o monitor fisicamente conectados a este computador". Por exemplo, "Eu entrei no console porque o servidor não estava respondendo à rede".
Kevin Panko
1
@ Doug Harris: Você pode adicionar algumas fotos do hardware de que está falando?
garras
1
Quando eu estava na faculdade, no final dos anos 80, trabalhei bastante nos terminais DEC VT220 - en.wikipedia.org/wiki/VT220 - Esse é um bom exemplo do dispositivo físico que descrevi.
Doug Harris
5
Então, se os terminais e consoles são, nos dias atuais, cada um implementado em software - qual é a diferença entre os dois (agora)?
Gavin Esperança
15

Um shell é um programa que exibe um prompt e espera que você digite comandos. Ele os executa e depois imprime outro prompt. Então, como o CMD no Windows ou o Bash no Unix. Pode ser executado em um terminal ou no console.

Um console era originalmente uma coisa física, um painel de controle. Em termos de computação, geralmente significa a exibição que você vê antes da GUI iniciar ou depois de terminar; às vezes você pode mudar para exibi-lo em vez da GUI. É o local em que o sistema operacional imprime mensagens de erro. Em um computador multiusuário, é a tela realmente conectada ao computador. Só para confundir você, no Windows também pode significar uma janela com um shell de comando, ou seja, um terminal.

Um terminal também era originalmente hardware, usado para se comunicar com um computador. Atualmente, geralmente se refere a uma janela com uma linha de comando (shell), que pode aparecer em uma janela da GUI ou em vez de uma GUI.

Peter Westlake
fonte
2

Um terminal é uma interface baseada em texto (possivelmente para um shell)

A diferença entre console e shell é uma que ainda não compreendo, mas posso dizer como um terminal é diferente de um shell.

O terminal é (de acordo com a Wikipedia ) "uma interface serial de computador para entrada e exibição de texto. As informações são apresentadas como uma matriz de caracteres formados pré-selecionados".

Você pode usar um terminal para interagir com um shell, mas também pode interagir com uma GUI baseada em texto , às vezes chamada de Interface do Usuário do Terminal . Por exemplo:

  • O Vim possui elementos da GUI, incluindo números de linha e guias nomeadas
  • O Nano possui elementos da GUI, incluindo um menu de ajuda dos comandos
  • O Tmux possui elementos da GUI, incluindo uma barra de status e linhas divisórias entre painéis
  • O Minicom possui elementos da GUI, incluindo menus e uma barra de status

Em cada caso, os elementos da GUI são "desenhados" com texto em vez de pixels.

Nathan Long
fonte
Não tenho certeza se essa definição é apenas baseada em texto. De certa forma, algumas GUIs podem ser consideradas terminais imo.
jiggunjer
2

Para iniciantes

Para uma descrição mais detalhada: https://askubuntu.com/a/506628/130518

  • terminal = ambiente de entrada / saída de texto
  • console = terminal físico
  • shell = intérprete da linha de comando

Descreverei o caso de uso mais normal para isso no texto a seguir.

Um terminal usa um shell. Um shell pode funcionar sem um terminal.

Para se relacionar com itens do cotidiano:

  • Terminal -> tela da TV em sua casa
  • Shell -> Programa em execução na tela da TV

Outra maneira de ver isso: seus ouvidos (entrada) e boca (saída) são os terminais para o som. Seu cérebro é o intérprete desses sons usando um shell específico (processamento).

O terminal é para nós, humanos, para que possamos ler e escrever de / para o shell. Os shells podem ser executados em processos em segundo plano que não exigem interação humana, por exemplo, trabalho cron e, portanto, não requerem um terminal.

Poucos exemplos de terminais que existem:

  • Prompt de comando
  • guake
  • gnome-terminal
  • Exterminador do Futuro

Poucos exemplos de conchas que existem:

  • Bater
  • sh (casca Bourne)
  • PowerShell [janelas]
  • zsh (shell Z)

Eu escrevi apenas como esses dois normalmente funcionam, existem outras maneiras de trabalhar, mas isso é para um usuário mais avançado.

Karl Morrison
fonte
1

Pense em outro contexto, que é desenvolvimento.
Mesmo que você não tenha um conhecimento muito profundo do desenvolvimento, provavelmente conhece o básico, ou seja: edita um programa, envia-o a um compilador ou a um intérprete que cria um aplicativo compilado.
O console é como o editor do seu programa; ajuda você a escrever, mas na verdade não executa nada: quando você termina, envia para o compilador.

Você pode usar seu editor preferido, vim, gedit, emacs, bloco de notas ++, Netbeans, eclise etc.etc, mas no final são apenas ferramentas diferentes: se você escrever o mesmo programa, a saída será a mesma.
Nesta metáfora, o shell é o compilador. Os comandos inseridos no terminal são enviados ao shell que os interpreta e os executa imediatamente.
Portanto, enquanto os terminais são apenas front-ends para o shell, o shell contém o idioma real, como acontece no compilador.

Obviamente, um terminal não é exatamente um editor de texto, principalmente porque não produz um arquivo, mas envia texto ao shell subjacente e recupera a saída dele.

E o shell não é um compilador; na verdade, ele interpreta seu comando e o executa imediatamente, em vez de criar um executável.

Mesmo com essa grande diferença, acho que essa metáfora ajuda muito na compreensão dessa idéia.

AgostinoX
fonte
0

Realmente não há muita diferença. No passado, quando o "shell" era um programa, o "terminal" era um invólucro de interface para esse programa, e o "console" era a conexão física com o computador (teclado / tela).

Há uma diferença dependendo do SO que você está executando. O shell "padrão" é o BASH , que normalmente está disponível em todos os tipos de Linux / Unix. O Windows usa um shell totalmente diferente.

Josh K
fonte