Inizialmente avevi solo terminali stupidi - inizialmente in realtà teletypewriter (simile a una macchina da scrivere elettrica, ma con un rotolo di carta) (quindi / dev / tty - TeleTYpers), ma più tardi schermo + combinazioni di tastiera - che hanno appena inviato un codice-chiave al computer e il computer ha inviato un comando che ha scritto la lettera sul terminale (cioè il terminale era senza eco locale, il computer ha dovuto ordinare al terminale di scrivere ciò che l'utente ha digitato sul terminale) - questo è uno dei motivi perché così tanti importanti comandi Unix sono così brevi. La maggior parte dei terminali erano collegati tramite linee seriali, ma (almeno) uno era direttamente collegato al computer (spesso nella stessa stanza) - questa era la console. Solo pochi utenti selezionati potevano lavorare sulla "console" (questo era spesso l'unico "terminale" disponibile in modalità utente singolo).
Più tardi c'erano anche alcuni terminali grafici (i cosiddetti "xterminali", da non confondere con il xterm
programma) con schermo e scheda grafica, tastiera, mouse e un semplice processore; che potrebbe semplicemente eseguire un X-server. Non hanno eseguito alcun calcolo da soli, quindi gli X-client hanno funzionato sul computer a cui erano collegati. Alcuni avevano hard disk, ma potevano anche avviarsi in rete. Erano popolari all'inizio degli anni '90, prima che i PC diventassero così economici e potenti.
Un "emulatore di terminale" - la "finestra del terminale" che si apre con programmi come xterm
o konsole
- cerca di imitare la funzionalità di tali terminali stupidi. Anche programmi come PuTTY
(Windows) emulano terminali.
Con il PC, dove "la console" (tastiera + schermo) e "il computer" sono più di una singola unità, si ottengono "terminali virtuali" (su Linux, tasti da Alt + F1 a Alt + F6), ma anche questi imitare terminali vecchio stile. Naturalmente, con Unix / Linux che diventa più un sistema operativo desktop spesso usato da un singolo utente, ora fai gran parte del tuo lavoro "alla console", dove gli utenti prima utilizzavano terminali collegati da linee seriali.
Ovviamente è la shell che avvia i programmi. E usa il fork-systemcall (linguaggio C) per fare una copia di se stesso con un ambiente-settings, quindi il exec-systemcall viene usato per trasformare questa copia nel comando che si desidera eseguire. La shell sospende (a meno che il comando non venga eseguito in background) fino al completamento del comando. Poiché il comando eredita le impostazioni di stdin, stdout e stderr dalla shell, il comando scriverà sullo schermo del terminale e riceverà l'input dalla tastiera del terminale.