Qual è la differenza tra Terminal, Console, Shell e Command Line?
Qual è la differenza tra Terminal, Console, Shell e Command Line?
Risposte:
Risposta breve:
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.
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:
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 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"? .
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.
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.
\e[D
). La shell converte le sequenze di controllo in comandi (ad es. \e[D
→ backward-char
).M-x shell
in Emacs.foo
”, “cambia il colore di primo piano in verde”, “sposta il cursore sulla riga successiva”, ecc. Il terminale agisce su queste istruzioni.Riciclato da Unix e Linux
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/Kconfig
nel sorgente del kernel.
Una rappresentazione visiva.
Qualcosa in cui puoi sederti e lavorare come un capo.
Alcuni hardware che fanno un sacco di cose.
Un altro esempio di console, potrebbe essere una console per videogiochi come un Super Nintendo [dove puoi giocare ad Actraiser]
Fondamentalmente un'applicazione per l'esecuzione di comandi.
Praticamente qualsiasi cosa in cui inserisci i comandi.
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
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.
Per riassumere la mia risposta:
Shell è un programma che processes
comanda e returns
genera, come bash in Linux.
Terminal è un programma che run
una 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 console
cui posso accedervi combinando Ctrl+ Alt+ F1 to F7.
Console a volte indica la tastiera e il monitor collegati fisicamente a questo computer.
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 cat
e 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/sh
funzionalità 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/N
dispositivo 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 ^c
e invierà un SIGINT
processo 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,115200n8
dalla riga di comando, riceverai i messaggi del kernel sullo schermo E sulla porta seriale.
Linux implementa console virtuali ( /dev/tty1
a 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.)
/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).
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.
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 shell
programma 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 tap
conversare senza la necessità di inizializzare o creare una finestra.
console seriale - è una console che elabora il flusso di input come un terminale.
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:
Un terminale ha molti significati:
Una console ha molti significati:
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.
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 assembler
e 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.