Qual è la differenza tra shell, console e terminale?


Risposte:


169

Nel mondo Linux possono sembrare tutti uguali dal punto di vista dell'utente alla tastiera. Le differenze stanno nel modo in cui interagiscono tra loro.

La shell è il programma che elabora effettivamente i comandi e restituisce l'output. La maggior parte delle shell gestisce anche processi in primo piano e in background, cronologia dei comandi e modifica della riga di comando. Queste funzionalità (e molte altre) sono standard nella bashshell più comune nei moderni sistemi Linux.

Un terminale si riferisce a un programma wrapper che esegue una shell. Decenni fa, questo era un dispositivo fisico costituito da poco più di un monitor e una tastiera. Man mano che i sistemi unix / linux aggiungevano migliori sistemi multiprocessing e windowing, questo concetto di terminale veniva estratto nel software. Ora hai programmi come Gnome Terminal che avvia una finestra in un ambiente di finestre Gnome che eseguirà una shell in cui puoi inserire i comandi.

La console è un tipo speciale di terminale . Storicamente, la console era una singola tastiera e monitor collegati a una porta console seriale dedicata su un computer utilizzato per la comunicazione diretta a basso livello con il sistema operativo. I moderni sistemi Linux forniscono console virtuali . Questi sono accessibili tramite combinazioni di tasti (ad es. Alt+ F1O Ctrl+ Alt+ F1; il tasto funzione numera diverse console) che sono gestiti a bassi livelli del sistema operativo linux - questo significa che non esiste alcun servizio speciale che deve essere installato e configurato per funzionare . Anche l'interazione con la console viene eseguita utilizzando un programma shell .


1
Prima che i terminali fossero monitor con tastiere, erano dei teletipi, una specie di macchina da scrivere elettrica. en.wikipedia.org/wiki/Teleprinter
Kevin Panko,

13
Console a volte significa "la tastiera e il monitor collegati fisicamente a questo computer". Ad esempio, "Ho effettuato l'accesso dalla console perché il server non rispondeva alla rete".
Kevin Panko,

1
@Doug Harris: puoi aggiungere alcune immagini dell'hardware di cui stai parlando?
artigli

1
Quando ero al college alla fine degli anni '80, ho lavorato molto sui terminali DEC VT220 - en.wikipedia.org/wiki/VT220 - Questo è un buon esempio del dispositivo fisico che ho descritto.
Doug Harris,

5
Quindi, se i terminali e le console sono, ai giorni nostri, implementati ciascuno nel software, qual è la differenza tra i due (ora)?
Gavin Hope,

15

Una shell è un programma che attiva un prompt e attende che tu digiti i comandi. Li esegue e quindi stampa un altro prompt. Quindi, come CMD in Windows o Bash in Unix. Può funzionare in un terminale o sulla console.

Una console era originariamente una cosa fisica, un pannello di controllo. In termini informatici, di solito significa la visualizzazione visualizzata prima dell'avvio della GUI o al termine; a volte puoi passare alla visualizzazione al posto della GUI. È il luogo in cui il sistema operativo stampa i messaggi di errore. Su un computer multiutente, è lo schermo che è effettivamente collegato al computer. Giusto per confondervi, su Windows può anche significare una finestra con una shell di comando, cioè un terminale.

Originariamente un terminale era anche hardware, utilizzato per comunicare con un computer. Oggi di solito si riferisce a una finestra con una riga di comando (shell), che potrebbe apparire in una finestra della GUI o al posto di una GUI.


2

Un terminale è un'interfaccia testuale (possibilmente verso una shell)

La differenza tra console e shell è quella che non afferro ancora, ma posso dirti in che modo un terminale è diverso da una shell.

Il terminale è ( secondo Wikipedia ) "un'interfaccia seriale per computer per l'inserimento e la visualizzazione del testo. Le informazioni sono presentate come una matrice di caratteri formati preselezionati".

È possibile utilizzare un terminale per interagire con una shell, ma è anche possibile utilizzarlo per interagire con una GUI testuale , a volte chiamata Terminal User Interface . Per esempio:

  • Vim ha elementi della GUI che includono numeri di riga e schede denominate
  • Nano ha elementi della GUI che includono un menu di aiuto di comandi
  • Tmux ha elementi della GUI che includono una barra di stato e linee di divisione tra i riquadri
  • Minicom ha elementi della GUI che includono menu e una barra di stato

In ogni caso, gli elementi della GUI vengono "disegnati" con testo anziché pixel.


Non sono sicuro che questa definizione sia solo basata sul testo. In un certo senso alcune GUI potrebbero essere considerate terminali imo.
jiggunjer,

2

Per i principianti principianti

Per una descrizione più dettagliata: https://askubuntu.com/a/506628/130518

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

Descriverò il caso d'uso più normale per questo nel seguente testo.

Un terminale utilizza una shell. Una shell può funzionare senza un terminale.

Per quanto riguarda gli articoli di tutti i giorni:

  • Terminale -> schermo TV a casa tua
  • Shell -> Programma in esecuzione sullo schermo TV

Un altro modo di vederlo: le orecchie (input) e la bocca (output) sono i terminali del suono. Il tuo cervello è l'interprete di quei suoni usando una shell specifica (elaborazione).

Il terminale è per noi umani, quindi possiamo leggere e scrivere nella / dalla shell. Gli shell possono essere eseguiti in processi in background che non richiedono interazione umana, ad esempio cron job, e quindi non richiedono un terminale.

Pochi esempi di terminali esistenti:

  • Prompt dei comandi
  • guake
  • gnome-terminal
  • Terminator

Pochi esempi di shell esistenti:

  • bash
  • sh (Bourne shell)
  • PowerShell [windows]
  • zsh (shell Z)

Ho solo scritto come funzionano normalmente questi due, ci sono altri modi in cui funzionano, ma questo è per un utente più avanzato.


1

Pensa a un altro contesto, ovvero lo sviluppo.
Anche se non hai una conoscenza approfondita dello sviluppo, probabilmente conosci le basi, ovvero: modifichi un programma, lo invii a un compilatore o a un interprete che crea un'applicazione compilata.
La console è come l'editor del tuo programma; ti aiuta a scrivere ma in realtà non esegue nulla: quando hai finito lo invii al compilatore per quello.

Puoi usare il tuo editor preferito, vim, gedit, emacs, notepad ++, Netbeans, eclise etc.etc ma alla fine sono solo strumenti diversi: se scrivi lo stesso programma l'output sarà lo stesso.
In questa metafora, la shell è il compilatore. I comandi immessi nel terminale, vengono inviati alla shell che li interpreta e li esegue immediatamente.
Quindi, mentre i terminali sono solo front-end per la shell, la shell contiene il linguaggio effettivo, come accade per il compilatore.

Ovviamente un terminale non è esattamente un editor di testo, principalmente perché non produce un file ma invia testo alla shell sottostante e recupera l'output da esso.

E la shell non è un compilatore, infatti interpreta il tuo comando ed esegue immediatamente invece di costruire un eseguibile.

Anche con questa grande differenza, trovo questa metafora che aiuta molto a comprendere questa idea.


0

Non c'è davvero molta differenza. Molto tempo fa, quando la "shell" era un programma, il "terminale" era un wrapper frontend per questo programma e la "console" era la connessione fisica al computer (tastiera / schermo).

C'è una differenza a seconda del sistema operativo in uso. La shell "standard" è BASH , che è normalmente disponibile su tutti i tipi di Linux / Unix. Windows utilizza una shell completamente diversa.

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.