A resposta curta é que
- terminal = ambiente de entrada / saída de texto
- console = terminal físico
- shell = interpretador de linha de comando
O console e o terminal estão intimamente relacionados. Originalmente, eles significavam um equipamento pelo qual você poderia interagir com um computador: nos primórdios do unix, isso significava um teleprinter
Na terminologia do UNIX, um terminal é um tipo particular de arquivo de dispositivo que implementa um número de comandos adicionais ( ioctls ) além de ler e escrever. Alguns terminais são fornecidos pelo kernel em nome de um dispositivo de hardware, por exemplo, com a entrada proveniente do teclado e a saída indo para uma tela de modo de texto, ou com a entrada e a saída transmitidas através de uma linha serial. Outros terminais, às vezes chamados de pseudo-terminais ou pseudo-ttys, são fornecidos (através de uma camada fina de kernel) por programas chamados emuladores de terminal . Alguns tipos de emuladores de terminal incluem:
- Aplicativos GUI em execução no Sistema X Window : Xterm , Terminal Gnome, Konsole, Terminator, etc.
- Tela e tmux , que fornece uma camada de isolamento entre um programa e outro terminal
- Ssh , que conecta um terminal em uma máquina com programas em outra máquina
- Espere , por interações terminais de script
A palavra terminal também pode ter um significado mais tradicional de um dispositivo através do qual se interage com um computador, normalmente com um teclado e uma tela. Por exemplo, um terminal X é uma espécie de thin client , um computador para fins especiais cuja única finalidade é dirigir um teclado, monitor, mouse e ocasionalmente outros periféricos de interação humana, com os aplicativos reais sendo executados em outro computador mais potente.
Um console geralmente é um terminal no sentido físico que é, por alguma definição, o terminal primário diretamente conectado a uma máquina. O console aparece para o sistema operacional como um terminal (implementado pelo kernel). Em alguns sistemas, como Linux e FreeBSD, o console aparece como vários terminais (ttys) (combinações de teclas especiais alternam entre esses terminais); apenas para confundir as coisas, o nome dado a cada terminal em particular pode ser "console", "console virtual", "terminal virtual" e outras variações.
Veja também Por que um terminal virtual é virtual e qual / porquê / onde é o terminal real? >.
Uma linha de comando é uma interface onde o usuário digita um comando (que é expresso como uma sequência de caracteres - geralmente um nome de comando seguido por alguns parâmetros) e pressiona o Return chave para executar esse comando.
Um shell é a principal interface que os usuários veem quando registram in, cujo objetivo principal é iniciar outros programas. (Eu não sei se a metáfora original é que o shell é o ambiente doméstico para o usuário, ou que o shell é o que outros programas estão executando.)
Em círculos unix, o shell se especializou em significar shell de linha de comando , centrado em torno de inserir o nome do aplicativo que deseja iniciar, seguido pelos nomes dos arquivos ou outros objetos que o aplicativo deve atuar e pressionando a tecla Enter. Outros tipos de ambientes (com a notável exceção recente do Gnome Shell) geralmente não usam a palavra “shell”; por exemplo, sistemas de janelas envolvem “ gerenciadores de janelas ” e “ ambientes de área de trabalho ”, não um “shell”.
Existem muitos shells unix diferentes. O shell padrão do Ubuntu é Bash (como a maioria das outras distribuições Linux). Alternativas populares incluem zsh (que enfatiza poder e personalização) e peixe (que enfatiza a simplicidade) .
As shells de linha de comando incluem construções de controle de fluxo para combinar comandos. Além de digitar comandos em um prompt interativo, os usuários podem escrever scripts. Os shells mais comuns têm uma sintaxe comum baseada no Bourne_shell . Ao discutir “ shell programming ”, o shell é quase sempre implícito como sendo um shell estilo Bourne. Alguns shells que são freqüentemente usados para scripts, mas não possuem recursos interativos avançados incluem o shell Korn (ksh) e muitos ash variantes. Praticamente qualquer sistema semelhante ao Unix tem um shell estilo Bourne instalado como /bin/sh
, geralmente ash, ksh ou bash. No Ubuntu, /bin/sh
é Dash , uma variante de cinza (escolhida porque é mais rápida e usa menos memória do que bash).
Na administração do sistema unix, o shell do usuário é o programa que é chamado quando eles efetuam login. As contas de usuário normais possuem um shell de linha de comando, mas os usuários com acesso restrito podem ter shell restrito ou algum outro comando específico (por exemplo, para contas somente com transferência de arquivos).
A divisão do trabalho entre o terminal e a casca não é completamente óbvia. Aqui estão suas principais tarefas.
- Entrada: o terminal converte chaves em seqüências de controle (por exemplo, Esquerda →
\e[D
). O shell converte seqüências de controle em comandos (por exemplo,\e[D
→backward-char
). - Edição de linha, histórico de entrada e conclusão são fornecidos pelo shell.
- O terminal pode fornecer sua própria edição de linha, histórico e conclusão, e enviar apenas uma linha para o shell quando estiver pronto para ser executado. O único terminal comum que opera dessa maneira é
M-x shell
no Emacs.
- O terminal pode fornecer sua própria edição de linha, histórico e conclusão, e enviar apenas uma linha para o shell quando estiver pronto para ser executado. O único terminal comum que opera dessa maneira é
- Saída: o shell emite instruções como “exibir
foo
”, “mudar a cor do primeiro plano para verde”, “mover o cursor para a próxima linha” etc. O terminal atua nessas instruções. - O prompt é puramente um conceito de shell.
- O shell nunca vê a saída dos comandos que executa (a menos que seja redirecionado). O histórico de saída (rolagem) é puramente um conceito terminal.
- Copiar e colar entre aplicações é fornecido pelo terminal (geralmente com o mouse ou seqüências de teclas como Ctrl + Deslocamento + V ou Shift + Inserir ). O shell também pode ter seu próprio mecanismo interno de copiar e colar (por exemplo, Meta + W e Ctrl + Y ).
- O controle de trabalho (lançando programas em segundo plano e gerenciando-os) é executado principalmente pelo shell. No entanto, é o terminal que lida com combinações de teclas como Ctrl + C para matar o trabalho em primeiro plano e Ctrl + Z para suspendê-lo.
Reciclado de Unix & amp; Linux