Terminal x linha de comando x shell x console: eles são realmente diferentes?

Você já chamou o “terminal” de “shell” ou “linha de comando”? Embora você não esteja errado em fazer isso, há são diferenças distintas entre esses termos. Vou me aprofundar nessas diferenças e na origem dos termos; quantos você consegue acertar?

O que é um terminal?

A palavra “terminal” é a abreviação de “emulador de terminal”, um programa que imita o comportamento dos terminais de computador físicos antigos. Nos primórdios da computação, os usuários interagiam com computadores remotos através de terminais de hardware dedicados através de um link de comunicação. Esses terminais tinham um teclado e uma tela ou, em alguns casos, uma impressora. Os usuários usariam terminais para enviar comandos e visualizar a saída de texto.

O vídeo anterior mostra um terminal de computador DEC VT100 conectado a um computador mainframe restaurado.

Quando os computadores pessoais se tornaram mais difundidos, os sistemas operacionais começaram a emular terminais de hardware em software. Isso permitiu que os usuários interagissem com sistemas remotos sem a necessidade de hardware de terminal físico. Hoje, o legado dos terminais físicos continua através dos emuladores de terminal, que utilizamos de forma muito semelhante.

Um emulador de terminal permite enviar comandos e receber saída de texto de e para um computador; o terminal janela é o contêiner gráfico que o envolve. Então, tecnicamente falando, a definição comum e moderna da palavra “terminal” no Linux não se refere à janela em si, mas a um dispositivo simulado para enviar comandos e receber texto.

Caso tenha interesse, temos dois artigos sobre a história do terminal. Um cobre as três eras dos terminais Unix e outro cobre a progressão da impressão para terminais de vídeo.

O que é uma concha?

Um shell é a camada mais externa de um sistema que facilita a interação do usuário. Em um sistema operacional, o shell pode assumir a forma de uma interface de linha de comando ou de uma interface gráfica de usuário (GUI). Normalmente opera como um programa de espaço de usuário que se comunica com o sistema através de canais de espaço de usuário padrão, em vez de interagir diretamente com o kernel.

O espaço do usuário é o ambiente de tempo de execução para processos sem privilégios. Todos os seus aplicativos típicos (até mesmo aplicativos raiz) são executados no espaço do usuário. O espaço do kernel é para código privilegiado e tem poder absoluto sobre o resto do sistema e acesso direto ao hardware – por exemplo, drivers ou componentes do kernel.

Na linguagem Linux cotidiana, o shell normalmente significa um interpretador de linha de comando que aceita comandos e scripts para executar tarefas no sistema operacional. É um programa que lê e entende os comandos e os executa. Exemplos de shells típicos no Linux são Bash, Zsh e fish. Cada um desses shells possui sua própria maneira de processar comandos e executar scripts.

Você também deve ter ouvido falar do shell Gnome; este é um exemplo de shell gráfico, e os usuários fazem interface com ele para controlar o sistema – por exemplo, para criar e excluir arquivos, etc. Um shell gráfico no Linux fará interface com o sistema de janelas e assumirá a forma de menus, janelas e outras funções da área de trabalho.

O que é uma linha de comando?

Uma linha de comando (CLI ou interface de linha de comando) é simplesmente um local para inserir comandos em um sistema, normalmente por meio de um shell de comando. É um termo universal e uma linha de comando pode existir como parte de um sistema operacional ou até mesmo de um programa. As pessoas muitas vezes confundem o termo com outros termos intimamente relacionados – como terminal ou shell – mas ele tem um significado distinto. Essa distinção não o manterá acordado à noite preocupado, mas existe.

Dois exemplos comuns de linha de comando são as linhas de texto que você insere no Bash ou Zsh.

Outro exemplo de linha de comando é encontrado no Emacs, que permite inserir comandos dinamicamente usando Elisp.

O que é um console?

O console Linux é um subsistema de entrada/saída fornecido com o kernel Linux. Ele recebe mensagens e permite a interação com o kernel.

A diferença entre o console Linux e um emulador de terminal é que o driver do console Linux é executado no espaço do kernel, exibe mensagens do sistema e permite a interação diretamente com o sistema Linux. Por outro lado, os emuladores de terminal são apenas programas para despachar comandos e receber respostas e rodam inteiramente no espaço do usuário. O console Linux também possui muito menos recursos modernos do que emuladores de terminal.

O console Linux gerencia terminais virtuais chamados TTYs (também conhecidos como consoles virtuais). Você pode interagir com o console Linux por meio desses TTYs, encontrados em /dev/tty*, onde “*” é um número. Da mesma forma, os emuladores de terminal fazem interface com pseudoterminais localizados no diretório /dev/pts/ (por exemplo, /dev/pts/0, /dev/pts/1, etc.).

TTY significa teletipo. Historicamente, estes eram dispositivos eletromecânicos, muito parecidos com máquinas de escrever, que podiam enviar e receber mensagens eletrônicas através de uma linha de comunicação (como telefone, telégrafo ou linha serial). Esses dispositivos datam da era do telégrafo (uma atualização do código Morse). Os sistemas Linux modernos os emulam.

Os vídeos anteriores mostram uma máquina de teletipo conectada a um servidor Linux através de uma linha serial. O usuário está emitindo comandos e recebendo saída do console Linux por meio de nós de dispositivos TTY seriais (por exemplo, /dev/ttyS0).

Através de um mecanismo ou de outro, tanto os consoles virtuais quanto os emuladores de terminal executam um shell, que normalmente é o Bash. Os shells podem fazer com que pareçam semelhantes entre si, mas seus contextos operacionais são muito diferentes.

Você pode acessar um TTY via Ctrl+Alt+F*, onde “*” é um número (1-7). As distribuições Linux normalmente configuram o TTY1 para iniciar o gerenciador de exibição (tela de login), que por sua vez iniciará seu shell gráfico (ou seja, um ambiente de desktop). Os números de 2 a 7 normalmente estão disponíveis para uso, mas voltar para TTY1 o levará de volta à área de trabalho.

Use o comando a seguir para ver a qual console virtual sua sessão de login está anexada.

         loginctl session-status     

Minha sessão atual é conectada a vc1 (também conhecido como console virtual 1 ou TTY1), conforme mostrado na imagem anterior.

Resumindo, o console Linux é um subsistema de entrada/saída em nível de kernel que pode ser controlado por meio de um console virtual. Esses dispositivos TTY têm raízes históricas e emulam dispositivos de teletipo. Ainda é possível enviar e receber comandos para o kernel Linux através de dispositivos teletipos.


Muitas vezes as pessoas confundem esses termos, mas eles têm distinções técnicas claras. Por exemplo, a CLI poderia significar corretamente o terminal ou console. O shell pode significar qualquer um desses termos. Freqüentemente, as pessoas dizem “abra um shell”, mas o que realmente querem dizer é abrir um terminal. No entanto, você também pode realizar a tarefa designada por meio de um console virtual.

A frase correta a ser usada é “janela de terminal” para a maioria dos usuários. Você abre uma janela gráfica e executa comandos. A frase “CLI” também é válida porque pode significar qualquer interface de comando (incluindo um minibuffer Emacs). Porém, se alguém lhe pedir para abrir um console, esse é um pedido muito específico e, portanto, você deve prestar atenção ao motivo.

Agora que você sabe a diferença entre os diferentes termos, pode estar interessado em aprender o terminal Linux como iniciante.

Este artigo foi útil?
Gostei0Não Gostei0

Related posts

Não é fã do systemd? Esta distribuição alternativa do Linux init acaba de receber uma grande atualização

Use estes 7 comandos do Linux para manter seu sistema organizado e rápido

Não atualize seu PC Windows criptografado a menos que você saiba sua senha do BitLocker