Existem alguns níveis de abstração envolvidos na apresentação do que você vê na captura de tela que você forneceu. Vou tentar resumir, embora este seja um tema bastante amplo.
Emulador de terminal
O que você descreve:
a window where I can type commands to linux
não é realmente bash, pelo menos não por si só. Você está olhando para um emulador de terminal que executa seu shell (provavelmente /bin/bash
).
O exemplo mais citado de um emulador de terminal é o xterm
, que é incluído em praticamente todos os sistemas Unix e Linux de desktop. No entanto, existem muitos emuladores de terminal, alguns dos quais têm substancialmente mais recursos do que xterm
, como controles adicionais do mouse, guias (semelhantes a guias do navegador), etc.
Console Linux (também conhecido como "modo de texto")
Você também pode usar sua máquina Linux como um terminal físico , que é o que você veria ao inicializar um Linux Sistema Unix sem um ambiente gráfico (como é o caso de muitos sistemas configurados como servidores). O Linux ainda abstrai isso de alguma forma (permitindo múltiplos terminais virtuais em um computador físico), mas efetivamente eles se assemelham ao seu monitor ser uma exibição de "somente texto" dedicada.
Shell
O emulador de terminal pode executar qualquer programa de linha de comando de que goste. Por padrão, ele apenas executa um shell interativo (por exemplo, bash, sh, csh, ksh etc.). Então, o que é uma concha?
Simplesmente, um shell é um programa de linha de comando como qualquer outro. Se executado no modo interativo (ou seja, não executando um shell script pré-programado), ele apresenta um prompt (geralmente algo como type_outcast:~$
), e então pega o que você digita e interpreta de acordo com seu próprio conjunto de regras ( língua). Cada shell é um pouco diferente, mas a maioria dos shells comuns é muito semelhante.
O que acontece quando você digita um comando?
Quando você digita um comando (por exemplo, ls -l
) e pressiona Enter, o shell verifica a sequência que você digitou e decide o que fazer. Nesse caso, ele procura por um programa chamado ls
na variável $PATH
e, quando o encontra, ele é executado em um processo filho ( fork()
e exec()
sistema chama se você quiser saber os internos) com o argumento que você forneceu ( -l
).
A saída do comando (conhecida como stdout
ou "saída padrão", também stderr
ou "erro padrão") é, por padrão, conectada ao terminal, assim você vê a saída do seu programa. Da mesma forma, stdin
("entrada padrão") também é conectado por padrão, portanto, você pode digitar entradas em programas interativos. (Às vezes, o programa assumirá um controle mais direto do terminal, que é um tópico de programação intermediário.)
E sobre todas aquelas cores e menus extravagantes?
A maioria dos emuladores de terminal aceita cores e vários códigos de controle (normalmente seqüências de escape ANSI , além de mais alguns códigos específicos de terminal ). Esses códigos podem ser usados para desenhar interfaces coloridas, como a caixa de diálogo que você vê na captura de tela.
Em outras palavras, não há nenhum voodoo significativamente novo aqui. Meu sistema no começo dos anos 80 (muito antes do Windows aparecer) entendia os códigos ANSI e mostrava diálogos similares, quando meu terminal era simplesmente um monitor EGA (80x25 cores).
Então, o que mudou?
Relativamente pouco mudou desde então, exceto talvez pela prevalência muito mais ampla de desktops gráficos, que inspiraram aplicativos de emulador de terminal, para que as pessoas pudessem ter dimensões terminais maiores e ter seus terminais conectados com suas aplicações gráficas, em vez de ter que dedicar seu monitor e teclado a uma tela de texto somente 80x25 ou 80x43.