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?
Eu acho que esses termos quase se referem à mesma coisa, quando usados livremente:
A que exatamente cada um desses termos se refere?
Respostas:
Um terminal está no final de um fio elétrico, uma concha é 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
Console, terminal e tty estão intimamente relacionados. Originalmente, eles se referiam a um equipamento através do qual você podia interagir com um computador: nos primeiros dias do unix, isso significava um dispositivo no estilo de teleprinter que se assemelha a uma máquina de escrever, às vezes chamada de teletypewriter, ou "tty", por abreviação. 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, um tty é um tipo específico de arquivo de dispositivo que implementa vários comandos adicionais ( ioctls ) além da leitura e gravação. No 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 de pseudo-ttys , são fornecidos (através de uma fina camada do kernel) por programas chamados emuladores de terminal , como o Xterm (em execução no X Window System ), Screen(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), Expect (para interações de terminal de script) etc.
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 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 em execução 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 efetuam 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 designar um shell de linha de comando , centrado em torno da inserção do nome do aplicativo que você deseja iniciar, seguido pelos nomes de 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 (o que enfatiza a 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 está implícito como um shell no estilo Bourne. Alguns shells geralmente usados para script, mas sem recursos interativos avançados, incluem o shell Korn (ksh) e muitas variantes de 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. Contas de usuário normais têm um shell de linha de comando, mas usuários com acesso restrito podem ter um shell restrito ou algum outro comando específico (por exemplo, para transferência de arquivos apenas contas).
A divisão do trabalho entre o terminal e a concha não é completamente óbvia. Aqui estão suas principais tarefas.
\e[D
). O shell converte seqüências de controle em comandos (por exemplo, \e[D
→ backward-char
).M-x shell
no Emacs.foo
”, “alterne a cor do primeiro plano para verde”, “mova o cursor para a próxima linha”, etc. O terminal atua nessas instruções.printk
a prioridade é suficiente (por exemplo, pânico do kernel). É definido passando console=DEVICE,...
na linha de comando do kernel (por exemplo, console=ttyS0,115200
para a primeira porta serial, a 115.200 bps). Normalmente, o padrão é o terminal virtual, mas isso pode ser alterado quando o kernel é compilado.
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 fisicamente conectado (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 alguma operação especial pode ser feita apenas a partir de um console (por exemplo, consulte single user mode
). Um terminal pode ser, e geralmente é, uma peça remota de hardware.
Por último, mas não menos importante, um shell é um programa especial que interage com um usuário através de um controle 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), está procurando: um emulador de terminal , conectado a um terminal virtual , identificado por um arquivo tty , dentro do qual executa um shell .
tty
em um emulador de terminal como o Konsole do KDE, a saída será / dev / pts / 0.
/dev/pts/0
é um arquivo tty, um manipulador para uma interface programática exposta pelo kernel. Através deste manipulador, um programa (por exemplo, o shell) pode interagir com um terminal (real ou virtual). Um emulador de terminal é um software que emula um terminal. O emulador pede ao kernel para criar um manipulador para permitir que os programas interajam consigo mesmos (veja man openpty
). Portanto, as informações fluem do terminal (emulador) para o manipulador tty do kernel, para o programa (e vice-versa). Programas e terminais não se falam diretamente, mas apenas através do arquivo tty (o manipulador).
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, que é 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ê possui uma GUI, pode usar um programa de terminal para desenhar uma boa borda redimensionável, adicionar barras de rolagem e formatar o texto, etc., para uma sessão de terminal. Geralmente, 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.
A TTY (ie T ELE TY pewriter) é um dispositivo especial que permite que pessoas surdas, com deficiência auditiva, ou o uso da fala-prejudicou o telefone para se comunicar, permitindo-lhes para digitar mensagens de texto. É necessário um TTY nos dois extremos da conversa para se comunicar.
OU
TTY é o terminal usado para digitar a mensagem de texto.
Concha : a parte externa de cobertura protetora de uma semente, isto é, núcleo.
OU
estrutura ou estrutura externa à parte central ou essencial de um sistema.
Console significa o teclado e monitora os anexos fisicamente ao computador.
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 um emulador de terminal em sentido amplo. Mas nos primeiros dias do Linux (1994-1995) 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 1996), “terminal virtual” também pode se referir a emuladores de terminal baseados em pty .
O Linux vt
(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 também residevt.c
. Os engenheiros de kernel do Linux usam consistentemente a palavra "consoles" para indicar tty1, tty2 ... e usaram o prefixo "vc_" para eles. Por exemplo, há uma vc_allocate
função. Por outro lado, os desenvolvedores de ferramentas de espaço do usuário como kbd
e console-tools
usaram "console virtual" (VC) e "terminal virtual" (VT) de forma intercambiável. Ī̲ entrou em contato com Andries E. Brouwere 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 sinônimos e abreviações "indivisíveis". -> Em geral, um console virtual é um terminal virtual, mas o inverso não é verdadeiro. Os "terminais virtuais" que não são consoles virtuais são de fato pseudoterminais (como Andries afirma, esses não são VT ). Diferentemente dos consoles virtuais, nos quais o kernel fornece a funcionalidade de terminal para um aplicativo de console, os pseudoterminais usam "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 esshd
, que aloca uma pseudotty para cada sessão de login. Uma pseudotty pode não ser chamada de "console" - é um erro.
Terminal = Uma interface que fornece uma exibição para saída e um teclado para entrada em uma sessão 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.
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, eles eram obsoletos por dispositivos com monitor CRT chamados ttys de vidro .
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 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", também chamado de 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. Veja http://www.linusakesson.net/programming/tty/ para 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 ( às vezes também são chamados de console ). O Linux pode fazer coisas diferentes com ele:
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:
/dev/console
) ou teclado físico e vídeo conectado ao computador.Aqui está a resposta curta -
Kernel - a parte mais interna de qualquer sistema operacional moderno que fale diretamente com o hardware real.
Shell - invólucro em torno do Kernel atual. 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, algum nome abreviado de nome de arquivo, 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 de e para o Mainframe. Usado antes que os terminais de vídeo estivessem disponíveis. Mas, convencionalmente, ainda foi nomeado como tty. Até o coommandstty
A resposta longa e detalhada está aqui - Terminal, Console, Shell, Kernel, Comandos - Diferentes partes de um computador
root
conta através sudo
ou através de um login no console. Os consoles geralmente têm um lugar especial em termos de privilégios, pois alguém que tem acesso a eles necessariamente tem acesso físico ao computador com o qual se comunica. Eles também são o método de acesso de último recurso. Se o sistema operacional estiver em um estado parcialmente quebrado (como o driver ethernet está quebrado), você ainda poderá acessar o console. É o único dispositivo de interface humana que SEMPRE deve estar disponível, independentemente do estado do sistema.
Além da resposta aceita e do artigo desmistificado The TTY , adorei ler esses dois artigos:
Este é 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 os teletipos primeiro e os terminais CRT (tubo de raios catódicos) posteriormente. Os teletipadores - é daí que vêm os "ttys" no Unix - são máquinas de escrever eletrônicas que enviam teclas pressionadas sobre a linha serial para o host,
Este é 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.
Deixe-me dar uma olhada nisso ... Vou usar o Unix e o Linux mais ou menos como sinônimo disso. Se estou me referindo a algo histórico que antecede a existência do Linux, normalmente escreverei "Unix" e, se estou falando de algo mais recente, ou algo específico ao sabor Linux do Unix, geralmente escreverei "Linux "
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, aguardar que o usuário digite um comando de texto e depois executar 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 eu descrevi mais adiante.
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 seqüê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 de 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).
Um terminal é apenas um lugar 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 (vidro ou outros) são terminais.
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 forma 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 por 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 rígida.
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.