Originalmente, você tinha apenas terminais burros - no começo, na verdade, máquinas de escrever (semelhantes a uma máquina de escrever elétrica, mas com um rolo de papel) (daí / dev / tty - TeleTYpers), mas depois telas + combos de teclado - que acabavam de enviar um código-chave para o computador e o computador retornou um comando que escreveu a carta no terminal (ou seja, o terminal não tinha eco local, o computador teve que solicitar ao terminal que escrevesse o que o usuário digitou no terminal) - esse é um dos motivos por que tantos comandos Unix importantes são tão curtos. A maioria dos terminais era conectada por linhas seriais, mas (pelo menos) um era diretamente conectado ao computador (geralmente a mesma sala) - esse era o console. Apenas alguns usuários selecionados foram confiáveis para trabalhar no "console" (esse costuma ser o único "terminal" disponível no modo de usuário único).
Mais tarde, houve também alguns terminais gráficos (os chamados "xterminais", que não devem ser confundidos com o xterm
programa), com tela e placa gráfica, teclado, mouse e um processador simples; o que poderia apenas executar um servidor X. Eles não fizeram nenhum cálculo, então os clientes X rodaram no computador ao qual estavam conectados. Alguns tinham discos rígidos, mas também podiam inicializar pela rede. Eles eram populares no início dos anos 90, antes dos PCs se tornarem tão baratos e poderosos.
Um "emulador de terminal" - a "janela do terminal" que você abre com programas como xterm
ou konsole
- tenta imitar a funcionalidade desses terminais burros. Também programas como PuTTY
(Windows) emulam terminais.
No PC, onde "o console" (teclado + tela) e "o computador" são mais uma unidade, você tem "terminais virtuais" (no Linux, as teclas Alt + F1 a Alt + F6), mas também imitar terminais de estilo antigo. Obviamente, com o Unix / Linux se tornando mais um sistema operacional de desktop usado frequentemente por um único usuário, agora você faz a maior parte do seu trabalho "no console", onde os usuários antes usavam terminais conectados por linhas seriais.
É claro que é o shell que inicia os programas. E ele usa o fork-systemcall (linguagem C) para fazer uma cópia de si mesmo com as configurações do ambiente; em seguida, o exec-systemcall é usado para transformar essa cópia no comando que você deseja executar. O shell é suspenso (a menos que o comando seja executado em segundo plano) até que o comando seja concluído. Como o comando herda as configurações de stdin, stdout e stderr do shell, o comando grava na tela do terminal e recebe entrada do teclado do terminal.