# Terminal, Console e Shell

Nesse artigo vou explorar o significado de alguns termos que costumam aparecem bastante nesse contexto de linhas de comando que são: terminal, console, shell e linha de comando.

## terminal

O terminal é um dispositivo utilizado para comunicação entre o usuário e o computador, geralmente utilizando formato de texto.

Antigamente eram utiizados dispositivos físicos como por exemplo o VT100 que era um vídeo terminal, com um teclado e tela, que eram apenas dispositivos de entrada e saída conectados em grandes computadores que executavam o processamento de fato.

[![DEC VT100 terminal transparent](https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/DEC_VT100_terminal_transparent.png/500px-DEC_VT100_terminal_transparent.png align="center")](https://commons.wikimedia.org/wiki/File:DEC_VT100_terminal_transparent.png)

Existiam também, antes dos dispositivos com telas, alguns terminais que pareciam máquinas de escrever eletro-mecânicas que eram chamados de TeleTypewriters. Eles eram utilizados para envio de mensagens remotas antes dos computadores existirem, e depois foram adaptados para uso em computadores.

Esses dispositivos deram origem à sigla **tty** que ainda é bastante utilizada nos dias de hoje.

[![WACsOperateTeletype.jpg](https://upload.wikimedia.org/wikipedia/commons/8/89/WACsOperateTeletype.jpg align="center")](https://commons.wikimedia.org/wiki/File:WACsOperateTeletype.jpg#/media/File:WACsOperateTeletype.jpg)

[![IBM 2741 Communications Terminal](https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/IBM_2741_Communications_Terminal.jpg/500px-IBM_2741_Communications_Terminal.jpg align="center")](https://commons.wikimedia.org/wiki/File:IBM_2741_Communications_Terminal.jpg)

Hoje quando utilizamos o nome **terminal**, geralmente estamos nos referindo à softwares emuladores de terminal, como por exemplo: [xterm](https://invisible-island.net/xterm/), [gnome terminal](https://help.gnome.org/users/gnome-terminal/stable/), [terminator](https://gnome-terminator.org/), [kitty](https://sw.kovidgoyal.net/kitty/overview/), [alacritty](https://alacritty.org/) etc. Esses softwares simulam o comportamento dos antigos terminais físicos.

![gnome-terminal](https://cdn.hashnode.com/res/hashnode/image/upload/v1686721885668/nQFWjGdlI.png align="center")

## console

O termo **console** se refere ao equipamento físico (ou painel de controle) diretamente conectado ao computador, utilizado para operação do mesmo, e também pode ser um terminal físico.

[![IBM 1620 Model 1](https://upload.wikimedia.org/wikipedia/commons/e/e9/IBM_1620_Model_1.jpg align="center")](https://commons.wikimedia.org/wiki/File:IBM_1620_Model_1.jpg)

Nas distribuições Linux atuais existem alguns **consoles virtuais**, que podem ser acessados utilizando algumas das teclas de atalho de **Ctrl-Alt-F1** a **Ctrl-Alt-F7**.

No Ubuntu 22.10 desktop por exemplo, **Ctrl-Alt-F1** está associado à tela de login e **Ctrl-Alt-F2** à sessão gráfica do usuário. Das teclas **Ctrl-Alt-F3** a **Ctrl-Alt-F6** os **virtual consoles** (também chamados de **tty**) podem ser acessados.

![virtual-console-tty](https://cdn.hashnode.com/res/hashnode/image/upload/v1686721914802/IS9q3FlMU.png align="center")

## shell

Shell são programas interpretadores de comandos, que recebem os comandos do usuário através do terminal. Os comandos são executados e a saída dos mesmos por padrão também é direcionada ao terminal para que o usuário visualize os resultados.

O shell mais comum, facilmente encontrado em servidores Linux, é o [Bash](https://en.wikipedia.org/wiki/Bash_\(Unix_shell\)).

Outro shell bastante comum em workstations é o [zsh](https://en.wikipedia.org/wiki/Z_shell). É o que eu mais utilizo, em conjunto com o [Oh My Zsh](https://ohmyz.sh/), que possui vários plugins e customizações.

## CLI e linha de comando

CLI significa **Command Line Interface** (interface de linha de comando).

É um tipo de interface de aplicação onde ela apresenta ao usuário um prompt e aguarda que o usuário digite comandos. A parte onde o usuário digita é chamada de linha de comando.

![shell-prompt](https://cdn.hashnode.com/res/hashnode/image/upload/v1686721988311/hQxpGsdM1.png align="center")

Ao enviar os comandos, a aplicação os interpreta, executa e exibe os resultados ao usuário.

Os shells Linux são aplicações que implementam esse tipo de interface.

## conclusão

Os termos, apesar de estarem relacionados, as vezes até se confundirem, possuem diferenças.

Eles também tem uma forte relação com a história da evolução dos computadores.

## referências

*   [https://en.wikipedia.org/wiki/Computer\_terminal](https://en.wikipedia.org/wiki/Computer_terminal)
    
*   [https://en.wikipedia.org/wiki/System\_console](https://en.wikipedia.org/wiki/System_console)
    
*   [https://askubuntu.com/questions/506510/what-is-the-difference-between-terminal-console-shell-and-command-line/506628#506628](https://askubuntu.com/questions/506510/what-is-the-difference-between-terminal-console-shell-and-command-line/506628#506628)
    
*   [http://www.linusakesson.net/programming/tty/index.php](http://www.linusakesson.net/programming/tty/index.php)
    
*   [https://askubuntu.com/questions/917320/switching-between-virtual-console-and-gui](https://askubuntu.com/questions/917320/switching-between-virtual-console-and-gui)
    
*   [https://www.youtube.com/watch?v=gItWfeDMLVg](https://www.youtube.com/watch?v=gItWfeDMLVg)
