Qual é a diferença entre Terminal, Console, Shell e Linha de Comando?

211

Qual é a diferença entre Terminal, Console, Shell e Linha de Comando?

Akiva
fonte
1
(1/2) O Agente Cool está na maior parte correto, mas a definição de Console que ele fornece é desatualizada, considerando este tópico. O link dele tem as informações corretas, se você segui-las. Leia a definição completa no link dele. O console é usado livremente para significar muitas coisas semelhantes, mas o mais importante é que geralmente se refere aos dispositivos de entrada e saída humanos LOCAL ATTACHED, como teclado, monitor e talvez mouse.
precisa saber é o seguinte
1
(2/2) Isso pode parecer um ponto pedante, mas como um sistemamadmin experiente, vou lhe dizer que não . Quando um sistema tem um problema e parece estar completamente travado / inativo / offline, você deve verificar o console físico do sistema para ver se ele ainda está funcionando, mas simplesmente perdeu a conectividade de rede. Esse pequeno detalhe pode economizar ou custar dados, processamento de informações etc. Pedante, sim. Mas importante.
precisa saber é o seguinte
6
@ 0xSheepdog Convém expandir esses comentários em uma resposta completa (incluindo definições ou explicações para os outros termos também), postados como tal. Não é ruim para uma pergunta ter várias respostas (exceto, talvez, quando elas transmitem exatamente a mesma informação e da mesma maneira). Não sei por que a prática importante de verificar uma máquina localmente depende de conhecer / chamar sua interface humana física de console, mas talvez haja um argumento de que é importante para uma comunicação eficaz com colegas ou para usar a documentação. (Você pode clarificar que, em sua resposta.)
Elias Kagan
4
Devido à sua estreita relação (veja todas as boas respostas), esses termos são às vezes usados ​​como sinônimos, o que provavelmente o levou a fazer isso.
Mark

Respostas:

143

Resposta curta:

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

Resposta longa:

Console e terminal 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.

terminal

Na terminologia unix, um terminal é um tipo específico de arquivo de dispositivo que implementa vários comandos adicionais ( ioctls ) além da leitura e gravação. 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 texto, ou com a entrada e 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 fina camada 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 , Gnome Terminal, Konsole, Terminator, etc.
  • Screen 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
  • Esperar , para interações de terminal 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 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.

Console

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 terminal (implementado pelo kernel). Em alguns sistemas, como Linux e FreeBSD, o console aparece como vários terminais (ttys) (combinações especiais de teclas alternam entre esses terminais); apenas para confundir as coisas, o nome dado a cada terminal 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"? .

Interface da Linha de comando]

Uma linha de comando é uma interface na qual 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 a Returntecla para executar esse comando.

Concha

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 (com a notável exceção recente do Gnome Shell) geralmente 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. O shell padrão do Ubuntu é Bash (como a maioria das outras distribuições Linux). Alternativas populares incluem zsh (que enfatiza poder e capacidade de personalização) e peixe (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. No Ubuntu, /bin/shé o Dash , uma variante ash (escolhida porque é mais rápida e usa menos memória que o 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.

  • Entrada: o terminal converte as teclas em seqüências de controle (por exemplo, Left\e[D). O shell converte seqüê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 para o shell quando estiver pronto para ser executado. O único terminal comum que opera dessa maneira é M-x shellno 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 de 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 as seqüências de teclas, como Ctrl+ Shift+ Vou Shift+ Insert). O shell também pode ter seu próprio mecanismo interno de copiar e colar (por exemplo, Meta+ We Ctrl+ Y).
  • O controle de tarefas (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+ Cpara eliminar o trabalho em primeiro plano e Ctrl+ Zpara suspendê-lo.

Reciclado a partir de Unix e Linux

Gilles
fonte
1
Eu teria que discordar de que você é um termo adequado para um arquivo de dispositivo de terminal e / ou o código de manipulação de terminal no kernel (tty ioctls, raw / cook, edição básica de linha). terminal = o material que manipula códigos de escape, transforma as teclas pressionadas em caracteres e desenha em uma tela (ou imprime em papel / fita). Veja minha resposta para mais detalhes.
Peter Cordes
2
@ PeterCordes Neste nível de detalhe, não há distinção. O POSIX define terminal como sinônimo de dispositivo de terminal , no sentido de um arquivo de dispositivo. Esse é o significado do Unix. Acontece que é o material que manipula códigos de escape, transforma as teclas pressionadas em caracteres e desenha na tela (ou transmite pela rede, ou registra em um arquivo, etc.).
Gilles
2
hm, sim, o terminal também é usado nesse sentido. Supondo que exista um emulador de terminal ou uma porta serial com um dispositivo de terminal conectado a ele, em uma extremidade do dispositivo de terminal que o kernel está manipulando. O tratamento do tty do kernel (no modo cozido) lida apenas com alguns códigos de controle (sinais em ^ c, edição de linha em ^ u / ^? (Delete) .Eu estou tentando desenhar uma linha entre o código tty e a parte do Linux que implementa um terminal VT100-like em uma placa gráfica e uma USB / PS2 / AT teclado Você pode compilar Linux sem isso, mas não sem tty..
Peter Cordes
3
@PeterCordes Na configuração do kernel, o suporte para terminais pode ser deixado de fora (é útil para alguns sistemas embarcados raros em que a memória é extremamente fraca); é controlado por CONFIG_TTY. O suporte para emuladores de terminal (mais propriamente chamados pseudo terminais - “emulador de terminal” nem sempre inclui telnetd, tela, espera, ...) é controlado por CONFIG_UNIX98_PTYS. O suporte para o modo de texto do PC e o teclado ou similares são controlados por CONFIG_VT. Veja drivers/tty/Kconfigna fonte do kernel.
Gilles
2
Ops, eu não tinha uma fonte recente de kernel por aí. CONFIG_TTY foi adicionado apenas em 2012. De qualquer forma, sim, espero que ajude alguém tentando entender o que são as diferentes peças do quebra-cabeça e como elas se encaixam.
6138 Peter Cordes
60

Uma representação visual.

terminal

Algo em que você pode sentar e trabalhar como um chefe.

terminal

Console

Algum hardware que faz um monte de coisas.

Console

Outro exemplo de console, seria um console de videogame, como um Super Nintendo [onde você pode jogar Actraiser]

Concha

Basicamente, um aplicativo para executar comandos.

ConchaConcha

Interface da Linha de comando]

Basicamente, qualquer coisa que você insira comandos.

CLICLI

Akiva
fonte
8
Você roubou minha ideia - eu daria basicamente a mesma resposta. Então você pode ter um voto positivo. O fato é que, embora esses termos sejam quase todos sinônimos hoje em dia, termos como "terminal" e "console" têm origem em conceitos de computação mais antigos.
thomasrutter
2
Bom esforço. Simples e fácil
A Umar Mukthar
19

No projeto de informações do Linux :

Terminal : tecnicamente, uma janela de terminal, também chamada de emulador de terminal, é uma janela somente de texto em uma interface gráfica do usuário (GUI) que emula um console.

Em nossas palavras, um aplicativo GUI, de onde podemos acessar o console de um usuário.

Console : um painel de instrumentos contendo os controles para um computador

Shell : Um shell é um programa que fornece a interface do usuário tradicional somente em texto para Linux e outros sistemas operacionais semelhantes ao Unix

Linha de comando: uma linha de comando é o espaço à direita do prompt de comando em um modo de exibição de texto em um monitor de computador (geralmente um painel CRT ou LCD) no qual um usuário insere comandos e dados

rɑːdʒɑ
fonte
5
"Terminal" significa uma tela apenas de texto físico. O que você diz é realmente "emulador de terminal".
Usuário registrado
2
@RegisteredUser Um emulador de terminal é um tipo de terminal. A palavra terminal não se limita aos terminais físicos (a palavra usual para isso é console ).
Gilles
2
Esta definição de linha de comando está errada. Uma linha de comando não se limita a um modo de exibição de texto.
Gilles
1
@ Gilles Eu o peguei no One web-Link. Você mencionou uma resposta adequada.
rɑːdʒɑ
5
@AgentCool Não questiono sua capacidade de copiar e colar. Eu questiono sua escolha de fonte. O que você publica é de sua responsabilidade, independentemente de ter escrito ou não.
Gilles
15

As respostas aqui parecem muito boas. No entanto, eles são muito secos e técnicos para o meu gosto, então eu darei uma chance.

Terminal é o fim de algo - onde termina. Por exemplo, se você pegar o metrô em alguma cidade, a estação onde você descer é o seu terminal. Ou em um aeroporto, o local onde as pessoas saem quando chegam ao país de destino é considerado o terminal. A razão pela qual o terminal no aeroporto é hoje em dia tanto o local de embarque de pessoas quanto o local de embarque das pessoas é por razões econômicas óbvias.

O objetivo de um computador é obter dados, fazer algo com eles e cuspir o resultado. Assim, o terminal é qualquer dispositivo de onde você pode obter o resultado da computação (uma tela, por exemplo). Aconteceu que, nos primeiros computadores, você geralmente tinha a entrada (teclado) e a saída (tela) como um único dispositivo. Por isso, hoje em dia os terminais são considerados dispositivos de entrada / saída. Um mouse, teclado, tela, câmera, são todos terminais.

Shell é uma coisa do sistema operacional. Em um computador, você tem o kernel, que no Ubuntu, por exemplo, é a parte do Linux. Agora, como o kernel é realmente de baixo nível, é fornecido um shell - um programa que permite ao usuário interagir com o kernel de maneira fácil. É isso que é o BASH, por exemplo.

Console é (de um dicionário)

uma superfície plana que contém os controles de uma máquina, de um equipamento elétrico etc.

É por isso que na indústria da música o quadro com todos os botões, ou em um ônibus espacial a mesa de comando, todos são considerados consoles. Super Nintendo e PS2 também são chamados de consoles historicamente, já que os primeiros dispositivos de entretenimento pareciam caixas com um monte de botões.

A linha de comando é apenas uma interface - o oposto da GUI. Ou seja, existem dois tipos de interfaces em um computador; CLI (interface da linha de comandos) e GUI (interface gráfica do usuário). A principal diferença é que o primeiro obtém entrada do teclado enquanto o segundo recebe do mouse.

Pithikos
fonte
1
O que você quer dizer com "o oposto da GUI"?
Koray Tugay
2
Com o oposto, quero dizer que você tem CLI ou GUI. Esclarei agora um pouco mais na resposta.
Pithikos
12

Para resumir minha resposta:

O Shell é um programa que processescomanda e gera returnssaída, como o bash no Linux.

Terminal é um programa que runum shell , no passado, era um dispositivo físico (antes dos terminais serem monitores com teclados, eram teletipos ) e, em seguida, seu conceito era transferido para software , como o Gnome-Terminal .

Então eu abro o Gnome-Terminal , uma janela preta aparece executando o Shell para que eu possa executar meus comandos.

Console é um tipo especial de terminal , também era um dispositivo físico. exemplo no Linux, temos o virtual consoleque eu posso acessá-los através da combinação de Ctrl+ Alt+ F1 to F7.

Às vezes, console significa o teclado e o monitor conectados fisicamente a este computador.

nux
fonte
11

Esses termos geralmente andam juntos, então as pessoas usam um dos termos para se referir à coleção. (ou seja, geralmente é óbvio no contexto que eles significam uma janela de terminal fornecendo uma interface para um shell de linha de comando).

Para evitar que isso aconteça, eu vou dizer o xterm como um substituto para o XTerm / Gnome Terminal / Konsole / mrxvt / etc / etc. O mesmo para o bash.

O console tem vários outros significados específicos, então deixe isso de lado por enquanto.

Terminal : algo que fornece interação humana com programas por meio de um fluxo bidirecional de caracteres ASCII / UTF8 / outros, geralmente com VT100 ou processamento de código de escape semelhante. (Por exemplo, backspace, excluir, teclas de seta, etc. geram códigos de escape. Os programas podem imprimir códigos de escape para mover o cursor pela tela do terminal, alternar para texto em negrito e / ou cor, limpar ou rolar a tela, etc.) antigamente, esse era frequentemente um dispositivo dedicado com tela, teclado e porta serial. Agora, geralmente é um programa como o xterm.

Existem arquivos de dispositivo para programas de leitura / gravação de / para terminais, e os terminais virtuais também têm o outro lado acessível como um arquivo de dispositivo. É aqui que o xterm grava sua entrada para que o bash possa lê-la.

Cada terminal, incluindo os virtuais, fornece edição básica de linha quando está no modo cozido (em oposição ao bruto). Isso é tratado pelo código do kernel. É o bash que fornece a edição de linha que você pode fazer com as teclas de seta. (Tente executar cate digitar se você quiser ver como é a edição de linha básica fornecida pelo kernel. O backspace funciona e algumas outras coisas de acordo com suas configurações stty.)

Embora exista muito código de kernel por trás dos dispositivos de terminal, ele seria referido como código de manipulação de terminal, não como um terminal em si.

Edit: Gilles me convenceu de que se referir a um tty como um terminal é o uso adequado. Emuladores de terminal e programas interativos executados conectados a um terminal, todos dependem da semântica do terminal implementada pelo kernel. (A maior parte desse comportamento é padronizado pelo POSIX e é o mesmo no Linux / * BSD / outro Unix.) Um editor de texto em tela cheia depende do comportamento do material tty do Unix, bem como da manipulação do código de escape do movimento do cursor, e muitos outros recursos do emulador de terminal.

No entanto, um VT100 físico com uma tela, teclado e porta serial é uma instância de um terminal. Ele não requer que um kernel Unix na outra extremidade de sua porta serial esteja completo. Algo completamente diferente pode estar enviando códigos de escape e texto ASCII e recebendo o mesmo. Seria apenas um VT100, não um terminal Unix. Um emulador de terminal e a semântica tty do Unix compõem o pacote completo de um terminal Unix em que um programa como o bash normalmente roda.

A linha de comando é um estilo de interface do usuário, onde você digita algo e, em seguida, pressione retornar para que algo aconteça. Também é usado como atalho para um shell de linha de comando, como o bash ou o MS-DOS, mas você também pode dizer "é uma ferramenta de linha de comando" sobre algo como o fdisk. Considerando apenas programas que usam um terminal para sua interface do usuário, as duas famílias principais são linha de comando e texto em tela cheia (por exemplo, um editor como vi ou emacs -nw).

Os programas de linha de comando que normalmente executam nos terminais quase sempre ainda funcionam com suas entradas e saídas redirecionadas para arquivos, mas os programas de tela cheia baseados em terminal, como editores ou clientes de email, são apenas interativos e não funcionam.

Um shell é um programa para iniciar outros programas. Em um contexto Unix, é comum significar shell de linha de comando (por exemplo, shell Bourne ou equivalente em shell C). Os shells Unix também podem ler suas entradas de arquivos, ou seja, scripts de shell. São linguagens de programação completas, com variáveis, loops e condicionais, e muitos programas são escritos em bash (ou apenas com os /bin/shrecursos de shell POSIX, para maior portabilidade). Também é fácil escrever rapidamente for i in *.something; do some_program "$i";done em um shell interativo.

Juntando tudo, um shell como o bash (ou qualquer outro programa que você iniciou executando um comando shell) receberá caracteres do /dev/pts/Ndispositivo terminal após o xterm gravar sua entrada na lateral do pseudo-terminal. Se você executar cate pressionar ^c, o código tty do kernel atuará no ^ce enviará um SIGINTpara o processo em primeiro plano naquele terminal. (Observe o uso do terminalneste contexto, para significar o Unix tty, não um emulador de terminal ou algo conectado a uma porta serial.) Isso acontece porque o shell coloca o terminal no modo "cozido" antes de iniciar qualquer programa, o que significa que o kernel age com algum controle. sequências. (O código tty ainda não tem nada a ver com a manipulação de códigos de escape do VT100, apenas alguns códigos de controle com baixo ASCII.) Se, em vez de um xterm, você estiver usando o terminal de texto do console Linux, o kernel estará fazendo a emulação do VT100 e lidar com todas essas coisas. O Linux pode ser compilado sem o suporte ao terminal de texto do console virtual, mas não sem o suporte a tty.

Às vezes, o console é usado como sinônimo de terminal (o KDE ainda possui um emulador de terminal chamado Konsole).

Como 0xSheepdog aponta, ele também tem outro significado: hardware de interação humana conectado localmente.

Em um contexto de kernel, console tem outro significado específico: é o terminal onde as mensagens de inicialização são gravadas. Esta pode ser uma porta serial. Normalmente, é claro, é o console de texto implementado pelo kernel na parte superior dos drivers para hardware gráfico e teclados USB / ps2 / AT. Se você inicializar o Linux console=tty0 console=ttyS0,115200n8na linha de comando, receberá mensagens do kernel na tela E na porta serial.

O Linux implementa consoles virtuais ( /dev/tty1para N ). Você pode trocar qual tela / teclado físico está controlando com Ctrl+ Alt+ . As distros típicas do Linux criam 6 e iniciam em todas elas; portanto, mesmo que você não possa ou não queira iniciar o X11, você pode efetuar login 6 vezes e alternar entre um comando, uma página de manual e qualquer outra coisa, sem executando um programa como tela. O Linux (o kernel) inclui um emulador de terminal no estilo VT100 para fornecer uma interface de terminal através da tela e do teclado nos consoles virtuais.FNgetty

Os 6 terminais virtuais padrão com avisos de login é o motivo pelo qual o Ctrl+ Alt+ F7retorna à sua sessão X11: o servidor X pega o próximo console virtual disponível. (O servidor X abre /dev/input/...diretamente, em vez de pressionar as teclas /dev/tty7.)

Portanto, "trocar para um console de texto" significa pressionar Ctrl+ Alt+ F1e usar esse terminal. Quando os computadores eram lentos e não tinham muita RAM, algumas pessoas passavam muito tempo nos consoles de texto, pois eram rápidos, você podia definir uma fonte legal e até alterar o tamanho do terminal para ter caracteres menores, mas mais na tela de uma só vez. Alt+ Lefte Alt+ Righttrocam para o console anterior / seguinte. (O X11 desativa isso para seu console, é claro, deixando apenas o combo Ctrl+ Alt+ .)FN

Portanto, console é o único desses termos que não tem um único significado técnico bem definido. Tem alguns diferentes. (Dependendo de como você se sente sobre o terminal adequado versus o terminal e o manuseio de tty, você pode dizer que o terminal também tem vários significados.)

Peter Cordes
fonte
2
Console, o que significa que o terminal físico “principal” não está apenas no contexto do kernel. É o mesmo significado em /dev/console. O console não é particularmente ambíguo - embora seja usado ocasionalmente no sentido mais geral de terminal , isso é muito raro (mais raro do que o terminal sendo usado para significar especificamente um console).
Gilles
1
certo, sim, eco foo | sudo tee / dev / console> / dev / null será impresso na tela, se o seu VT atual estiver no modo de texto (incluindo o console do framebuffer, não apenas literalmente o modo de texto VGA). Se você inicializou com o console em uma porta serial, acho que iria para lá. Você pode dizer que / dev / console é o arquivo do dispositivo para o que o kernel está tratando como o console do sistema. Nada mais no sistema precisa ter a noção de que existe um console tty (exceto os itens de recuperação de inicialização que iniciam um shell no console TTY se o sistema falhar ao inicializar no modo multiusuário. Geralmente do initrd)
Peter Cordes
1
O servidor xorg X (strings / usr / bin / Xorg) não usa / dev / console para obter acesso ao hardware. Ele usa / dev / tty0 e / dev / tty% d e / dev / vc /% d, para se configurar em seu próprio VT. Tenho certeza de que o Xorg ainda funcionaria bem em um PC inicializado com o console do kernel em uma porta serial. E que os terminais virtuais em modo texto ainda funcionariam. Quanto mais eu considero isso, mais me inclino a ver o console em um contexto de kernel como apenas um terminal especial, selecionado no momento da inicialização. (Linux pode realmente saída de suas mensagens de console em vários terminais ao mesmo tempo, se você pedir para ele.)
Peter Cordes
6

Penso que, nos primeiros dias dos computadores com compartilhamento de tempo, todo usuário tinha um terminal (quando podia obter um!), Mas apenas os operadores do sistema tinham um console. O console pode ser usado para tarefas como reiniciar a máquina ou obter diagnósticos do sistema que não eram possíveis nos terminais do usuário. O console estava na sala de máquinas, uma parte intrínseca do computador, enquanto os terminais podiam ser remotos. O console também incluiria luzes e interruptores de hardware, não apenas entrada e saída de texto.

Eu diria que a linha de comando é uma área em que um usuário pode digitar um comando, enquanto o shell é o programa que interpreta / obedece a esse comando. O termo "shell" é muito particular para derivados do Unix; "linha de comando" é mais uma tradição do Windows / DOS. O equivalente em mainframes é geralmente chamado de "linguagem de controle de tarefas".

Claramente, essas distinções originais tornaram-se borradas ao longo do tempo à medida que a tecnologia muda.

Michael Kay
fonte
3

Tentativa resposta curta centrada no usuário:

linha de comando - a linha em que você insere comandos. Geralmente, costumava dizer que você precisa executar algo na janela de modo de texto (interface da linha de comandos) fornecida pelo seu sistema operacional.

shell - o programa real executado pelo sistema operacional para processar as coisas em que você entra command line. Daí o nome - shell amigável para o núcleo do SO não amigável. Ele fornece prompt de comando, como $ou >, executa seus próprios comandos e aplicativos. Você sempre trabalha com o shellprograma e nunca opera diretamente com o console ou terminal.

console - é uma janela na qual seus programas em modo texto estão em execução. Esta janela processa pressionamentos de teclas, sabe que é largura e altura. Pode ser em tela cheia.

terminal - é um dispositivo com tela para humanos que aceita o fluxo de caracteres de entrada e os mostra. Não há comentários para o usuário sobre altura ou largura (apenas hacks) ou pressionamentos de teclas do teclado - apenas caracteres estão viajando para ele. O terminal processa sequências especiais nesse fluxo para tornar as coisas coloridas, limpar a tela e fazer outras coisas desagradáveis. Os terminais são esquisitos, porque é fácil mexer nas coisas se o arquivo que você está canalizando para a saída contiver seqüências especiais. Eles são populares nas interfaces de rede e de depuração de dispositivos, porque você só precisa de um único fluxo para enviar saída e controlar o dispositivo de saída e pode tapentrar em conversação sem a necessidade de inicializar ou criar uma janela.

console serial - é um console que processa o fluxo de entrada como um terminal.

anatoly techtonik
fonte
3

Este é um tópico vago, porque os termos são muito ambíguos. Eu recomendo fortemente a leitura dos links que forneci ao longo desta resposta, que também são minhas fontes para esta resposta.

Um shell é a camada acima do kernel:

  • Ele interpreta os comandos inseridos pelo usuário e os processa. O shell tem acesso ao kernel, diferentemente dos usuários. Os usuários só podem acessar o kernel digitando comandos usando um shell e usando processos (por exemplo, executando programas). Os programas usam chamadas do sistema para acessar a funcionalidade do kernel. Todas as chamadas do sistema juntas formam a API do sistema.
  • Exemplos de cascas são dados na segunda definição terminal.

Um terminal tem muitos significados:

  • (1) Um terminal de texto . Esta é a combinação de um monitor e um teclado. Um cabo conectou o terminal ao computador (geralmente indiretamente). Foi chamado de terminal, pois estava localizado na extremidade do terminal deste cabo. Esses terminais geralmente eram fisicamente separados do computador, porque muitos terminais estavam conectados a um único mainframe / computador, para que vários usuários pudessem ter acesso ao computador ao mesmo tempo.
  • (2) Uma janela de terminal, também conhecida como emulador de terminal . No Linux, uma janela de terminal é a emulação de um console, contida em uma janela da GUI. É na CLI em que você digita seu texto e essa entrada é lida pelo shell que você está usando. Existem muitos tipos de cascas (por exemplo, bash, dash, ksh88) e terminais (por exemplo, konsole, gnome).
  • (3) Para uma explicação sobre pseudo terminais , veja isso . É um par de dois 'arquivos de dispositivo' usados ​​para comunicação entre um processo e um emulador de terminal.

Um console tem muitos significados:

  • (1) um painel de instrumentos contendo os controles para um computador.
  • (2) Um console do sistema, também conhecido como console do computador . Essa é a combinação do monitor e do teclado conectado ao computador. Isso é sinônimo do que chamamos de 'terminal de texto'. Às vezes, também outros periféricos de entrada do usuário, como um mouse, fazem parte de um console.
  • (3) Uma interface de linha de comando que cobre a tela inteira. Isso contrasta com uma janela de terminal, que é uma GUI com um X no canto superior direito para fechá-la. Estes são os dois modos de exibição para CLI (interfaces de linha de comando) em sistemas semelhantes ao Unix. Da mesma forma que uma janela de terminal, o console também pode executar muitos shells.

Geralmente, os sistemas operacionais permitem executar vários consoles em um console físico (definição de console 2). Estes são chamados de consoles virtuais , também conhecidos como terminais virtuais , e podem ser acessados ​​através das combinações ctrl+ alt+ Fx. Por exemplo, se você deseja abrir o terceiro console virtual, use a combinação ctrl+ alt+ F3.

Os consoles (definição 3) podem parecer um anacronismo, mas os especialistas devem se sentir confortáveis ​​em usá-los, pois existem muitos sistemas operacionais que não suportam GUIs. Além disso, se uma GUI parar de responder, o console ainda poderá funcionar.

user1534664
fonte
2

Atualmente, a maioria dos terminais são emuladores de terminal . É um tipo de função no funcionamento de um sistema semelhante ao UNIX e, ao mesmo tempo, a interface básica oferecida pelos sistemas. De fato, tudo, incluindo a GUI, se baseia em cima disso.
Coloquialmente "terminal" também pode se referir a pontos finais em uma rede de computadores com uma topografia em estrela.

Console refere-se às interfaces (de hardware) dos terminais. Ou seja, existem consoles seriais e hoje em dia são principalmente virtuais .
A janela denominada coloquialmente como "console" - janela é um shell, conectado a um terminal do sistema, através de um console virtual.

Na época em que os computadores eram caros, uma instalação poderia ter um computador real e vários terminais conectados a ele, através de cabos seriais ("console serial"). O SO, operações, etc. foram realizados no computador físico, a entrada e a saída aconteciam no (s) console (s).
Você pode alternar entre terminais virtuais pressionando CTRL+ ALT+ F1(até F6): sobra desses tempos.
Hoje, o conceito de "thin clients" volta nessa direção, centralizando grandes quantidades de recursos e fornecendo hardware suficiente para fornecer uma interface avançada no local de trabalho real.

shell é o "mecanismo" que você vê no terminal. Ele fornece interoperabilidade com o próprio sistema e adiciona recursos interessantes, como preenchimento automático, variáveis ​​etc.
É traduzido entre o sistema operacional / kernel real que usa você e as chamadas do sistema. As chamadas de sistema sem shell são um pouco como codificação assemblere pelo menos uma shell fornece C.

linha de comando refere-se ao método de troca de entrada e saída através de uma janela de texto. A rigor, a linha na qual você digita é a linha de comando (atual). O método em geral é mais corretamente chamado de interface da linha de comandos ou CLI.

  1. núcleo
  2. oferece terminal
  3. terminal é conectado através de um console
  4. console executa shell
  5. comandos e saída são trocados via linha de comando (interface)
Marca
fonte
1
As instruções da linha de comando não são entendidas pelo kernel, mas por um shell. A “estrutura principal de instruções que o kernel entende” seria chamada do sistema. A "interface básica da linha de comando UNIX" é um shell, não há separação entre isso e os "bons recursos". Uma "janela do emulador de terminal" não é um console.
Gilles
1
@Gilles ajustado. Obviamente, confundi algumas coisas por lá.
Mark