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


1234

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?



28
Vorrei aggiungere "riga di comando" a questo :-)
teeks99

1
La riga di comando è semplicemente il linguaggio utilizzato per inviare comandi all'interprete di riga di comando in esecuzione in una shell dall'emulatore terminale / terminale.
Marty Fried,

1
Il teletypewriter (TTY) fu messo in funzione per la prima volta ed esposto al Mechanics Institute di New York nel 1844. en.wikipedia.org/wiki/Teleprinter
Serge Stroobandt

Risposte:


1197

Un terminale è alla fine di un filo elettrico, un guscio è 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 in stile teleprinter che assomigliava a una macchina da scrivere, a volte chiamato un teletypewriter o "tty" in breve. 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, un 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-tty , sono fornite (attraverso un sottile strato del kernel) da programmi chiamati emulatori di terminale , come Xterm (in esecuzione nel sistema X Window ), Schermo(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), Expect (per le interazioni del terminale di scripting), ecc.

Il word terminal 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.

Una console è generalmente un terminale nel 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 cambiano 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"? .


Una 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 la shell è l'ambiente di casa dell'utente, o che la shell è quella in cui sono in esecuzione altri programmi.)

Nei cerchi unix, shell si è specializzata nel senso di una shell da riga di comando , centrata sull'immissione del nome dell'applicazione che si desidera avviare, seguita dai nomi dei file o di 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 coinvolgono " gestori di finestre " e " ambienti desktop ", non una "shell".

Esistono molte shell unix diverse. Le shell più diffuse per l'uso interattivo includono Bash (impostazione predefinita nella maggior parte delle installazioni Linux), zsh (che enfatizza potenza e personalizzazione) e fish (che enfatizza la semplicità).

Le shell della riga di comando includono costrutti di controllo del flusso per combinare i comandi. Oltre a digitare comandi a 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 la shell Korn (ksh) e molte varianti di cenere . Praticamente in ogni sistema simile a Unix è installata una shell in stile Bourne come /bin/sh, di solito ash, ksh o bash.

Nell'amministrazione del sistema unix, la shell di un utente è il programma che viene richiamato quando effettuano l'accesso. Gli account utente normali hanno una shell della riga di comando, ma gli utenti con accesso limitato possono avere una shell limitata o altri comandi specifici (ad es. Per il trasferimento di file -solo conti).


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

  • Input: il terminale converte le chiavi in ​​sequenze di controllo (ad es. Left\e[D). La shell converte le sequenze di controllo in comandi (ad es. \e[Dbackward-char).
  • La modifica delle linee, la cronologia degli input e il completamento sono forniti dalla shell.
    • Il terminale può invece fornire la propria modifica, cronologia e completamento della propria linea e inviare una linea alla shell solo quando è pronta per essere eseguita. L'unico terminale comune che funziona in questo modo è M-x shellin Emacs.
  • Output: la 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.
  • La shell non vede mai l'output dei comandi che esegue (a meno che non venga reindirizzata). La cronologia di output (scrollback) è puramente un concetto terminale.
  • Il copia-incolla tra applicazioni è fornito dal terminale (di solito con il mouse o sequenze di tasti come Ctrl+ Shift+ Vo Shift+ Insert). La shell può anche avere un proprio meccanismo interno di copia-incolla (ad es. Meta+ WE Ctrl+ Y).
  • Il controllo del lavoro (avvio di programmi in background e loro gestione) viene eseguito principalmente dalla shell. Tuttavia, è il terminale che gestisce le combinazioni di tasti come Ctrl+ Cper terminare il lavoro in primo piano e Ctrl+ Zper sospenderlo.

50
Unico cavillo: direi che entrambi i tipi di tty sono "forniti dal" kernel. La differenza che vorrei sottolineare è che i tty hardware (ad es. Linee seriali e la console in modalità testo integrata) hanno un'estremità collegata all'hardware e un'estremità collegata al software (ad es. Programmi di accesso e / o shell) mentre gli pseudo-tty hanno entrambe le estremità sono collegate al software (ad es. un emulatore di terminale da un lato e shell dall'altro).
Chris Johnsen,

12
@phunehehe: Giusto, questo è un significato diverso di "shell", di uso comune nella progettazione del sistema operativo: la shell è la parte esterna del kernel. Non è una terminologia unix: i kernel Unix non tendono ad avere un componente che si potrebbe chiamare shell.
Gilles,

24
Questa è l'immagine nella mia mente per la metafora della conchiglia.
ændrük,

12
C'è anche un altro significato di "console" sotto Linux. La console (ce n'è solo una) è dove printkva una priorità sufficiente (ad esempio, i panici del kernel). Viene impostato passando console=DEVICE,...la riga di comando del kernel (ad esempio, console=ttyS0,115200per una prima porta seriale, a 115.200 bps). Normalmente si imposta automaticamente sul terminale virtuale, ma può essere modificato quando viene compilato il kernel.
derobert,

19
"... il terminale ... gestisce combinazioni di tasti come Ctrl + C per terminare il lavoro in primo piano e Ctrl + Z per sospenderlo" Non proprio: il terminale invia semplicemente caratteri di controllo, è il dispositivo tty che decide come gestirli ed è configurabile . Per impostazione predefinita, il dispositivo tty converte i caratteri di controllo in segnali inviati alla shell (e ad altri processi).
Chris Pagina

194

Un terminale o una console è un componente hardware che consente all'utente di 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 (ad esempio tty1 su linux), terminali virtuali (ad esempio pts / 0) o hardware connesso fisicamente (ad esempio ttyS0 è il terminale seriale fisico, se presente, collegato alla prima porta seriale dell'host).

Una console deve essere un componente hardware collegato fisicamente (o parte dell'host) 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 es. Vedi single user mode). Un terminale può essere, e di solito è, un hardware remoto.

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

Un 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 gira una shell .


2
Qualsiasi computer desktop ha una console di sistema (nel mio 2015 o nel 2010 del poster, non importa). Come è stato affermato correttamente, è un componente hardware. Ma affermare che "Oggi quasi tutte ... le console rappresentano" virtuali "è quasi contraddittorio e ovviamente non va bene.
Incnis Mrsi,

1
"Un terminale o una console è un componente hardware, tramite il quale un utente può interagire con un host. Fondamentalmente una tastiera accoppiata a una schermata di testo." spiegazione straordinaria dal suo aspetto concreto
Webwoman

@andcoz - Cosa intendi con "finestra di testo"? Un emulatore di terminale non è un terminale virtuale? Se corro al comando ttyin un emulatore di terminale come Konsole di KDE, l'output è / dev / pts / 0.
Motivato il

1
@IncnisMrsi - La console non è un computer desktop ? In caso contrario, cosa intendi con una console di sistema?
Motivato il

2
@Motivated /dev/pts/0è un file tty, un gestore di un'interfaccia programmatica esposta dal kernel. Attraverso questo gestore, un programma (ad esempio la shell) può interagire con un terminale (reale o virtuale). Un emulatore di terminale è un software che emula un terminale. L'emulatore chiede al kernel di creare un gestore per consentire ai programmi di interagire con se stesso (vedi man openpty). Quindi le informazioni fluiscono dal terminale (emulatore) al gestore tty del kernel, al programma (e viceversa). Programmi e terminali non si parlano direttamente ma solo attraverso il file tty (il gestore).
andcoz,

48

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, lo chiama una risorsa kernel, che viene utilizzata 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

La shell è un programma utilizzato per controllare ed eseguire 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 bel bordo ridimensionabile, 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 di lavorare in modo interattivo su una riga di comando.


1
PTY è uno pseudo TTY. TTY può essere, ma non è essenzialmente un terminale virtuale (o pseudo).
Luciano,

35

Un TTY (pe pewriter T ele TY ) è un dispositivo speciale che consente alle persone non udenti, con problemi di udito o con problemi di linguaggio di utilizzare il telefono per comunicare, consentendo loro di digitare messaggi di testo. Per comunicare è necessario un TTY ad entrambe le estremità della conversazione.
O
TTY è il terminale utilizzato per digitare un messaggio di testo.


Shell : la parte esterna protettiva che copre una parte di un seme cioè un nocciolo.
OPPURE
struttura o struttura esterna alla parte centrale o essenziale di un sistema.
inserisci qui la descrizione dell'immagine


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


28

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. un in senso lato. Ma agli inizi di Linux (1994-1995) 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 ≈ 1996) "terminale virtuale" può anche riferirsi ad emulatori di terminali basati su .

Linux vt(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. Risiede anche ilvt.c codice che controlla le console virtuali . Gli ingegneri del kernel Linux usano costantemente la parola "console" per indicare tty1, tty2 ... e per loro hanno usato il prefisso "vc_". Ad esempio, c'è una vc_allocatefunzione. D'altra parte, gli sviluppatori di tali strumenti per lo spazio utente kbde hanno console-toolsusato "virtual console" (VC) e "virtual terminal" (VT) in modo intercambiabile. Ī̲ contattato Andries E. Brouwere gli chiese di chiarire la terminologia utilizzata dai primi sviluppatori (1994-1995). Andries ha gentilmente fornito alcune risposte. Afferma che VT e VC sono abbreviazioni sinonimo e "indivisibile". -> In generale, una console virtuale è un terminale virtuale, ma converse non è vero. Quei "terminali virtuali" che non sono console virtuali sono effettivamente pseudoterminali (come afferma Andries, questi non sono VT ). A differenza delle console virtuali, in cui il kernel fornisce funzionalità terminali per un'applicazione console, gli pseudoterminali utilizzano 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 esshd, che alloca una pseudotty per ogni sessione di accesso. Una pseudotty non può essere chiamata "console" - è un errore.


14
  • Terminale = Un'interfaccia che fornisce un display per l'output e una tastiera per l'input in una sessione di 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.


Che cos'è un tty? - altrimenti, la tua risposta è l'unica che ho letto
Loxaxs,

8

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 in breve tty . 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 i comandi). Viene eseguito tramite console che è quasi sempre connessa direttamente al computer. Quindi, ci sono 2 significati per console : qualcosa che viene utilizzato 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 si chiama terminale . UNIX ha anche ottenuto un sottosistema speciale per gestire gli "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. la shell funziona su tty , accetta comandi dall'utente e chiede al kernel di eseguire alcune 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 nel kernel chiamata pseudo terminale per questo. Quindi il tuo tty potrebbe davvero essere collegato ad alcune applicazioni anziché 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 ). 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 la tastiera fisica e il display video collegati al computer.

7

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 la shell che a sua volta invoca le istruzioni del kernel appropriate. A parte questo, la shell è in grado di eseguire alcune altre cose come la ricerca di un programma appropriato 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 collegato direttamente al mainframe ai fini dell'amministrazione del sistema operativo.

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

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


grazie ma fondamentalmente se esiste il terminale, perché esiste ancora tty anche nel sistema Ubuntu per personal computer, accessibile con alt + f-1/6 per favore, non riesco a capire la loro utilità al di sopra del fatto che è possibile accedervi senza l'uso del sistema grafico se ho capito bene
Webwoman il

1
@Webwoman - Il mio sistema è configurato per consentire l'accesso rootall'account solo tramite sudoo tramite un accesso alla console. Le console hanno spesso un posto speciale in termini di privilegi in quanto qualcuno che ha accesso ad esse ha necessariamente accesso fisico al computer con cui comunicano. Sono anche il metodo di accesso di ultima istanza. Se il sistema operativo si trova in uno stato parzialmente interrotto (come il driver Ethernet è rotto) è comunque possibile accedere alla console. È l'unico dispositivo di interfaccia umana che dovrebbe essere SEMPRE disponibile, indipendentemente dallo stato in cui si trova il sistema.
Onnipotente il

@Omnifario grazie per la tua risposta "Le console spesso hanno un posto speciale in termini di privilegi in quanto qualcuno che ha accesso ad essi ha necessariamente accesso fisico al computer con cui comunicano" intendevi che TTY ha spesso un posto speciale in termini di privilegi?
Webwoman il

@Webwoman - No, console. Un TTY spesso non è collegato direttamente a un computer. E una console spesso non è una TTY in senso tradizionale. Quando andai alla U di MN alla fine degli anni '80, c'era una rete specializzata in tutto il campus che non stavo eseguendo Internet Protocol (aka IP) per collegare TTY casuali a computer casuali. I mainframe IBM hanno una cosa simile in corso ed è stato uno dei grandi motivi per cui IBM ha creato SNA. E un normale PC, anche quando mostra solo testo, è molto diverso dal TTY in molti modi, quindi una console per PC non è esattamente un TTY esattamente.
Onnipotente il

@Webwoman - La caratteristica distintiva di una console è che ha una connessione diretta con l'hardware che esegue il sistema operativo. Questa idea è piuttosto confusa con le moderne "macchine virtuali", ma questa è l'idea di base.
Onnipotente il

6

A parte la risposta accettata e l' articolo demistificato di TTY , mi è davvero piaciuto leggere questi due articoli:

Questo è basato 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 usati 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 le "tty" di Unix - sono macchine da scrivere elettroniche che inviano all'host i tasti premuti sulla linea seriale,

Questo è 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.


1

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". La 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, nell'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 tale "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 una "shell" se non comunica 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". Si tratta di 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 furono 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, ci si aspetta 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 cambiare il colore di un personaggio che sta per essere stampato anche 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 viene eseguita con un vero componente hardware dal software nel kernel.

Ci sono modi per usare Linux attraverso quella che viene chiamata una 'console seriale' che è una console collegata al computer attraverso 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 anziché attraverso una sorta di rete che potrebbe consentire a chiunque di connettersi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.