GNU/Linux >> Linux Esercitazione >  >> Linux

L'esatta differenza tra un "terminale", un "shell", un "tty" e una "console"?

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

  • terminale
  • conchiglia
  • Tty
  • console

A cosa si riferisce esattamente ciascuno di questi termini?

Risposta accettata:

Un terminale è all'estremità 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 è che

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

Console, terminale e tty sono strettamente correlati. In origine, intendevano un'apparecchiatura attraverso la quale si poteva interagire con un computer:nei primi giorni di Unix, questo significava un dispositivo in stile telescrivente simile a una macchina da scrivere, a volte chiamata telescrivente, o "tty" in abbreviazione. Il nome “terminale” deriva dal punto di vista elettronico, e il nome “console” dal punto di vista dell'arredo. Molto presto nella storia di Unix, tastiere e display elettronici sono diventati la norma per i terminali.

Nella terminologia unix, un tty è un particolare tipo di file di dispositivo che implementa una serie di comandi aggiuntivi (ioctl) oltre alla lettura e alla scrittura. Nel suo significato più comune, terminale è sinonimo di tty. Alcuni tty sono forniti dal kernel per conto di un dispositivo hardware, ad esempio con l'input proveniente dalla tastiera e l'output che va su 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 forniti (attraverso un sottile strato di kernel) da programmi chiamati emulatori di terminale , come Xterm (in esecuzione nel sistema X Window), Screen (che fornisce uno strato di isolamento tra un programma e un altro terminale), Ssh (che collega un terminale su una macchina con programmi su un'altra macchina), Expect (per il terminale di scripting interazioni), ecc.

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

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

Un guscio è l'interfaccia principale che gli utenti vedono quando effettuano l'accesso, il cui scopo principale è avviare altri programmi. (Non so se la metafora originale sia che la shell sia l'ambiente domestico per l'utente, o che la shell sia ciò in cui sono in esecuzione altri programmi.)

Correlati:Centos - Come installare gli ambienti desktop su CentOS 7?

Nelle cerchie Unix, shell si è specializzato per indicare una shell della riga di comando, incentrata sull'immissione del nome dell'applicazione che si desidera avviare, seguito 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 a finestre implicano "gestori di finestre" e "ambienti desktop", non una "shell".

Esistono molte shell unix diverse.
Le shell popolari per l'uso interattivo includono Bash (l'impostazione predefinita sulla maggior parte delle installazioni Linux), zsh (che enfatizza la potenza e la 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 i comandi in un prompt interattivo, gli utenti possono scrivere script. Le shell più comuni hanno una sintassi comune basata su Bourne_shell. Quando si parla di "programmazione 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 ash. Praticamente qualsiasi sistema simile a Unix ha una shell in stile Bourne installata 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 qualche altro comando specifico (ad esempio per gli account di solo trasferimento file).

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

  • Input:il terminale converte le chiavi in ​​sequenze di controllo (es. Sinistrae[D ). La shell converte le sequenze di controllo in comandi (ad es. e[Dbackward-char ).
  • La modifica della riga, la cronologia degli input e il completamento sono forniti dalla shell.
    • Il terminale può invece fornire la propria modifica, cronologia e completamento della riga e inviare una riga alla shell solo quando è pronta per essere eseguita. L'unico terminale comune che opera in questo modo è M-x shell in 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 in base a 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 reindirizzato). La cronologia di output (scrollback) è puramente un concetto terminale.
  • Il copia-incolla tra le applicazioni è fornito dal terminale (di solito con il mouse o sequenze di tasti come Ctrl +Maiusc +V o Maiuscole +Inserisci ). La shell potrebbe anche avere un proprio meccanismo interno di copia-incolla (ad es. Meta +C e Ctrl +S ).
  • Il controllo del lavoro (avvio di programmi in background e gestione degli stessi) viene eseguito principalmente dalla shell. Tuttavia, è il terminale che gestisce combinazioni di tasti come Ctrl +C per terminare il lavoro in primo piano e Ctrl +Z di sospenderlo.

Linux
  1. Qual è la differenza tra InnoDB e MyISAM?

  2. Differenza tra shell di accesso e shell non di accesso?

  3. La differenza tra un comando integrato e uno che non lo è?

  4. La differenza tra le citazioni "...", '...', $'...' e $"..." In The Shell?

  5. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Login e Non-Login Shell

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

Qual è la differenza tra ls e l?

Differenza tra i comandi nello script bash e i comandi nel terminale

Qual è la differenza tra unlink e rm?