Qual è la differenza tra Terminal, Console, Shell e Command Line?


211

Qual è la differenza tra Terminal, Console, Shell e Command Line?


1
(1/2) Agent Cool è per lo più corretto, ma la definizione di Console che fornisce è obsoleta, dato questo argomento. Il suo link ha le informazioni corrette, se le segui comunque. Leggi l' intera definizione al suo link. La console è usata vagamente per significare molte cose simili, ma soprattutto si riferisce ai dispositivi di input e output umani ATTACCATI LOCALMENTE, ad esempio tastiera, display e forse mouse.
0xSheepdog

1
(2/2) Questo può sembrare un punto pedante, ma come amministratore di sistema esperto, ti dirò che non lo è . Quando un sistema presenta un problema e sembra essere completamente bloccato / inattivo / offline, è necessario controllare la console fisica del sistema per vedere se funziona ancora, ma semplicemente perdere la connettività di rete. Questo piccolo dettaglio potrebbe risparmiare o costare dati, elaborazione delle informazioni, ecc. Pedante, sì. Ma importante.
0xSheepdog

6
@ 0xSheepdog Potresti voler espandere questi commenti in una risposta completa (comprese definizioni o spiegazioni anche per gli altri termini), pubblicata come tale. Non è male per una domanda avere più risposte (tranne forse quando trasmettono esattamente le stesse informazioni e nello stesso modo). Non sono sicuro del motivo per cui l'importante pratica del controllo locale di una macchina si basi effettivamente sul conoscere / chiamare la sua interfaccia umana fisica come console, ma c'è forse l'argomento che è importante per una comunicazione efficace con i colleghi o l'utilizzo della documentazione. (Potresti chiarirlo nella tua risposta.)
Eliah Kagan

4
A causa della loro stretta relazione (vedi tutte le buone risposte) questi termini sono talvolta usati come sinonimi, il che è probabilmente ciò che ti ha portato a chiedere questo.
Segna il

Risposte:


143

Risposta breve:

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

Risposta lunga:

Console e terminale 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.

terminale

Nella terminologia unix, un terminale è un particolare tipo di file di dispositivo che implementa un numero di comandi aggiuntivi ( ioctls ) oltre a lettura e scrittura. Alcuni terminali 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 o con l'input e l'output trasmessi su una linea seriale. Altri terminali, a volte chiamati pseudo-terminali o pseudo-tty, sono forniti (attraverso un sottile strato del kernel) da programmi chiamati emulatori di terminali . Alcuni tipi di emulatori di terminale includono:

  • Applicazioni GUI in esecuzione nel sistema X Window : Xterm , Gnome Terminal, Konsole, Terminator, ecc.
  • Schermo e tmux , che forniscono 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
  • Aspettatevi , per interazioni terminali di scripting

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.

consolle

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 un terminale (implementato dal kernel). Su alcuni sistemi, come Linux e FreeBSD, la console appare come diversi terminali (ttys) (combinazioni di tasti speciali commutano tra questi terminali); solo per confondere le cose, il nome dato ad ogni particolare terminale 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"? .

Riga di comando [interfaccia]

Una riga di comando è un'interfaccia in cui l'utente digita un comando (che è espresso come una sequenza di caratteri, in genere un nome di comando seguito da alcuni parametri) e preme il Returntasto per eseguire quel comando.

Conchiglia

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 (con la notevole eccezione recente di Gnome Shell) di solito 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. La shell predefinita di Ubuntu è Bash (come la maggior parte delle altre distribuzioni Linux). Alternative popolari includono zsh (che enfatizza potenza e personalizzazione) e pesce (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. Su Ubuntu /bin/shè Dash , una variante di cenere (scelta perché è più veloce e utilizza meno memoria di 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).
  • Edizione shell, cronologia input e completamento sono forniti dalla shell.
    • Il terminale può invece fornire la propria edizione di linea, cronologia e completamento 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.

Riciclato da Unix e Linux


1
Dovrei essere in disaccordo con te sul fatto che terminale sia un termine appropriato per un file di dispositivo terminale e / o il codice di gestione dei terminali nel kernel (tty ioctls, raw / cotto, modifica della linea di base). terminal = il materiale che gestisce i codici di escape, trasforma i tasti premuti in caratteri e disegna su uno schermo (o stampa su carta / nastro). Vedi la mia risposta per maggiori dettagli.
Peter Cordes,

2
@PeterCordes A questo livello di dettaglio, non c'è distinzione. POSIX definisce il terminale sinonimo di dispositivo terminale , nel senso di un file dispositivo. Questo è il significato di Unix. Capita di essere la roba che gestisce i codici di escape, trasforma i tasti premuti in caratteri e disegna su uno schermo (o trasmette sulla rete, o registra in un file, ecc.).
Gilles,

2
hrm, sì, anche il terminale si abitua in questo senso. Partendo dal presupposto che ci sia un emulatore di terminale, o una porta seriale con un apparecchio terminale collegato ad esso, su un'estremità del dispositivo terminale che il kernel sta gestendo. La gestione del kernel tty (in modalità cotto) gestisce solo alcuni codici di controllo (segnali su ^ c, modifica delle linee su ^ u / ^? (Elimina). Sto cercando di tracciare una linea tra il codice tty e la parte di Linux che implementa un terminale simile a VT100 su una scheda grafica e una tastiera USB / ps2 / AT. Puoi compilare Linux senza quello, ma non senza tty.
Peter Cordes,

3
@PeterCordes Nella configurazione del kernel, il supporto per i terminali può essere tralasciato (è utile per alcuni rari sistemi embedded in cui la memoria è estremamente ridotta); è controllato da CONFIG_TTY. Il supporto per gli emulatori di terminali (più propriamente chiamati pseudo terminali - "emulatore di terminale" non include sempre telnetd, schermo, aspetti, ...) è controllato da CONFIG_UNIX98_PTYS. Il supporto per la visualizzazione in modalità testo PC e tastiera o simili è controllato da CONFIG_VT. Vedi drivers/tty/Kconfignel sorgente del kernel.
Gilles,

2
Oops, non avevo una fonte del kernel recente in giro. CONFIG_TTY è stato aggiunto solo nel 2012. Ad ogni modo, sì, si spera che aiuti chiunque cerchi di avvolgere la testa su quali sono i diversi pezzi del puzzle e su come si incastrano.
Peter Cordes,

60

Una rappresentazione visiva.

terminale

Qualcosa in cui puoi sederti e lavorare come un capo.

terminale

consolle

Alcuni hardware che fanno un sacco di cose.

consolle

Un altro esempio di console, potrebbe essere una console per videogiochi come un Super Nintendo [dove puoi giocare ad Actraiser]

Conchiglia

Fondamentalmente un'applicazione per l'esecuzione di comandi.

ConchigliaConchiglia

Riga di comando [Interfaccia]

Praticamente qualsiasi cosa in cui inserisci i comandi.

CLICLI


8
Hai rubato la mia idea - stavo per dare sostanzialmente la stessa risposta. Quindi puoi avere un voto. Il punto è ovviamente che mentre questi termini sono per lo più sinonimo in questi giorni, termini come "terminale" e "console" hanno le loro origini in vecchi concetti di elaborazione.
thomasrutter,

2
Buon sforzo. Semplice e facile
A Umar Mukthar

19

Dal progetto di informazione Linux :

Terminale : tecnicamente, una finestra di terminale, definita anche emulatore di terminale, è una finestra di solo testo in un'interfaccia utente grafica (GUI) che emula una console.

In parole povere Un'applicazione GUI, da cui possiamo accedere alla console di un utente.

Console : un pannello degli strumenti contenente i controlli per un computer

Shell : una shell è un programma che fornisce la tradizionale interfaccia utente di solo testo per Linux e altri sistemi operativi simili a Unix

Riga di comando: una riga di comando è lo spazio a destra del prompt dei comandi in una modalità di visualizzazione a tutto testo su un monitor di un computer (di solito un pannello CRT o LCD) in cui un utente immette comandi e dati


5
"Terminale" indica una schermata di solo testo fisico. Quello che dici è in realtà "emulatore di terminale".
Utente registrato

2
@RegisteredUser Un emulatore di terminale è un tipo di terminale. La parola terminale non è limitata ai terminali fisici (la parola normale per ciò è console ).
Gilles,

2
Questa definizione di riga di comando è errata. Una riga di comando non è limitata a una modalità di visualizzazione tutto testo.
Gilles,

1
@Gilles L'ho preso da One web-Link. Hai menzionato bene la risposta corretta.
rʒɑdʒɑ

5
@AgentCool Non metto in dubbio la tua capacità di copiare e incollare. Metto in dubbio la tua scelta della fonte. Quello che pubblichi è una tua responsabilità, che tu l'abbia scritto o meno.
Gilles,

15

Le risposte qui sembrano molto buone. Tuttavia sono troppo asciutti e tecnici per i miei gusti, quindi darò un'occhiata.

Il terminale è la fine di qualcosa - dove termina. Ad esempio se prendi la metropolitana in qualche città, la stazione in cui scendi è il tuo terminal. O in un aeroporto il luogo in cui le persone escono quando raggiungono il loro paese di destinazione è considerato il terminal. Il motivo per cui il terminal dell'aeroporto è al giorno d'oggi sia il luogo in cui si trovano le persone a bordo che il luogo in cui le si fa scendere dall'aereo è per ovvie ragioni economiche.

Lo scopo di un computer è quello di ottenere dati, fare qualcosa con esso e sputare il risultato. Quindi il terminale è qualsiasi dispositivo da cui è possibile ottenere il risultato del calcolo (una schermata per esempio). È appena successo che nei primi computer di solito c'erano l'input (tastiera) e l'output (schermo) come un singolo dispositivo. Per questo motivo, oggigiorno i terminali sono considerati qualsiasi dispositivo di input / output. Un mouse, tastiera, schermo, fotocamera, sono tutti terminali.

Shell è una cosa del sistema operativo. Su un computer hai il kernel che su Ubuntu per esempio è la parte Linux. Ora, poiché il kernel è veramente di basso livello, viene fornita una shell, un programma che consente all'utente di interagire con il kernel in modo semplice. Questo è BASH, ad esempio.

La console è (da un dizionario)

una superficie piana che contiene i comandi per una macchina, per un pezzo di materiale elettrico, ecc.

Ecco perché nell'industria musicale le schede con tutte le manopole, o in uno space shuttle il tavolo di comando, sono tutte considerate console. Super Nintendo e PS2 sono anche chiamate console storicamente poiché i primi dispositivi di intrattenimento simili sembravano scatole con un mucchio di pulsanti.

La riga di comando è solo un'interfaccia, l'opposto della GUI. Vale a dire ci sono due tipi di interfacce su un computer; CLI (interfaccia a riga di comando) e GUI (interfaccia utente grafica). La differenza principale è che il primo riceve input dalla tastiera mentre il secondo riceve input dal mouse.


1
Cosa intendi con "l'opposto della GUI"?
Koray Tugay,

2
Con l'opposto intendo che hai CLI o GUI. Ho chiarito ora un po 'di più nella risposta.
Pithikos,

12

Per riassumere la mia risposta:

Shell è un programma che processescomanda e returnsgenera, come bash in Linux.

Terminal è un programma che rununa shell , in passato era un dispositivo fisico (prima che i terminali fossero monitor con tastiere, erano teletipi ) e quindi il suo concetto veniva trasferito in software , come Gnome-Terminal .

Quindi apro Gnome-Terminal , appare una finestra nera che esegue Shell in modo da poter eseguire i miei comandi.

La console è un tipo speciale di terminale , era anche un dispositivo fisico. esempio in Linux abbiamo a virtual consolecui posso accedervi combinando Ctrl+ Alt+ F1 to F7.

Console a volte indica la tastiera e il monitor collegati fisicamente a questo computer.


11

Questi termini spesso vanno insieme, quindi le persone usano uno dei termini per fare riferimento alla raccolta. (cioè dal contesto è ovvio che significano una finestra terminale che fornisce un'interfaccia a una shell della riga di comando).

Per evitare che questo diventi troppo lungo, sto per dire xterm come stand-in per XTerm / Gnome Terminal / Konsole / mrxvt / etc / ecc. Lo stesso per bash.

La console ha molti altri significati specifici, quindi per ora lascia perdere.

Terminale : qualcosa che fornisce l'interazione umana con i programmi attraverso un flusso bidirezionale di ASCII / UTF8 / altri caratteri, di solito con VT100 o simile elaborazione del codice di escape. (Ad esempio backspace, cancellazione, tasti freccia, ecc. Generano codici di escape. I programmi possono stampare codici di escape per spostare il cursore sullo schermo del terminale, passare al testo in grassetto e / o al colore, cancellare o scorrere lo schermo, ecc.) Nel ai vecchi tempi, si trattava spesso di un'appliance dedicata con schermo, tastiera e porta seriale. Ora, di solito è un programma come xterm.

Esistono file di dispositivo per i programmi da leggere / scrivere da / verso terminali e anche i terminali virtuali hanno l'altro lato accessibile come file di dispositivo. Qui è dove xterm scrive il tuo input in modo che bash possa leggerlo.

Ogni terminale, inclusi quelli virtuali, fornisce un editing di linea di base quando è in modalità Cotta (anziché Raw). Questo è gestito dal codice del kernel. È bash che fornisce la modifica della riga che è possibile eseguire con i tasti freccia. (Prova a eseguire cate digitare se vuoi vedere com'è l'editing di base fornito dal kernel. Backspace funziona e un paio di altre cose secondo le tue impostazioni stty.)

Sebbene ci sia molto codice del kernel dietro i dispositivi terminali, sarebbe indicato come codice di gestione dei terminali, non come un terminale stesso.

Modifica: Gilles mi ha convinto che fare riferimento a un tty come terminale è un uso corretto. Gli emulatori di terminale e i programmi interattivi eseguiti in esecuzione su un terminale dipendono tutti dalla semantica del terminale implementata dal kernel. (La maggior parte di questo comportamento è standardizzato da POSIX ed è lo stesso su Linux / * BSD / altri Unix.) Un editor di testo a schermo intero dipende dal comportamento delle cose Unix tty e dalla gestione del codice di escape del movimento del cursore, e molte altre funzionalità dell'emulatore di terminale.

Tuttavia, un VT100 fisico con schermo, tastiera e porta seriale è un'istanza di un terminale. Non richiede un kernel Unix sull'altra estremità della sua porta seriale per essere completo. Qualcosa di completamente diverso potrebbe essere l'invio di codici di escape e testo ASCII e la ricezione dello stesso da esso. Sarebbe solo un VT100, tuttavia, non un terminale Unix. Un emulatore di terminale più la semantica Unix tty costituiscono il pacchetto completo di un terminale Unix su cui normalmente gira un programma come bash.

La riga di comando è uno stile di interfaccia utente, in cui si digita qualcosa, quindi premere Invio per far accadere qualcosa. È anche usato come scorciatoia per una shell da riga di comando, come bash o MS-DOS, ma puoi anche dire "è uno strumento da riga di comando" su qualcosa come fdisk. Considerando solo i programmi che utilizzano un terminale per la loro interfaccia utente, le due famiglie principali sono la riga di comando e il testo a schermo intero (ad esempio un editor come vi o emacs -nw).

I programmi della riga di comando che normalmente vengono eseguiti sui terminali funzionano quasi sempre con i loro input e output reindirizzati ai file, ma i programmi a schermo intero basati su terminali come editor o client di posta elettronica sono solo interattivi e non funzionerebbero.

Una shell è un programma per l'avvio di altri programmi. In un contesto Unix, è comune indicare shell della riga di comando (ovvero shell Bourne o equivalente shell C). Le shell Unix possono anche leggere i loro input da file, ad esempio script di shell. Sono linguaggi di programmazione completi, con variabili, loop e condizionali e molti programmi sono scritti in bash (o con solo le /bin/shfunzionalità della shell POSIX, per una maggiore portabilità). È anche possibile scrivere velocemente for i in *.something; do some_program "$i";done una shell interattiva.

Mettendo tutto insieme, una shell come bash (o qualunque programma tu abbia avviato eseguendo un comando shell) riceverà caratteri dal /dev/pts/Ndispositivo terminale dopo che xterm scrive il tuo input nel suo lato dello pseudo-terminale. Se esegui cat, quindi premi ^c, il codice tty del kernel agirà sul ^ce invierà un SIGINTprocesso in primo piano su quel terminale. (Nota l'uso del terminalein questo contesto per indicare Unix tty, non un emulatore di terminale o qualcosa collegato a una porta seriale.) Ciò accade perché la shell mette il terminale in modalità "cotta" prima di avviare qualsiasi programma, il che significa che il kernel agisce su un controllo- sequenze. (Il codice tty non ha ancora nulla a che fare con la gestione dei codici di escape VT100, solo alcuni codici di controllo ASCII bassi.) Se invece di un xterm, stai usando il terminale di testo della console Linux, allora il kernel IS sta eseguendo l'emulazione VT100, e gestire tutta quella roba. Linux può essere compilato senza il supporto del terminale di testo della console virtuale, ma non senza il supporto di tty.

La console è talvolta usata come sinonimo di terminale (KDE ha persino un emulatore di terminale chiamato Konsole).

Come sottolinea 0xSheepdog, ha anche un altro significato: hardware di interazione umana collegato localmente.

Nel contesto del kernel, la console ha un altro significato specifico: è il terminale in cui sono scritti i messaggi di avvio. Questa può essere una porta seriale. Normalmente, ovviamente, è la console di testo implementata dal kernel sopra i driver per hardware grafico e tastiere USB / ps2 / AT. Se avvii Linux con console=tty0 console=ttyS0,115200n8dalla riga di comando, riceverai i messaggi del kernel sullo schermo E sulla porta seriale.

Linux implementa console virtuali ( /dev/tty1a N ). Puoi scambiare quale schermo / tastiera fisici stanno controllando con Ctrl+ Alt+ . Le distro tipiche di Linux creano 6 e si avviano su tutte, quindi anche se non puoi o non vuoi avviare X11, puoi accedere 6 volte e passare da un comando, una pagina man e quant'altro, senza eseguire un programma come schermo. Linux (il kernel) include un emulatore di terminale in stile VT100 per fornire un'interfaccia terminale attraverso lo schermo e la tastiera sulle console virtuali.FNgetty

I 6 terminali virtuali standard con i prompt di login sono il motivo per cui Ctrl+ Alt+ F7ti riporta alla tua sessione X11: il server X prende la successiva console virtuale disponibile. (Il server X si apre /dev/input/...direttamente, invece di ottenere i tasti premuti da /dev/tty7, però.)

Quindi "passare a una console di testo" significa premere Ctrl+ Alt+ F1e usare quel terminale. Ai tempi in cui i computer erano lenti e non avevano molta RAM, alcune persone passavano molto del loro tempo sulle console di testo, poiché erano veloci, si poteva impostare un bel carattere e persino cambiare le dimensioni del terminale per avere caratteri più piccoli, ma avere più sullo schermo contemporaneamente. Alt+ Lefte Alt+ Rightpassare alla console precedente / successiva. (X11 lo disabilita per la sua console, ovviamente, lasciando solo la combinazione Ctrl+ Alt+ .)FN

Quindi console è l'unico di questi termini che non ha un singolo significato tecnico ben definito. Ne ha un paio diversi. (A seconda di come ti senti riguardo al terminale proprio rispetto al terminale più la gestione tty, potresti dire che anche il terminale ha più significati.)


2
Console che significa che il terminale fisico "principale" non è solo in un contesto del kernel. Ha lo stesso significato in /dev/console. La console non è particolarmente ambigua - anche se occasionalmente viene utilizzata nel senso più generale del terminale , è piuttosto raro (più raro del terminale utilizzato per indicare specificamente una console).
Gilles,

1
giusto, si, echo foo | sudo tee / dev / console> / dev / null verrà stampato sullo schermo, se il VT corrente è in modalità testo (inclusa la console framebuffer, non solo letteralmente modalità testo VGA). Se avessi avviato con la console su una porta seriale, penso che sarebbe andato lì. Si potrebbe dire che / dev / console sia il file del dispositivo per qualunque cosa il kernel stia trattando come console di sistema. Nient'altro nel sistema deve avere la nozione di essere una console tty (tranne per le cose di boot-recovery che avvia una shell sulla console TTY se il sistema non riesce ad avviarsi in modalità multiutente. Di solito da initrd)
Peter Cordes,

1
Il server xorg X (stringhe / usr / bin / Xorg) non usa / dev / console per ottenere l'accesso all'hardware. Usa / dev / tty0, e / dev / tty% d e / dev / vc /% d, per installarsi sul proprio VT. Sono abbastanza sicuro che Xorg funzionerebbe ancora bene su un PC che si è avviato con la console del kernel su una porta seriale. E che i terminali virtuali in modalità testo funzionerebbero ancora. Più lo considero, più mi sto orientando verso la visualizzazione della console in un contesto kernel come un terminale speciale, selezionato all'avvio. (Linux può effettivamente inviare i suoi messaggi console su più terminali contemporaneamente, se lo chiedi.)
Peter Cordes,

6

Penso che nei primi tempi dei computer con condivisione del tempo, ogni utente avesse un terminale (quando potevano averlo!), Ma solo gli operatori di sistema avevano una console. La console potrebbe essere utilizzata per attività come il riavvio della macchina o il recupero della diagnostica di sistema che non era possibile dai terminali utente. La console era nella sala macchine, una parte intrinseca del computer, mentre i terminali potevano essere remoti. La console includerebbe anche luci e interruttori hardware, non solo input e output di testo.

Direi che la riga di comando è un'area in cui un utente può digitare un comando, mentre la shell è il programma che interpreta / obbedisce a quel comando. Il termine "shell" è molto particolare per i derivati ​​Unix; "riga di comando" è più nella tradizione Windows / DOS. L'equivalente sui mainframe è generalmente chiamato "linguaggio di controllo del lavoro".

Chiaramente, queste distinzioni originali sono diventate sfocate nel tempo con il cambiamento della tecnologia.


3

Cercare una risposta breve incentrata sull'utente:

riga di comando : la riga in cui si immettono i comandi. Solitamente era utilizzato per indicare che è necessario eseguire qualcosa nella finestra della modalità testo (interfaccia della riga di comando) fornita dal sistema operativo.

shell - l'attuale programma eseguito dal sistema operativo per elaborare le cose in cui si entra command line. Da qui il nome: shell user-friendly per core OS non intuitivo. Fornisce prompt dei comandi, come $o >, esegue i propri comandi e app. Lavori sempre attraverso il shellprogramma e non operi mai direttamente con console o terminale.

console : è una finestra in cui sono in esecuzione i programmi in modalità testo. Questa finestra elabora la pressione dei tasti, sa che è larghezza e altezza. Può essere a schermo intero.

terminale - è un dispositivo con display per umani che accetta il flusso di input di caratteri e li mostra. Non ci sono feedback per l'utente sull'altezza o sulla larghezza (solo hack) o sulla pressione dei tasti della tastiera - solo i caratteri viaggiano verso di esso. Terminal elabora sequenze speciali in questo flusso per rendere le cose colorate, ripulire lo schermo e fare altre cose brutte. I terminali sono traballanti, perché è facile confondere le cose se il file che si sta eseguendo il piping all'output contiene sequenze speciali. Sono popolari nelle interfacce di rete e di debug del dispositivo, perché è sufficiente un unico flusso per inviare l'output e controllare il dispositivo di output e si può semplicemente tapconversare senza la necessità di inizializzare o creare una finestra.

console seriale - è una console che elabora il flusso di input come un terminale.


3

Questo è un argomento vago, perché i termini sono molto ambigui. Consiglio vivamente di leggere i link che ho fornito in questa risposta, che sono anche le mie fonti per questa risposta.

Una shell è il livello sopra il kernel:

  • Interpreta i comandi immessi dall'utente e li elabora. La shell ha accesso al kernel, a differenza degli utenti. Gli utenti possono accedere al kernel solo inserendo i comandi usando una shell e usando i processi (es. Eseguendo programmi). I programmi usano le chiamate di sistema per accedere alla funzionalità del kernel. Tutte le chiamate di sistema formano l'API di sistema.
  • Esempi di shell sono riportati nella seconda definizione del terminale.

Un terminale ha molti significati:

  • (1) Un terminale di testo . Questa è la combinazione di un monitor e una tastiera. Un cavo ha collegato il terminale al computer (spesso indirettamente). Fu chiamato terminale poiché si trovava all'estremità terminale di questo cavo. Questi terminali erano normalmente separati fisicamente dal computer, poiché in passato molti terminali erano collegati a un singolo mainframe / computer, in modo che più utenti potessero avere accesso al computer contemporaneamente.
  • (2) Una finestra terminale nota anche come emulatore di terminale . In Linux, una finestra terminale è l'emulazione di una console, contenuta in una finestra della GUI. È la CLI in cui digiti il ​​testo e questo input viene letto dalla shell che stai utilizzando. Esistono molti tipi di shell (es. Bash, dash, ksh88) e terminali (es. Konsole, gnome).
  • (3) Per una spiegazione sugli pseudo terminali , guarda questo . È una coppia di due "file di dispositivo" utilizzati per la comunicazione tra un processo e un emulatore di terminale.

Una console ha molti significati:

  • (1) un cruscotto contenente i controlli per un computer.
  • (2) Una console di System aka console del computer . Questa è la combinazione del monitor del display e una tastiera collegata a un computer. Questo è sinonimo di ciò che chiamiamo "terminale di testo". A volte anche altre periferiche di input dell'utente come un mouse fanno parte di una console.
  • (3) Un'interfaccia della riga di comando che copre l'intero schermo. Ciò è in contrasto con una finestra terminale, che è una GUI con una X nell'angolo in alto a destra per chiuderla. Queste sono le due modalità di visualizzazione per l'interfaccia della riga di comando (interfacce da riga di comando) in sistemi simili a Unix. Analogamente a una finestra del terminale, anche la console può eseguire molte shell.

Spesso, i sistemi operativi consentono di eseguire più console su una console fisica (definizione console 2). Questi sono chiamati console virtuali alias terminali virtuali , e si può accedere attraverso ctrl+ alt+ Fxcombinazioni. Ad esempio, se si desidera aprire la terza console virtuale, utilizzare la combinazione ctrl+ alt+ F3.

Le console (definizione 3) potrebbero apparire come un anacronismo, ma gli esperti dovrebbero sentirsi a proprio agio nel usarle, poiché ci sono molti sistemi operativi che non supportano la GUI. Inoltre, se una GUI smette di rispondere, la console potrebbe comunque funzionare.


2

La maggior parte dei terminali al giorno d'oggi sono emulatori di terminali strettamente parlando . È un tipo di ruolo nel funzionamento di un sistema simile a UNIX e allo stesso tempo l'interfaccia di base offerta dai sistemi. In effetti tutto, inclusa la GUI, si basa su di esso.
Colloquialmente "terminale" può anche riferirsi a punti finali in una rete di computer con una topografia a stella.

La console si riferisce alle interfacce (hardware) per i terminali. Cioè ci sono console seriali e oggigiorno per lo più virtuali .
La finestra colloquialmente denominata "console" -window è una shell, collegata a un terminale del sistema, tramite una console virtuale.

Ai tempi in cui i computer erano costosi, una struttura avrebbe potuto avere un computer reale e diversi terminali collegati ad esso, tramite cavi seriali ("console seriale"). Il sistema operativo, le operazioni, ecc. Sono stati eseguiti sul computer fisico, l'input e l'output sono avvenuti sulla console.
Puoi passare da un terminale virtuale all'altro premendo CTRL+ ALT+ F1(fino a F6): un residuo di quei tempi.
Oggi il concetto di "thin client" ritorna in questa direzione di centralizzare enormi quantità di risorse e fornire hardware sufficiente per fornire un'interfaccia all'avanguardia sul posto di lavoro reale.

shell è il "motore" che vedi nel terminale. Fornisce interoperabilità con il sistema stesso e aggiunge funzioni interessanti come il completamento automatico, variabili ecc.
Si traduce avanti e indietro tra il sistema operativo / kernel reale che utilizza le chiamate di sistema e l'utente. Le chiamate di sistema senza shell sono un po 'come la codifica assemblere almeno una shell ti dà C.

la riga di comando si riferisce al metodo di scambio di input e output tramite una finestra di testo. A rigor di termini, la riga in cui si digita è la riga di comando (corrente). Il metodo in generale è più correttamente indicato come interfaccia a riga di comando o CLI.

  1. nocciolo
  2. offre terminale
  3. il terminale è collegato tramite una console
  4. la console esegue la shell
  5. i comandi e l'output vengono scambiati tramite riga di comando (interfaccia)

1
Le istruzioni da linea di comando non sono comprese dal kernel, ma da una shell. Il "quadro di base delle istruzioni che il kernel comprende" sarebbero le chiamate di sistema. L '"interfaccia di base della riga di comando UNIX" è una shell, non c'è separazione tra quella e le "belle funzionalità". Una "finestra dell'emulatore terminale" non è una console.
Gilles,

1
@Gilles aggiustato. Ovviamente lì ho confuso alcune cose.
Segna il
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.