ti-enxame.com

Qual é a diferença exata entre um 'terminal', um 'Shell', um 'tty' e um 'console'?

Eu acho que esses termos quase se referem à mesma coisa, quando usados ​​livremente:

  • terminal
  • Concha
  • tty
  • console

A que exatamente cada um desses termos se refere?

1278
Lazer

Um terminal está no final de um fio elétrico, um Shell é o lar de uma tartaruga, tty é uma abreviação estranha e um console é uma espécie de gabinete.

Bem, etimologicamente falando, de qualquer maneira.

Na terminologia unix, a resposta curta é que

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

Console, terminal e tty estão intimamente relacionados. Originalmente, eles significavam um equipamento através do qual você podia interagir com um computador: nos primeiros dias do unix, isso significava um dispositivo do tipo teleprinter - semelhante a uma máquina de escrever, às vezes chamada de teletypewriter, ou “tty ”Em taquigrafia. O nome “terminal” veio do ponto de vista eletrônico e o nome “console” do ponto de vista dos móveis. Muito cedo na história do unix, teclados e displays eletrônicos se tornaram a norma para terminais.

Na terminologia unix, a tty é um tipo específico de arquivo de dispositivo que implementa vários comandos adicionais ( ioctls ) além da leitura e gravação. Em seu significado mais comum, terminal é sinônimo de tty. Alguns ttys 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 saída transmitidas por uma linha serial. Outros ttys, às vezes chamados pseudo-ttys , são fornecidos (através de uma fina camada do kernel) por programas chamados emuladores de terminal , como Xterm (executando no Sistema X Window ), Tela = (que fornece uma camada de isolamento entre um programa e outro terminal), Ssh (que conecta um terminal em uma máquina aos programas em outra máquina), Expect (para scripts interações terminais) etc.

O terminal do Word 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 um monitor. Por exemplo, um terminal X é um tipo de thin client , um computador para fins especiais cujo único objetivo é acionar um teclado, monitor, mouse e, ocasionalmente, outros periféricos de interação humana, com os aplicativos reais sendo executados em outro , computador mais poderoso.

Um console geralmente é um terminal no sentido físico que, por alguma definição, é o terminal principal diretamente conectado a uma máquina. O console aparece no sistema operacional como um tty (implementado pelo kernel). Em alguns sistemas, como Linux e FreeBSD, o console aparece como vários ttys (combinações especiais de teclas alternam entre esses ttys); apenas para confundir as coisas, o nome dado a cada tty específico pode ser "console", "console virtual", "terminal virtual" e outras variações.

Veja também Por que um Terminal Virtual é "virtual" e o que/por que/onde é o Terminal "real"? .


Um Shell é a interface principal que os usuários veem quando fazem login, cujo objetivo principal é iniciar outros programas. (Não sei se a metáfora original é que o Shell é o ambiente doméstico do usuário ou se o Shell é o que outros programas estão executando.)

Nos círculos unix, Shell se especializou em significar Shell de linha de comando , centrado em torno da inserção do nome do aplicativo desejado para iniciar, seguido pelos nomes dos arquivos ou outros objetos nos quais o aplicativo deve atuar e pressionando a tecla Enter. Outros tipos de ambientes não usam a palavra "Shell"; por exemplo, os sistemas de janelas envolvem “ gerenciadores de janelas ” e “ ambientes de desktop ”, não um “Shell”.

Existem muitas conchas unix diferentes. Os shells populares para uso interativo incluem Bash (o padrão na maioria das instalações Linux), zsh (que enfatiza o poder e a personalização) e fish (que enfatiza simplicidade).

Os shells da 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 com base no Bourne_Shell . Ao discutir “ Programação de shell ”, o Shell é quase sempre implicado como um Shell no estilo Bourne. Alguns shells geralmente usados ​​para script, mas sem recursos interativos avançados, incluem o Korn Shell (ksh) e muitas variantes ash . Praticamente qualquer sistema semelhante ao Unix possui um Shell no estilo Bourne instalado como /bin/sh, geralmente ash, ksh ou bash.

Na administração do sistema unix, o Shell de um usuário é o programa que é chamado quando eles efetuam login. As contas de usuário normais têm um Shell de linha de comando, mas os usuários com o acesso restrito pode ter um Shell restrito ou algum outro comando específico (por exemplo, para contas apenas de transferência de arquivos).


A divisão do trabalho entre o terminal e a Shell não é completamente óbvia. Aqui estão suas principais tarefas.

  • Entrada: o terminal converte chaves em seqüências de controle (por exemplo, Left → \e[D). O Shell converte sequências de controle em comandos (por exemplo, \e[Dbackward-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, histórico e conclusão de linha e enviar apenas uma linha ao Shell quando estiver pronto para ser executado. O único terminal comum que opera dessa maneira é M-x Shell no Emacs.
  • Saída: o Shell emite instruções como “display foo”, “alterne a cor do primeiro plano para verde”, “mova o cursor para a próxima linha”, etc. O terminal atua nessas instruções.
  • O Prompt é puramente um conceito da Shell.
  • O Shell nunca vê a saída dos comandos que executa (a menos que seja redirecionado). O histórico de saída (retrocesso) é puramente um conceito terminal.
  • A cópia e colagem entre aplicativos é fornecida pelo terminal (geralmente com o mouse ou com as seqüências de teclas, como Ctrl+Shift+V ou Shift+Insert) O Shell também pode ter seu próprio mecanismo interno de copiar e colar (por exemplo, Meta+W e Ctrl+Y).
  • Job control (iniciar programas em segundo plano e gerenciá-los) é executado principalmente pelo Shell. No entanto, é o terminal que lida com combinações de teclas como Ctrl+C matar o trabalho em primeiro plano e Ctrl+Z suspendê-lo.
1253

Um terminal ou um console é uma peça de hardware, usando a qual um usuário pode interagir com um Host. Basicamente, um teclado acoplado a uma tela de texto.
Atualmente, quase todos os terminais e consoles representam os "virtuais".

O arquivo que representa um terminal é, tradicionalmente, chamado de arquivo tty. Se você procurar no diretório "/ dev" de um sistema UNIX, encontrará muitos arquivos tty conectados a consoles virtuais (por exemplo, tty1 no linux), terminais virtuais (por exemplo, pts/0) ou hardware conectado fisicamente (por exemplo, ttyS0 é o terminal serial físico, se houver, conectado à primeira porta serial do host).

Um console deve ser um hardware fisicamente conectado ao (ou parte do) Host. Ele tem um papel especial no sistema: é o ponto principal para acessar um sistema para manutenção e algumas operações especiais podem ser feitas apenas em um console (por exemplo, consulte single user mode). Um terminal pode ser, e geralmente é, uma peça remota de hardware.

Por fim, mas não menos importante, um Shell é um programa especial que interage com um usuário por meio de um controlando tty e oferece ao usuário a maneira de iniciar outros programas ( por exemplo, bash, csh, tcsh).

Um emulador de terminal é um programa que emula um terminal físico (por exemplo, xterm, gnome-terminal, minicom).

Então, quando você olha para uma "janela de texto" no seu sistema Linux (no X11), você está olhando para: um emulador de terminal , conectado a um terminal virtual , identificado por um arquivo tty , dentro do qual executa um Shell .

199
andcoz

BREVE explicação:

O console é um terminal. Um sistema possui um console e terminais potencialmente múltiplos. O console é normalmente a interface principal para gerenciar um computador, por exemplo, enquanto ele ainda está inicializando.

Um terminal é uma sessão que pode receber e enviar entrada e saída para programas de linha de comando. O console é um caso especial desses.

Um TTY é essencialmente um pseudo-dispositivo, chame-o de recurso do kernel, usado pelos processos para acessar um terminal específico. Os TTYs podem ser vinculados a hardware, como uma porta serial, ou virtuais, por exemplo, criados quando um usuário faz login através de uma rede

O Shell é um programa usado para controlar e executar programas. É frequentemente usado de forma interativa, através de um terminal. Existem vários programas Shell, sendo o Bash o Shell mais usado atualmente. Outras conchas, em nenhuma ordem específica, incluem Bourne Shell, C-Shell, Dash, Tsch, Ksh e o cada vez mais popular zsh. Existem muitos mais.

Quando você tem uma GUI, pode usar um programa de terminal para desenhar uma borda redimensionável agradável, adicionar barras de rolagem e formatar o texto etc. para uma sessão de terminal. Freqüentemente, eles são chamados emuladores de terminal e, às vezes, podem lidar com várias sessões através do conceito TAB. Um emulador de terminal geralmente inicia um Shell para permitir que você trabalhe interativamente em uma linha de comando.

51
Johan

A [~ # ~] tty [~ # ~] (ie [~ # ~] t [~ # ~] ele [~ # ~] ty [~ # ~] pewriter) é um dispositivo especial que permite que as pessoas surdos, com deficiência auditiva ou com problemas de fala usam o telefone para se comunicar, permitindo que digitem mensagens de texto. É necessário um TTY nos dois extremos da conversa para se comunicar.
OU
[~ # ~] tty [~ # ~] é terminal usado para digitar mensagem de texto.


Casca : a parte externa da cobertura protetora de uma semente, ou seja, núcleo.
OU
estrutura ou estrutura externa à parte central ou essencial de um sistema.
enter image description here


Console significa o teclado e monitora os anexos fisicamente ao computador.

36
Premraj

Já existem duas ótimas respostas, mas gostaria de adicionar informações sobre a frase "terminal virtual" . Geralmente, significa algo que fornece a aparência/funcionalidade de um terminal, i. e a emulador de terminal em sentido amplo. Mas nos primeiros dias do Linux (1994–95) era usado como sinônimo de “console virtual” (várias interfaces de usuário não relacionadas) , por alguns desenvolvedores. Esse uso persiste na documentação; dois termos diferentes foram (e são) usados ​​para se referir a tty1, tty2 ... coisinhas. Atualmente (desde 991996), “terminal virtual” também pode se referir a emuladores de terminal baseados em pty .

vt do Linux (o driver do console do sistema em modo de texto) foi a primeira parte de seu kernel. Foi inicialmente usado para conexão com mainframes e, nesse sentido, é um "terminal virtual", daí o nome. O código que controla os consoles virtuais reside em vt.c também. Os engenheiros de kernel do Linux usam consistentemente o Word "consoles" para indicar tty1, tty2 ... e usaram o prefixo "vc_" para eles. Por exemplo, existe um vc_allocate função. Por outro lado, desenvolvedores de ferramentas de espaço para usuário como kbd e console-tools usou “console virtual” (VC) e “terminal virtual” (VT) de forma intercambiável. Ī̲ entrou em contato com AndriesE. Brouwer e pediu que ele esclarecesse a terminologia usada pelos desenvolvedores iniciais (1994–95). Andries gentilmente forneceu algumas respostas. Ele afirma que VT e VC são abreviações sinônimos e "indivisíveis"). -> Em geral, um console virtual é um terminal virtual, mas o inverso não é verdadeiro. Esses "terminais virtuais" que os consoles virtuais não são de fato pseudoterminais (como Andries afirma, esses não são VT). Diferente dos consoles virtuais, onde o kernel fornece a funcionalidade de terminal para um aplicativo de console, pseudoterminals se "dispositivos" PTY para organizar a comunicação entre os aplicativos de console e o programa de criação de terminal que é executado no espaço do usuário . Exemplos são emuladores de terminal baseados em X e sshd, que aloca um pseudotty para cada sessão de login. Uma pseudotty pode não ser chamada de "console" - é um erro.

30
Incnis Mrsi
  • Terminal = Uma interface que fornece uma exibição para saída e um teclado para entrada em uma sessão do Shell.

  • Shell = intérprete que executa comandos digitados como string

  • Console: na verdade, dois tipos de console que usamos

    • Console físico = A tela e o teclado do hardware usados ​​para interagir com um sistema

    • Console virtual = Um dos vários consoles lógicos que podem suportar uma sessão de login independente.

  • tty (teletipo ou seja, terminal). = Um terminal é basicamente um dispositivo de interface do usuário que usa texto para entrada e saída.

16
Rakib

Você precisa mergulhar na história.

Havia dispositivos tipo máquina de escrever com papel e teclado. Eles foram chamados de teletipos (que significa "digite remotamente", uma vez que "tele" significa "remoto") ou ttys para abreviar. Nos anos 70, eram obsoletos por dispositivos com monitor CRT chamado glass ttys .

Qualquer computador precisa de alguma maneira de relatar seu status e erros (e, provavelmente, aceitar comandos). Isso é feito através do console , que quase sempre é conectado diretamente ao computador. Portanto, existem 2 significados para o console : algo que é usado para relatar status e algo que está conectado diretamente.

O UNIX é um sistema interativo: vários usuários podem se conectar a ele e iniciar aplicativos. Os primeiros computadores usavam teletipos ( tty ) para isso: cada usuário tinha um teletipo conectado à máquina com conexão de linha serial. Esse tipo de teletipo é chamado terminal . O UNIX também conseguiu um subsistema especial para lidar com "usuários sentados atrás de terminais", que também é chamado tty porque os primeiros terminais eram teletipos. Cada processo pode ser conectado ao tty no Unix. Isso significa que há um usuário em algum lugar sentado perto do terminal. Consulte http://www.linusakesson.net/programming/tty/ para obter mais informações.

Os usuários precisam de alguma maneira de dizer ao kernel para executar o aplicativo. Shell (sh, bash, csh, ksh, etc.) é usado para isso. O shell roda em tty , aceita comandos do usuário e pede ao kernel para executar algum aplicativo.

Mas os terminais nem sempre estão fisicamente conectados à máquina. Pode haver algum aplicativo que "emula" o terminal aceitando pressionamentos de teclas do usuário e enviando-os para algum lugar (xterm e ssh são bons exemplos). Existe uma API no Kernel chamada pseudo terminal para isso. Portanto, o seu tty pode realmente estar conectado a algum aplicativo em vez do terminal real. O Xterm usa o X11 para exibir texto e o ssh usa a conexão de rede para ele.

O IBM PC possui teclado e placa de vídeo (eles também são chamados de console às vezes). O Linux pode fazer coisas diferentes com ele:

  • Use-o como "mecanismo para relatar erros e status": console do Linux. Se você passar console =/dev/ttyS0 para o kernel, ele usará algo conectado ao COM1 como console; caso contrário, usará o console do PC.
  • Use-o para emular o terminal, o chamado terminal virtual (vty).

Também pode parar de emular o terminal no console e fornecê-lo a algum aplicativo. O aplicativo pode alternar seu modo de vídeo e usá-lo exclusivamente (X11 ou svgalib podem fazer isso).

Então, aqui estão os significados modernos:

  • terminal: Algo com o usuário real sentado atrás dele. Pode ser um terminal físico (raro) ou pseudo-terminal (xterm, ssh) ou terminal virtual (vty no Linux)
  • Shell: aplicativo (bash, tcsh, etc) que ajuda o usuário a interagir com o sistema.
  • tty: subsistema de terminal ou kernel para suportar terminais.
  • console: algo em que status e erros são relatados (/dev/console) ou teclado físico e vídeo conectado ao computador.
12
user996142

Aqui está a resposta curta -

Kernel - a parte mais interna de qualquer sistema operacional moderno que fale diretamente com o hardware real.

Wrapper Shell - em torno do Kernel real. Sempre que executamos o comando, na verdade conversamos com o Shell, que por sua vez chama as instruções apropriadas do Kernel. Além disso, o Shell é capaz de executar outras tarefas, como encontrar um programa apropriado, ao mesmo tempo em que possui comandos, nomes abreviados de nomes de arquivos, comandos de tubulação etc.

Terminal - na era da computação anterior, os computadores (conhecidos como Mainframe) eram gigantes. Portanto, era fácil ter uma única unidade de processamento e conectá-la de vários lugares. Terminal é o hardware real com dispositivos de teclado e saída conectados ao mainframe.

Console - Tipo especial de terminal que está diretamente conectado ao Mainframe para fins de Administração do SO.

tty - TeleTypewriter usado para enviar e receber dados para e do Mainframe. Usado antes que os terminais de vídeo estivessem disponíveis. Mas, convencionalmente, ainda foi nomeado como tty. Até o co-comando stty

A resposta longa e detalhada está aqui - Terminal, Console, Shell, Kernel, Comandos - Diferentes partes de um Computador

9
Palash Kanti Kundu

Além da resposta aceita e do artigo O TTY desmistificado , adorei ler esses dois artigos:

Este um é baseado no NetBSD.

Na era da pedra do Unix, os sistemas de computador consistiam em um mainframe, uma grande caixa de luzes piscantes com memória, armazenamento em massa e unidades de computação, e que executam processos iniciados por usuários ou operadores. Como o hardware era muito caro, os sistemas eram usados ​​como verdadeiros sistemas multiusuário, com muitas pessoas interagindo com o sistema ao mesmo tempo. O que geralmente não tinha - ao contrário das estações de trabalho Unix atuais - era um monitor e teclado fixos. Em vez disso, a emissão de comandos para a máquina e a recuperação da saída eram feitas em linhas seriais, usando primeiro os teletipos e os terminais CRT (tubo de raios catódicos) posteriormente. Teletipadores - é daí que os "ttys" no Unix vêm - são máquinas de escrever eletrônicas que enviam teclas pressionadas sobre a linha serial para o Host, e as respostas são enviadas de volta ao teletyper char por char na linha serial, com a impressora embutida colocando a resposta no papel, como uma máquina de escrever.

Este um é baseado no Linux.

Terminais são dispositivos que fornecem recursos aprimorados de entrada/saída além do que poderia ser alcançado com apenas arquivos, tubos e soquetes regulares. Esses recursos foram projetados para facilitar a interação entre humanos e computadores e são inúteis para programas que tentam conversar entre si.

7
Nishant

Deixe-me dar uma olhada nisso ... Vou usar o Unix e o Linux mais ou menos como sinônimos nisso. Se estou me referindo a algo histórico que antecede a existência do Linux, geralmente escreverei "Unix" e, se estou falando de algo mais recente, ou algo específico ao sabor Linux do Unix, normalmente escreverei "Linux ".

Concha

A única coisa na sua lista que é um conceito discreto que não se sobrepõe aos outros é o 'Shell'. O Shell é um programa cujo objetivo é se comunicar com um usuário e realizar operações do sistema operacional em seu nome.

Os shells mais comuns usam uma técnica chamada 'linha de comando', que consiste em enviar ao usuário algum tipo de Prompt, aguardando que o usuário digite um comando de texto e depois executando esse comando. Mas existem shells baseados em menus e até shells gráficos (como o Windows File Explorer), embora nenhuma pessoa respeitável do Unix possa chamar isso de 'Shell'.

No Unix, se alguém chama algo de 'Shell', quase certamente significa alguma forma de interface de linha de comando, como acabei de descrever. E é muito estranho no mundo Unix referir-se a qualquer coisa como um 'Shell' se não estiver se comunicando com um usuário usando o modelo tty que descrevi mais adiante.

TTY

Isso é confuso porque pode se referir a alguns tipos diferentes de coisas.

No Linux, existe um tipo de dispositivo chamado 'tty'. É um dispositivo abstrato que se espera que seja usado para comunicação bidirecional com algo que seja um usuário ou esteja recebendo alguma informação de um usuário. Às vezes, esse dispositivo abstrato pode corresponder diretamente a algum dispositivo físico. Às vezes, pode ser um programa que está apresentando a alguém uma janela na qual a comunicação aparece e na qual o usuário pode digitar.

Mas, a razão pela qual esse dispositivo abstrato existe e o motivo de ser chamado de 'tty' é que 'tty' é a abreviação de 'teletype', que era um dispositivo físico real que tinha uma impressora impressa em papel combinada com um teclado. O modelo que o dispositivo 'tty' abstrato apresenta aos programas que o estão usando é basicamente o fato de existir um teletipo na outra extremidade. Você envia caracteres e esses caracteres aparecem no teletipo. Quando você lê caracteres, esses caracteres representam teclas digitadas em um teclado.

Os antigos ttys baseados em impressoras de papel foram rapidamente substituídos pelos ttys de vídeo. Nesses, é claro, não há rolo de papel. E, de fato, é possível substituir qualquer caractere na tela. Mas, em vez de apresentar algum tipo de interface abstrata de 'tela' aos programas, espera-se que os programas enviem fluxos especiais de caracteres chamados sequências de escape que realizam uma variedade de tarefas. Geralmente, existe uma coisa abstrata chamada "cursor" que pode ser movida pela tela, e qualquer caractere enviado substituirá o que estiver no cursor e o cursor moverá um caracter mais adiante. Muitas vezes, você pode alterar a cor de um personagem que está prestes a ser impresso com seqüências de escape também.

Existem 'ttys de vidro' que não seguem esse modelo e, consequentemente, são mal tratados no mundo Unix. A família de terminais de vídeo IBM 3270 se enquadra nessa categoria.

O que as pessoas Linux/Unix normalmente chamam de 'janela Shell' é uma emulação de um tty de vidro usando uma interface gráfica do usuário. Internamente, os programas executados dentro de uma janela do Shell estão conversando com um dispositivo tty virtual que às vezes é chamado de pseudo-tty ou pseudo-terminal (também conhecido como pty).

Terminal

Um terminal é apenas um local onde computador e humanos devem interagir. Os terminais podem ser completamente gráficos e não seguir o modelo tty de nenhuma maneira, mesmo que um programa possa usar seus recursos para emular isso. Todos os ttys físicos reais (de vidro ou não) são terminais.

Console

Um console é um tipo especial de terminal que geralmente deve estar conectado de alguma maneira direta e segura ao hardware no qual o sistema operacional está sendo executado.

No Linux, o console é virtualizado de maneira reduzida, o que permite que você use um pressionamento de tecla especial para alternar entre os consoles virtuais. Mas essa virtualização é feita com um hardware real por software no kernel.

Existem maneiras de usar o Linux através do que é chamado de 'console serial', que é um console conectado ao computador através de uma porta serial como uma porta USB (ou, em alguns computadores muito pequenos e/ou muito antigos, uma porta RS-232 de algum tipo) e segue o modelo antigo de teletipo de maneira bastante rigorosa.

Novamente, a idéia é que esse console esteja conectado de maneira física direta ao computador, e não através de algum tipo de rede que permita a conexão de qualquer pessoa.

5
Omnifarious