it-swarm.it

Qual è la differenza esatta tra un 'terminale', una 'Shell', una 'tty' e una 'console'?

Penso che questi termini si riferiscano quasi alla stessa cosa, se usati in modo approssimativo:

  • terminale
  • Conchiglia
  • tty
  • consolle

A cosa si riferisce esattamente ciascuno di questi termini?

1278
Lazer

Un terminale è alla fine di un filo elettrico, un Shell è la casa di una tartaruga, tty è una strana abbreviazione e una console è una specie di armadio.

Beh, etimologicamente parlando, comunque.

Nella terminologia unix, la risposta breve è quella

  • terminal = tty = ambiente di input/output di testo
  • console = terminale fisico
  • Shell = interprete della riga di comando

Console, terminale e tty sono strettamente correlati. Inizialmente, intendevano un dispositivo attraverso il quale si poteva interagire con un computer: nei primi tempi di unix, ciò significava un dispositivo di tipo teleprinter - simile a una macchina da scrivere, a volte chiamato teletypewriter o “tty "In stenografia. Il nome "terminale" deriva dal punto di vista elettronico e il nome "console" dal punto di vista dell'arredamento. Molto presto nella storia di Unix, tastiere e display elettronici sono diventati la norma per i terminali.

Nella terminologia unix, a tty è un tipo particolare di file dispositivo che implementa un numero di comandi aggiuntivi ( ioctls ) oltre a lettura e scrittura . Nel suo significato più comune, terminal è sinonimo di tty. Alcuni tipi sono forniti dal kernel per conto di un dispositivo hardware, ad esempio con l'input proveniente dalla tastiera e l'output che passa a una schermata in modalità testo, oppure con l'input e l'output trasmessi su una linea seriale. Altre tty, a volte chiamate pseudo-ttys, sono fornite (attraverso un sottile strato del kernel) da programmi chiamati emulatori terminali , come Xterm (in esecuzione in X Window System ), Screen (che fornisce uno strato di isolamento tra un programma e un altro terminale), - Ssh (che collega un terminale su una macchina con programmi su un'altra macchina), Aspetto (per le interazioni del terminale di scripting), ecc.

Il terminale di Word può anche avere un significato più tradizionale di un dispositivo attraverso il quale si interagisce con un computer, in genere con una tastiera e un display. Ad esempio un terminale X è una sorta di thin client , un computer per scopi speciali il cui unico scopo è guidare una tastiera, un display, un mouse e occasionalmente altre periferiche di interazione umana, con le applicazioni reali in esecuzione su un altro , computer più potente.

A console è generalmente un terminale in senso fisico che per definizione è il terminale primario direttamente collegato a una macchina. La console appare al sistema operativo come tty (implementato dal kernel). Su alcuni sistemi, come Linux e FreeBSD, la console appare come diverse tty (combinazioni di tasti speciali commutano tra queste tty); solo per confondere le cose, il nome dato ad ogni particolare tty può essere "console", "console virtuale", "terminale virtuale" e altre varianti.

Vedi anche Perché un Terminale virtuale è "virtuale" e cosa/perché/dove si trova il Terminale "reale"? .


A Shell è l'interfaccia principale che gli utenti vedono quando effettuano l'accesso, il cui scopo principale è avviare altri programmi. (Non so se la metafora originale è che Shell è l'ambiente di casa dell'utente, o che Shell è quello in cui sono in esecuzione altri programmi.)

Nei cerchi unix, Shell si è specializzato nel significato di riga di comando Shell , centrato sull'immissione del nome dell'applicazione che si desidera avviare, seguito dai nomi dei file o altri oggetti su cui l'applicazione dovrebbe agire e premendo il tasto Invio. Altri tipi di ambienti non usano la parola "Shell"; ad esempio, i sistemi di finestre implicano " gestori di finestre " e " ambienti desktop ", non una "Shell".

Esistono molte shell unix diverse. Le shell popolari per uso interattivo includono Bash (il valore predefinito sulla maggior parte delle installazioni Linux), zsh (che enfatizza potenza e personalizzazione) e fish (che enfatizza semplicità).

Le shell della riga di comando includono costrutti di controllo del flusso per combinare i comandi. Oltre a digitare comandi in un prompt interattivo, gli utenti possono scrivere script. Le shell più comuni hanno una sintassi comune basata su Bourne_Shell . Quando si discute di " Programmazione della shell", la Shell è quasi sempre implicita come una shell in stile Bourne. Alcune shell che vengono spesso utilizzate per lo scripting ma mancano di funzionalità interattive avanzate includono Korn Shell (ksh) e molte ash varianti. Praticamente in qualsiasi sistema simile a Unix è installata una shell in stile Bourne come /bin/sh, di solito ash, ksh o bash.

Nell'amministrazione del sistema unix, Shell di un utente è il programma che viene invocato al momento del login. Gli account utente normali hanno una Shell da riga di comando, ma gli utenti con accesso limitato possono avere un Shell con restrizioni o qualche altro comando specifico (ad es. per account di solo trasferimento file).


La divisione del lavoro tra il terminale e la Shell non è del tutto evidente. Ecco i loro compiti principali.

  • Input: il terminale converte le chiavi in ​​sequenze di controllo (ad es. Left → \e[D). Shell converte le sequenze di controllo in comandi (ad esempio \e[Dbackward-char).
  • La modifica delle linee, la cronologia degli input e il completamento sono forniti da Shell.
    • Il terminale può invece fornire la propria modifica, cronologia e completamento della propria linea e inviare una linea a Shell solo quando è pronta per essere eseguita. L'unico terminale comune che funziona in questo modo è M-x Shell in Emacs.
  • Output: Shell emette istruzioni come “display foo”, “cambia il colore di primo piano in verde”, “sposta il cursore sulla riga successiva”, ecc. Il terminale agisce su queste istruzioni.
  • Il prompt è puramente un concetto di Shell.
  • Shell non vede mai l'output dei comandi eseguiti (a meno che non venga reindirizzato). La cronologia di output (scrollback) è puramente un concetto terminale.
  • Copia-incolla tra applicazioni è fornita dal terminale (di solito con il mouse o sequenze di tasti come Ctrl+Shift+V o Shift+Insert). Shell potrebbe anche avere un proprio meccanismo interno di copia-incolla (ad es. Meta+W e Ctrl+Y).
  • Job control (avvio di programmi in background e loro gestione) viene principalmente eseguito da Shell. Tuttavia, è il terminale che gestisce combinazioni di tasti simili Ctrl+C per terminare il lavoro in primo piano e Ctrl+Z per sospenderlo.

Un terminale o un console è un componente hardware, tramite il quale un utente può interagire con un host. Fondamentalmente una tastiera accoppiata con una schermata di testo.
Oggi quasi tutti i terminali e le console rappresentano quelli "virtuali".

Il file che rappresenta un terminale è, tradizionalmente, chiamato un file tty. Se guardi nella directory "/ dev" di un sistema UNIX, troverai molti file tty collegati a console virtuali (es. Tty1 su linux), terminali virtuali (es. Pts/0) o hardware collegato fisicamente (ad es. ttyS0 è il terminale seriale fisico, se presente, collegato alla prima porta seriale dell'host).

A console deve essere un componente hardware fisicamente connesso (o parte di) all'host. Ha un ruolo speciale nel sistema: è il punto principale per accedere a un sistema per la manutenzione e alcune operazioni speciali possono essere eseguite solo da una console (ad esempio vedi single user mode). Un terminale può essere, e di solito è, un hardware remoto.

Ultimo, ma non meno importante, un Shell è un programma speciale che interagisce con un utente attraverso un controllo tty e offre all'utente la possibilità di avviare altri programmi ( es. bash, csh, tcsh).

A emulatore di terminale è un programma che emula un terminale fisico (ad esempio xterm, gnome-terminal, minicom).

Quindi quando guardi una "finestra di testo" sul tuo sistema linux (sotto X11) stai cercando: un emulatore di terminale , collegato a un terminale virtuale , identificato da un file tty , all'interno del quale viene eseguito un Shell .

199
andcoz

BREVE spiegazione:

La console è un terminale. Un sistema ha una console e potenzialmente più terminali. La console è in genere l'interfaccia principale per la gestione di un computer, ad esempio mentre è ancora in fase di avvio.

Un terminale è una sessione che può ricevere e inviare input e output per programmi da riga di comando. La console è un caso speciale di questi.

Un TTY è essenzialmente uno pseudo dispositivo, chiamandolo una risorsa del kernel, che viene utilizzato dai processi per accedere a un terminale specifico. I TTY possono essere collegati a hardware come una porta seriale o possono essere virtuali, ad esempio creati quando un utente accede tramite una rete

Shell è un programma utilizzato per il controllo e l'esecuzione di programmi. Viene spesso utilizzato in modo interattivo, tramite un terminale. Esistono diversi programmi Shell, Bash è probabilmente la Shell più comunemente usata oggi. Altre shell, in nessun ordine particolare, includono Bourne Shell, C-Shell, Dash, Tsch, Ksh e il sempre più popolare zsh. Ce ne sono molti altri.

Quando si dispone di una GUI, è possibile utilizzare un programma terminale per disegnare un bordo ridimensionabile Nice, aggiungere barre di scorrimento e formattare il testo e così via, per una sessione terminale. Spesso questi sono chiamati emulatori di terminale e talvolta possono gestire più sessioni tramite un concetto TAB. Un emulatore di terminale avvia spesso una shell per consentire all'utente di lavorare in modo interattivo su una riga di comando.

51
Johan

A [~ # ~] tty [~ # ~] (ovvero [~ # ~] t [~ # ~] ele [~ # ~] ty [~ # ~] pewriter) è un dispositivo speciale che consente alle persone i non udenti, i non udenti o i non udenti utilizzano il telefono per comunicare, consentendo loro di digitare messaggi di testo. Per comunicare è necessario un TTY ad entrambe le estremità della conversazione.
O
[~ # ~] tty [~ # ~] è terminale utilizzato per digitare un messaggio di testo.


Shell : la parte esterna di copertura protettiva di un seme, ovvero il nocciolo.
O
quadro o struttura esterna alla parte centrale o essenziale di un sistema.
enter image description here


Console indica la tastiera e il monitoraggio degli allegati fisici a un computer.

36
Premraj

Ci sono già due grandi risposte, ma vorrei aggiungere informazioni sulla frase "terminale virtuale" . In generale, significa qualcosa che fornisce l'aspetto/funzionalità di un terminale, i. e. a emulatore di terminale in senso lato. Ma agli inizi di Linux (1994–95) veniva usato come sinonimo di "console virtuale" (diverse interfacce utente non correlate) , da alcuni sviluppatori. Questo utilizzo persiste nella documentazione; due termini diversi sono stati (e sono) usati per riferirsi a cose tty1, tty2 .... Al giorno d'oggi (dal 61996) "terminale virtuale" può anche riferirsi a pty - emulatori di terminali basati.

Il vt di Linux (il driver della console di sistema in modalità testo) è stato il primo pezzo del suo kernel. Inizialmente era utilizzato per la connessione ai mainframe e in questo senso è un "terminale virtuale", da cui il nome. Il codice che controlla le console virtuali risiede in vt.c pure. Gli ingegneri del kernel Linux usano costantemente le "console" di Word per indicare tty1, tty2 ... e per loro hanno usato il prefisso "vc_". Ad esempio, c'è un vc_allocate funzione. D'altro canto, gli sviluppatori di tali strumenti per lo spazio utente come kbd e console-tools utilizzava "console virtuale" (VC) e "terminale virtuale" (VT) in modo intercambiabile. Ī̲ contattato AndriesE. Brouwer e gli chiese di chiarire la terminologia usata dai primi sviluppatori (1994–95). Andries ha gentilmente fornito alcune risposte. Egli afferma che VT e VC sono abbreviazioni sinonimo e "indivisibile". -> In generale, una console virtuale è un terminale virtuale, ma converse non è vera. Quei "terminali virtuali" che non sono console virtuali sono in effetti pseudoterminals (come afferma Andries, questi non sono VT). A differenza delle console virtuali, in cui il kernel fornisce funzionalità terminale per un'applicazione console, pseudoterminali tilizzare i "dispositivi" PTY per organizzare la comunicazione tra le applicazioni console e il programma di creazione terminale che viene eseguito nello spazio utente . Esempi sono emulatori di terminali basati su X e sshd, che alloca una pseudotty per ogni sessione di accesso. Una pseudotty non può essere chiamata "console" - è un errore.

30
Incnis Mrsi
  • Terminale = Un'interfaccia che fornisce un display per l'output e una tastiera per l'input in una sessione Shell.

  • Shell = Interprete che esegue comandi digitati come stringa

  • Console: attualmente utilizziamo due tipi di console

    • Console fisica = il display hardware e la tastiera utilizzati per interagire con un sistema

    • Console virtuale = Una delle più console logiche che possono supportare ciascuna una sessione di accesso indipendente.

  • tty (teletype cioè terminale). = Un terminale è fondamentalmente solo un dispositivo di interfaccia utente che utilizza il testo per input e output.message.

16
Rakib

Devi tuffarti nella storia.

C'erano dispositivi simili a macchine da scrivere con carta e tastiera. Erano chiamati teletipi (che significa "digitare da remoto", poiché "tele" significa "remoto") o ttys in breve. Negli anni '70 erano obsoleti di dispositivi con monitor CRT chiamati glass ttys .

Qualsiasi computer ha bisogno di un modo per segnalare il suo stato ed errori (e, probabilmente, accettare comandi). Viene eseguito tramite console che è quasi sempre collegato direttamente al computer. Quindi, ci sono 2 significati per console : qualcosa che viene usato per segnalare lo stato e qualcosa che è collegato direttamente.

UNIX è un sistema interattivo: diversi utenti possono connettersi ad esso e avviare applicazioni. I primi computer hanno usato i tipi di telefono ( tty ) per questo: ogni utente aveva un tipo di telefono collegato alla macchina con una linea seriale. Tale teletipo è chiamato terminale . UNIX ha anche ottenuto un sottosistema speciale per gestire "utenti seduti dietro i terminali", che è anche chiamato tty perché i primi terminali erano teletipi. Ogni processo potrebbe essere collegato a tty in Unix. Ciò significa che c'è un utente da qualche parte seduto vicino al terminale. Vedi http://www.linusakesson.net/programming/tty/ per maggiori informazioni.

Gli utenti hanno bisogno di un modo per dire al kernel di eseguire l'applicazione. Shell (sh, bash, csh, ksh, ecc.) È usato per questo. Shell funziona su tty , accetta comandi dall'utente e chiede al kernel di essere eseguito qualche app.

Ma i terminali non sono sempre fisicamente collegati alla macchina. Potrebbe esserci qualche applicazione che "emula" il terminale accettando i tasti premuti dall'utente e inviandoli da qualche parte (xterm e ssh sono buoni esempi). C'è un'API in Kernel chiamata pseudo terminale per questo. Quindi il tuo tty potrebbe davvero essere collegato a qualche applicazione invece che al vero terminale. Xterm utilizza X11 per visualizzare il testo e ssh utilizza la connessione di rete per esso.

Il PC IBM ha una tastiera e una scheda video (a volte vengono anche chiamate console a volte). Linux può fare diverse cose con esso:

  • Usalo come "motore per segnalare errori e stato": console Linux. Se passi console =/dev/ttyS0 al kernel, userà qualcosa connesso a COM1 come console e, in caso contrario, utilizzerà la console del PC.
  • Usalo per emulare il terminale, il cosiddetto terminale virtuale (vty).

Potrebbe anche smettere di emulare il terminale sulla console e darlo ad alcune app. L'app può cambiare la sua modalità video e usarla esclusivamente (X11 o svgalib potrebbero farlo).

Quindi, ecco i significati moderni:

  • terminal: qualcosa con l'utente reale seduto dietro di esso. Potrebbe essere un terminale fisico (raro) o un pseudo terminale (xterm, ssh) o un terminale virtuale (vty in Linux)
  • Shell: applicazione (bash, tcsh, ecc.) Che aiuta l'utente a interagire con il sistema.
  • tty: sottosistema terminale o kernel per supportare terminali.
  • console: qualcosa in cui vengono riportati lo stato e gli errori (/dev/console) o tastiera fisica e display video collegati al computer.
12
user996142

Ecco la risposta breve:

Kernel - la parte più interna di qualsiasi sistema operativo moderno che parla direttamente all'hardware reale.

Shell - wrapper attorno al kernel reale. Ogni volta che eseguiamo il comando, in realtà parliamo con Shell che a sua volta invoca le istruzioni del kernel appropriate. A parte questo, Shell è in grado di eseguire alcune altre cose come la ricerca di programmi appropriati pur avendo comandi, alcuni nomi di file abbreviati, comandi di piping ecc.

Terminale - nell'era dell'informatica precedente, i computer (noti come Mainframe) erano giganti. Quindi, era facile avere una singola unità di elaborazione e collegarla da molti luoghi. Il terminale è l'hardware effettivo con tastiera e dispositivi di output collegati al mainframe.

Console - Tipo speciale di terminale che è direttamente collegato a Mainframe ai fini dell'amministrazione del sistema operativo.

tty - TeleTypewriter utilizzato per inviare e ricevere dati da e verso il mainframe. Utilizzato prima che fossero disponibili i terminali video. Ma convenzionalmente è stato ancora chiamato tty. Perfino il comando comune stty

La risposta lunga e dettagliata è qui - Terminale, Console, Shell, Kernel, Comandi - Parti diverse di un computer

9

A parte la risposta accettata e The TTY demysified articolo, mi è davvero piaciuto leggere questi due articoli:

Questo uno si basa su NetBSD.

Nei tempi antichi di Unix, i sistemi informatici consistevano in un mainframe, una grande scatola di luci intermittenti con memoria, memoria di massa e unità di elaborazione e che eseguivano processi avviati da utenti o operatori. Poiché l'hardware era molto costoso, i sistemi venivano utilizzati come veri sistemi multiutente, con molte persone che interagivano con il sistema allo stesso tempo. Quello che di solito non aveva - a differenza delle odierne workstation Unix - era un monitor e una tastiera fissi. Invece, l'invio di comandi alla macchina e il recupero dell'output è stato effettuato su linee seriali, utilizzando prima i teletipi e successivamente i terminali CRT (tubo a raggi catodici). I teletypers - ecco da dove provengono i "ttys" in Unix - sono macchine da scrivere elettroniche che inviano all'host le chiavi premute sulla linea seriale e le risposte sono state rinviate al carattere del teletaper tramite char sulla linea seriale, con la stampante integrata mettere la risposta su carta, proprio come una macchina da scrivere.

Questo uno è basato su Linux.

I terminali sono dispositivi che offrono funzionalità di input/output avanzate oltre a quanto si potrebbe ottenere solo con file, pipe e socket regolari. Queste funzionalità sono progettate per facilitare l'interazione umana con i computer e sono inutili per i programmi che cercano di parlarsi.

7
Nishant

Lasciami fare una pausa in questo ... Userò Unix e Linux più o meno in questo senso. Se mi riferisco a qualcosa di storico che precede l'esistenza di Linux, di solito scriverò "Unix", e se sto parlando di qualcosa di più recente, o qualcosa di specifico al sapore Linux di Unix, di solito scriverò "Linux ".

Conchiglia

L'unica cosa nella tua lista che è un concetto discreto che non si sovrappone agli altri è la 'Shell'. Shell è un programma che ha lo scopo di comunicare con un utente ed eseguire operazioni del sistema operativo per suo conto.

Le shell più comuni usano una tecnica chiamata "riga di comando" che consiste nell'inviare all'utente una sorta di Prompt, in attesa che l'utente digiti un comando di testo e quindi esegua quel comando. Ma ci sono shell basate su menu e persino shell grafiche (come Esplora file di Windows) sebbene nessuna persona Unix che si rispetti possa mai definire una cosa del genere "Shell".

In Unix, se qualcuno chiama qualcosa una 'Shell', quasi sicuramente significano una qualche forma di interfaccia a riga di comando, come ho appena descritto. Ed è molto strano nel mondo Unix riferirsi a qualcosa come "Shell" se non sta comunicando a un utente usando il modello tty che descriverò più avanti.

TTY

Questo è confuso perché può riferirsi a diversi tipi di cose.

In Linux, esiste un tipo di dispositivo chiamato 'tty'. È un dispositivo astratto che dovrebbe essere utilizzato per la comunicazione bidirezionale con qualcosa che o è un utente o sta prendendo in qualche modo input da un utente. A volte quel dispositivo astratto può corrispondere direttamente a qualche dispositivo fisico. A volte può essere un programma che presenta a qualcuno una finestra in cui appare la comunicazione e in cui l'utente può digitare.

Ma il motivo per cui esiste questo dispositivo astratto e il motivo per cui è chiamato "tty" è che "tty" è l'abbreviazione di "teletype", che era un vero dispositivo fisico che aveva una stampante stampata su carta combinata con una tastiera. Il modello che il dispositivo "tty" astratto presenta ai programmi che lo utilizzano è fondamentalmente che esiste un teletipo sull'altra estremità. Gli invii caratteri e questi caratteri compaiono sul tipo di telefono. Quando leggi i caratteri da esso, quei caratteri rappresentano i tasti digitati su una tastiera.

Le vecchie tty basate su stampanti per carta sono state rapidamente soppiantate con tty video. Su quelli, ovviamente, non c'è rotolo di carta. E, in effetti, è possibile sovrascrivere qualsiasi carattere sullo schermo. Ma, piuttosto che presentare una sorta di interfaccia 'schermo' astratta ai programmi, si prevede invece che i programmi inviino speciali flussi di personaggi chiamati sequenze di escape che svolgono una varietà di compiti. Di solito c'è una cosa astratta chiamata 'cursore' che può essere spostata sullo schermo, e qualsiasi personaggio inviato sostituirà qualunque cosa si trovi sul cursore e il cursore si sposterà di un carattere più avanti. Spesso puoi anche cambiare il colore di un personaggio che sta per essere stampato con sequenze di escape.

Ci sono 'ttys di vetro' che non seguono questo modello e di conseguenza sono gestiti male nel mondo Unix. La famiglia di terminali video IBM 3270 rientra in questa categoria.

Ciò che le persone Linux/Unix chiamano in genere una "finestra Shell" è un'emulazione di un vetro tty che utilizza un'interfaccia utente grafica. Internamente, i programmi in esecuzione all'interno di una finestra Shell stanno parlando con un dispositivo tty virtuale che a volte viene chiamato pseudo-tty o pseudo-terminale (noto anche come pty).

Terminale

Un terminale è solo un luogo in cui computer e umani dovrebbero interfacciarsi. I terminali possono essere completamente grafici e non seguire in alcun modo il modello tty, anche se un programma può utilizzare le proprie capacità per emularlo. Tutte le tty fisiche effettive (vetro o altro) sono terminali.

Consolle

Una console è un tipo speciale di terminale che generalmente dovrebbe essere collegato in un modo sicuro diretto all'hardware su cui è in esecuzione il sistema operativo.

In Linux, la console è virtualizzata in un piccolo modo che consente di utilizzare una combinazione di tasti speciale per passare da una console virtuale all'altra. Ma questa virtualizzazione è fatta con un vero hardware dal software nel kernel.

Esistono modi per utilizzare Linux attraverso quella che viene chiamata una "console seriale" che è una console collegata al computer tramite una porta seriale come una porta USB (o, su alcuni computer molto piccoli e/o molto vecchi, una porta RS-232 di qualche tipo) e segue il vecchio modello di teletipo in modo abbastanza rigoroso.

Ancora una volta, l'idea è che questa console sia connessa in modo fisico diretto al computer invece che attraverso una sorta di rete che potrebbe consentire a chiunque di connettersi.

5
Omnifarious