Originalmente você tinha apenas terminais idiotas - no início, na verdade teletypewriters (semelhante a uma máquina de escrever elétrica, mas com um rolo de papel) (daí / dev / tty - TeleTYpers), mas depois screen + keyboard-combos - que acabou de enviar um código-chave para o computador e o computador mandou de volta um comando que escreveu a carta no terminal (ou seja, o terminal estava sem eco local, o computador tinha que ordenar que o terminal escrevesse o que o usuário digitou no terminal) - este é um da razão pela qual tantos comandos importantes do Unix são tão curtos. A maioria dos terminais era conectada por linhas seriais, mas (pelo menos) um era conectado diretamente ao computador (geralmente o mesmo local) - esse era o console. Apenas alguns usuários selecionados eram confiáveis para trabalhar no "console" (esse era o único "terminal" disponível no modo de usuário único).
Mais tarde, também houve alguns terminais gráficos (os chamados "xterminals", que não devem ser confundidos com o programa xterm
) com screen & cartão de tela gráfica, teclado, mouse e um processador simples; que poderia apenas executar um servidor X. Eles não faziam cálculos, então os clientes X rodavam 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 de terminal" que você abre com programas como xterm
ou konsole
- tenta imitar a funcionalidade de tais terminais burros. Também programas como PuTTY
(Windows) emulam terminais.
Com o PC, onde "o console" (teclado + tela) e "o computador" são mais de uma única unidade, você tem "terminais virtuais" (no Linux, teclas Alt + F1 a Alt + F6) mas estes também imitam terminais de estilo antigo. É claro que, com o Unix / Linux se tornando um sistema operacional mais comumente usado por um usuário único, você agora faz a maior parte do seu trabalho "no console", onde os usuários antes usavam terminais conectados por linhas seriais.
É claro que o shell inicia os programas. E usa o fork-systemcall (linguagem C) para fazer uma cópia de si mesmo com um ambiente de configurações, 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 gravará na tela do terminal e receberá a entrada do teclado do terminal.