it-swarm-es.tech

¿Cuál es la diferencia exacta entre un 'terminal', un 'Shell', un 'tty' y una 'consola'?

Creo que estos términos casi se refieren a lo mismo, cuando se usan libremente:

  • terminal
  • Cáscara
  • tty
  • consola

¿A qué se refiere exactamente cada uno de estos términos?

1278
Lazer

Una terminal está al final de un cable eléctrico, un Shell es el hogar de una tortuga, tty es una abreviatura extraña y una consola es una especie de gabinete.

Bueno, etimológicamente hablando, de todos modos.

En terminología de Unix, la respuesta corta es que

  • terminal = tty = entorno de entrada/salida de texto
  • consola = terminal física
  • Shell = intérprete de línea de comando

Consola, terminal y tty están estrechamente relacionados. Originalmente, significaban un equipo a través del cual se podía interactuar con una computadora: en los primeros días de Unix, eso significaba un dispositivo de estilo teleimpresor que se parecía a una máquina de escribir, a veces llamada teletipo, o "tty "En taquigrafía. El nombre "terminal" vino del punto de vista electrónico, y el nombre "consola" del punto de vista de los muebles. Muy temprano en la historia de Unix, los teclados y pantallas electrónicas se convirtieron en la norma para los terminales.

En la terminología de Unix, un tty es un tipo particular de archivo de dispositivo que implementa una serie de comandos adicionales ( ioctls ) más allá de leer y escribir. En su significado más común, terminal es sinónimo de tty. El núcleo proporciona algunos ttys en nombre de un dispositivo de hardware, por ejemplo, con la entrada proveniente del teclado y la salida yendo a una pantalla de modo de texto, o con la entrada y salida transmitidas a través de una línea en serie. Otros ttys, a veces llamados pseudo-ttys , son provistos (a través de una capa delgada del núcleo) por programas llamados emuladores de terminal , como Xterm (ejecutándose en X Window System ), Pantalla = (que proporciona una capa de aislamiento entre un programa y otro terminal), Ssh (que conecta un terminal en una máquina con programas en otra máquina), Esperar (para secuencias de comandos interacciones terminales), etc.

El terminal de Word también puede tener un significado más tradicional de un dispositivo a través del cual uno interactúa con una computadora, generalmente con un teclado y una pantalla. Por ejemplo, un terminal X es una especie de thin client , una computadora de propósito especial cuyo único propósito es manejar un teclado, pantalla, mouse y ocasionalmente otros periféricos de interacción humana, con las aplicaciones reales ejecutándose en otro , computadora más potente.

Una consola es generalmente una terminal en el sentido físico que es, por alguna definición, la terminal primaria directamente conectada a una máquina. La consola aparece para el sistema operativo como un tty (implementado en el núcleo). En algunos sistemas, como Linux y FreeBSD, la consola aparece como varios ttys (las combinaciones de teclas especiales cambian entre estos ttys); solo para confundir las cosas, el nombre dado a cada tty particular puede ser "consola", "consola virtual", "terminal virtual" y otras variaciones.

Vea también ¿Por qué un terminal virtual es "virtual", y qué/por qué/dónde está el terminal "real"? .


A Shell es la interfaz principal que los usuarios ven cuando inician sesión, cuyo objetivo principal es iniciar otros programas. (No sé si la metáfora original es que Shell es el entorno hogareño para el usuario, o que Shell es en lo que se ejecutan otros programas).

En círculos unix, Shell se ha especializado para significar un Shell de línea de comando , centrado en ingresar el nombre de la aplicación que uno quiere para comenzar, seguido de los nombres de archivos u otros objetos sobre los que la aplicación debería actuar, y presionando la tecla Intro. Otros tipos de entornos no usan la palabra "Shell"; por ejemplo, los sistemas de ventanas involucran " administradores de ventanas " y " entornos de escritorio ", no un "Shell".

Hay muchas conchas de Unix diferentes. Los shells populares para uso interactivo incluyen Bash (el valor predeterminado en la mayoría de las instalaciones de Linux), zsh (que enfatiza el poder y la personalización) y fish (que enfatiza sencillez).

Los shells de línea de comandos incluyen construcciones de control de flujo para combinar comandos. Además de escribir comandos en una solicitud interactiva, los usuarios pueden escribir scripts. Los shells más comunes tienen una sintaxis común basada en Bourne_Shell . Cuando se discute “ Programación de Shell ”, el Shell casi siempre se supone que es un Shell de estilo Bourne. Algunos shells que a menudo se usan para scripts pero carecen de funciones interactivas avanzadas incluyen Korn Shell (ksh) y muchas variantes ash . Casi cualquier sistema similar a Unix tiene un Shell de estilo Bourne instalado como /bin/sh, generalmente ash, ksh o bash.

En la administración del sistema Unix, el Shell de usuario es el programa que se invoca cuando inician sesión. Las cuentas de usuario normales tienen un Shell de línea de comando, pero los usuarios con el acceso restringido puede tener un Shell restringido o algún otro comando específico (por ejemplo, para cuentas de solo transferencia de archivos).


La división del trabajo entre la terminal y el Shell no es completamente obvia. Aquí están sus tareas principales.

  • Entrada: el terminal convierte las claves en secuencias de control (p. Ej. Left → \e[D). Shell convierte las secuencias de control en comandos (por ejemplo, \e[Dbackward-char).
  • El Shell proporciona la edición de línea, el historial de entrada y la finalización.
    • El terminal puede proporcionar su propia edición de línea, historial y finalización, y solo enviar una línea al Shell cuando esté listo para ejecutarse. El único terminal común que funciona de esta manera es M-x Shell en Emacs.
  • Salida: el Shell emite instrucciones como "mostrar foo", "cambiar el color de primer plano a verde", "mover el cursor a la siguiente línea", etc. El terminal actúa sobre estas instrucciones.
  • The Prompt es puramente un concepto de Shell.
  • El Shell nunca ve la salida de los comandos que ejecuta (a menos que se redirija). El historial de salida (scrollback) es puramente un concepto terminal.
  • El terminal proporciona copiar y pegar entre aplicaciones (generalmente con el mouse o secuencias de teclas como Ctrl+Shift+V o Shift+Insert) El Shell también puede tener su propio mecanismo interno de copiar y pegar (p. Ej. Meta+W y Ctrl+Y).
  • Control de trabajo (el lanzamiento de programas en segundo plano y su administración) se realiza principalmente por el Shell. Sin embargo, es el terminal el que maneja combinaciones de teclas como Ctrl+C matar el trabajo en primer plano y Ctrl+Z para suspenderlo.

Un terminal o un consola es una pieza de hardware, mediante la cual un usuario puede interactuar con un Host. Básicamente un teclado junto con una pantalla de texto.
Hoy en día casi todos los terminales y consolas representan los "virtuales".

El archivo que representa un terminal se llama tradicionalmente archivo tty. Si busca en el directorio "/ dev" de un sistema UNIX, encontrará una gran cantidad de archivos tty conectados a consolas virtuales (por ejemplo, tty1 en linux), terminales virtuales (por ejemplo, pts/0) o hardware conectado físicamente (por ejemplo, ttyS0 es el terminal serie físico, si lo hay, conectado en el primer puerto serie del Host).

A consola debe ser una pieza de hardware físicamente conectada a (o parte de) el Host. Tiene un papel especial en el sistema: es el punto principal para acceder a un sistema para mantenimiento y algunas operaciones especiales solo se pueden realizar desde una consola (por ejemplo, consulte single user mode). A terminal puede ser, y generalmente es, una pieza remota de hardware.

Por último, pero no menos importante, un Shell es un programa especial que interactúa con un usuario a través de un control de tty y ofrece al usuario la forma de iniciar otros programas ( por ejemplo, bash, csh, tcsh).

A terminal emulator es un programa que emula un terminal físico (por ejemplo, xterm, gnome-terminal, minicom).

Entonces, cuando busca una "ventana de texto" en su sistema Linux (bajo X11), está buscando: un emulador de terminal , conectado a un terminal virtual , identificado por un archivo tty , dentro del cual se ejecuta un Shell .

199
andcoz

Breve explicación:

La consola es una terminal. Un sistema tiene una consola y potencialmente múltiples terminales. La consola suele ser la interfaz principal para administrar una computadora, por ejemplo, mientras se está iniciando.

Un terminal es una sesión que puede recibir y enviar entradas y salidas para programas de línea de comandos. La consola es un caso especial de estos.

Un TTY es esencialmente un pseudo dispositivo, llámelo recurso de núcleo, que los procesos utilizan para acceder a un terminal específico. Los TTY pueden estar vinculados al hardware, como un puerto serie, o pueden ser virtuales, por ejemplo, creados cuando un usuario inicia sesión a través de una red

Shell es un programa que se utiliza para controlar y ejecutar programas. A menudo se usa de forma interactiva, a través de un terminal. Existen varios programas de Shell, Bash es posiblemente el Shell más utilizado en la actualidad. Otros shells, sin ningún orden en particular, incluyen Bourne Shell, C-Shell, Dash, Tsch, Ksh y el zsh cada vez más popular. Hay muchos más.

Cuando tiene una GUI, puede usar un programa de terminal para dibujar un borde redimensionable de Niza, agregar barras de desplazamiento y formatear el texto, y así sucesivamente, para una sesión de terminal. A menudo, estos se llaman emuladores de terminal, y a veces pueden manejar múltiples sesiones a través de un concepto TAB. Un emulador de terminal a menudo inicia un Shell para permitirle trabajar interactivamente en una línea de comando.

51
Johan

A [~ # ~] tty [~ # ~] (es decir [~ # ~] t [~ # ~] ele [~ # ~] ty [~ # ~] pewriter) es un dispositivo especial que permite a las personas las personas sordas, con problemas de audición o del habla usan el teléfono para comunicarse, permitiéndoles escribir mensajes de texto. Se requiere un TTY en ambos extremos de la conversación para comunicarse.
O
[~ # ~] tty [~ # ~] es terminal que se usa para escribir mensajes de texto.


Shell : el protector externo que cubre parte de una semilla, es decir, el núcleo.
O
marco o estructura exterior a la parte central o esencial de un sistema.
enter image description here


Consola significa que el teclado y el monitor se adjuntan físicamente a una computadora.

36
Premraj

Ya hay dos excelentes respuestas, pero "me gustaría agregar información sobre la frase " terminal virtual ". En general, significa algo que proporciona la apariencia/funcionalidad de un terminal, i. mi. a terminal-emulator en sentido amplio. Pero en los primeros días de Linux (1994–95) fue utilizado como sinónimo de “consola virtual” (varias interfaces de usuario no relacionadas) , por algunos desarrolladores. Este uso persiste en la documentación; Se usaron (y se usan) dos términos diferentes para referirse a tty1, tty2 ... cositas. Hoy en día (desde 961996) "terminal virtual" también puede referirse a emuladores de terminal basados ​​en pty .

El vt (controlador de la consola del sistema de modo de texto) de Linux fue la primera parte de su núcleo. Inicialmente se usó para la conexión a mainframes y, en este sentido, es un "terminal virtual", de ahí su nombre. El código que controla las consolas virtuales reside en vt.c también. Los ingenieros de kernel de Linux usan constantemente las "consolas" de Word para denotar tty1, tty2 ... y usan el prefijo "vc_" para ellos. Por ejemplo, hay un vc_allocate función. Por otro lado, los desarrolladores de herramientas de espacio de usuario como kbd y console-tools utilizaba "consola virtual" (VC) y "terminal virtual" (VT) indistintamente. Ī̲ contactó a AndriesE. Brouwer y le pidió que aclarara la terminología utilizada por los primeros desarrolladores (1994–95). Andries amablemente proporcionó algunas respuestas. Afirma que VT y VC son abreviaturas sinónimos e "indivisibles". -> En general, una consola virtual es un terminal virtual, pero lo contrario no es cierto. Esos "terminales virtuales" que no son consolas virtuales son de hecho pseudoterminals (como dice Andries, estas no son VT). A diferencia de las consolas virtuales, donde el núcleo proporciona funcionalidad de terminal para una aplicación de consola, pseudoterminales se "dispositivos" PTY para organizar la comunicación entre las aplicaciones de consola y el programa de creación de terminales que se ejecuta en el espacio de usuario . Los ejemplos son emuladores de terminal basados ​​en X y sshd, que asigna una pseudotty para cada sesión de inicio de sesión. Una pseudotty no se puede llamar "consola", es un error.

30
Incnis Mrsi
  • Terminal = Una interfaz que proporciona una pantalla para la salida y un teclado para la entrada a una sesión de Shell.

  • Shell = Intérprete que ejecuta comandos escritos como una cadena

  • Consola: en realidad, dos tipos de consola que utilizamos

    • Consola física = La pantalla de hardware y el teclado utilizados para interactuar con un sistema.

    • Consola virtual = Una de las múltiples consolas lógicas que pueden admitir una sesión de inicio de sesión independiente.

  • tty (teletipo, es decir, terminal). = Un terminal es básicamente un dispositivo de interfaz de usuario que usa texto para input y output.message.

16
Rakib

Necesitas sumergirte en la historia.

Había dispositivos tipo máquina de escribir con papel y teclado. Se llamaron teletipos (que significa "escribir de forma remota", ya que "tele" significa "remoto") o ttys para abreviar. En los años 70 fueron obsoletos por dispositivos con monitor CRT llamado glass ttys .

Cualquier computadora necesita alguna forma de informar su estado y errores (y, probablemente, aceptar comandos). Se realiza a través de la consola que casi siempre está conectada directamente a la computadora. Entonces, hay 2 significados para la consola : algo que se usa para informar el estado y algo que está conectado directamente.

UNIX es un sistema interactivo: varios usuarios pueden conectarse a él e iniciar aplicaciones. Las primeras computadoras usaron teletipos ( tty ) para eso: cada usuario tenía un teletipo conectado a la máquina con una conexión de línea serial. Tal teletipo se llama terminal . UNIX también obtuvo un subsistema especial para manejar "usuarios sentados detrás de terminales", que también se llama tty porque los primeros terminales eran teletipos. Cada proceso podría estar conectado a tty en Unix. Eso significa que hay un usuario en algún lugar cerca de la terminal. Ver http://www.linusakesson.net/programming/tty/ para más información.

Los usuarios necesitan alguna forma de decirle al kernel que ejecute la aplicación. Shell (sh, bash, csh, ksh, etc.) se usa para eso. Shell se ejecuta en tty , acepta comandos del usuario y le pide al núcleo que se ejecute alguna aplicación.

Pero los terminales no siempre están físicamente conectados a la máquina. Puede haber alguna aplicación que "emule" el terminal aceptando pulsaciones de teclas del usuario y enviándolas a alguna parte (xterm y ssh son buenos ejemplos). Hay una API en Kernel llamada pseudo terminal para eso. Por lo tanto, su tty realmente puede estar conectado a alguna aplicación en lugar de un terminal real. Xterm usa X11 para mostrar texto y ssh usa una conexión de red para ello.

La PC de IBM tiene teclado y tarjeta de video (a veces también se les llama consola ). Linux puede hacer cosas diferentes con él:

  • Úselo como "motor para informar errores y estado": consola Linux. Si pasa console =/dev/ttyS0 al kernel, usará algo conectado a COM1 como consola, y si no lo hace, usará la consola de la PC.
  • Úselo para emular el terminal, llamado terminal virtual (vty).

También puede dejar de emular el terminal en la consola y dárselo a alguna aplicación. La aplicación puede cambiar su modo de video y usarlo exclusivamente (X11 o svgalib pueden hacer eso).

Entonces, aquí hay significados modernos:

  • terminal: algo con un usuario real sentado detrás de él. Podría ser terminal físico (raro) o pseudo terminal (xterm, ssh) o terminal virtual (vty en Linux)
  • Shell: aplicación (bash, tcsh, etc.) que ayuda al usuario a interactuar con el sistema.
  • tty: terminal o subsistema kernel para soportar terminales.
  • consola: algo donde se informa el estado y los errores (/dev/console) o teclado físico y pantalla de video conectado a la computadora.
12
user996142

Aquí está la respuesta corta:

Kernel : la parte más interna de cualquier sistema operativo moderno que se comunica directamente con el hardware real.

Shell - envoltorio alrededor del núcleo real. Cada vez que ejecutamos el comando, en realidad hablamos con Shell, que a su vez invoca las instrucciones apropiadas del Kernel. Aparte de esto, el Shell es capaz de realizar otras cosas como encontrar el programa apropiado mientras tiene comandos, algunos nombres cortos de archivos, comandos de tuberías, etc.

Terminal - en la era de la informática anterior, las computadoras (conocidas como Mainframe) eran gigantes. Por lo tanto, era fácil tener una sola unidad de procesamiento y conectarla desde muchos lugares. Terminal es el hardware real con teclado y dispositivos de salida conectados a la unidad central.

Consola - Tipo especial de terminal que está directamente conectado a Mainframe para fines de la Administración del SO.

tty - TeleTypewriter solía enviar y recibir datos desde y hacia Mainframe. Utilizado antes de que las Terminales de video estuvieran disponibles. Pero, convencionalmente, todavía ha sido nombrado como tty. Incluso el comandante stty

La respuesta detallada larga está aquí - Terminal, Consola, Shell, Kernel, Comandos - Diferentes partes de una computadora

9

Aparte de la respuesta aceptada y El TTY desmitificado artículo, realmente me encantó leer estos dos artículos:

Esto uno está basado en NetBSD.

En la edad de piedra de Unix, los sistemas informáticos consistían en un mainframe, una gran caja de luces parpadeantes que tenía memoria, almacenamiento masivo y unidades informáticas, y que ejecutaban procesos iniciados por usuarios u operadores. Como el hardware era muy costoso, los sistemas se utilizaron como verdaderos sistemas multiusuario, con muchas personas interactuando con el sistema al mismo tiempo. Lo que generalmente no tenía, a diferencia de las estaciones de trabajo Unix de hoy, era un monitor fijo y un teclado. En cambio, la emisión de comandos a la máquina y la recuperación de la salida se realizó a través de líneas seriales, utilizando primero los teletipos y los terminales CRT (tubo de rayos catódicos) más tarde. Los teletipos, de ahí provienen los "ttys" en Unix, son máquinas de escribir electrónicas que envían teclas presionadas a través de la línea en serie al Host, y las respuestas se envían de vuelta al char de teletipos por char a través de la línea en serie, con la impresora incorporada poniendo la respuesta en papel, como una máquina de escribir.

Esto uno está basado en Linux.

Los terminales son dispositivos que proporcionan capacidades mejoradas de entrada/salida más allá de lo que se podría lograr solo con archivos, tuberías y enchufes normales. Estas características están diseñadas para facilitar que los humanos interactúen con las computadoras, y son inútiles para los programas que intentan comunicarse entre sí.

7
Nishant

Déjenme echarle un vistazo a esto ... Usaré Unix y Linux más o menos como sinónimos. Si me refiero a algo histórico que precede a la existencia de Linux, generalmente escribiré "Unix", y si estoy hablando de algo más reciente, o algo específico al sabor Linux de Unix, generalmente escribiré "Linux ".

Cáscara

Lo único en su lista que es un concepto discreto que no se superpone con los demás es el 'Shell'. Shell es un programa cuyo propósito es comunicarse con un usuario y llevar a cabo operaciones del sistema operativo en su nombre.

Los shells más comunes utilizan una técnica llamada 'línea de comando' que consiste en enviar al usuario algún tipo de Aviso, esperar a que el usuario escriba un comando de texto y luego ejecutar ese comando. Pero hay shells basados ​​en menús, e incluso shells gráficos (como el Explorador de archivos de Windows), aunque ninguna persona de Unix que se respete nunca lo llamaría 'Shell'.

En Unix, si alguien llama a algo 'Shell', seguramente significará alguna forma de interfaz de línea de comando como acabo de describir. Y es muy extraño en el mundo de Unix referirse a algo como 'Shell' si no se está comunicando a un usuario que usa el modelo tty que describo más adelante.

TTY

Esto es confuso porque puede referirse a algunos tipos diferentes de cosas.

En Linux, hay un tipo de dispositivo llamado 'tty'. Es un dispositivo abstracto que se espera que se use para la comunicación bidireccional con algo que sea un usuario o que esté recibiendo información de un usuario de alguna manera. Algunas veces ese dispositivo abstracto puede corresponder directamente a algún dispositivo físico. A veces puede ser un programa que le presenta a alguien una ventana en la que aparece la comunicación y en la que el usuario puede escribir.

Pero, la razón por la que existe este dispositivo abstracto y la razón por la que se llama 'tty' es que 'tty' es la abreviatura de 'teletipo', que era un dispositivo físico real que tenía una impresora impresa en papel combinada con un teclado. El modelo que el dispositivo abstracto 'tty' presenta a los programas que lo usan es básicamente que hay un teletipo en el otro extremo. Le envías caracteres y esos caracteres aparecen en el teletipo. Cuando lees caracteres, esos caracteres representan teclas que se escribieron en un teclado.

Los viejos ttys basados ​​en impresoras de papel fueron rápidamente reemplazados por ttys de video. En esos, por supuesto, no hay rollo de papel. Y, de hecho, es posible sobrescribir cualquier carácter en la pantalla. Pero, en lugar de presentar algún tipo de interfaz de 'pantalla' abstracta para los programas, se espera que los programas envíen secuencias especiales de caracteres llamados secuencias de escape que realizan una variedad de tareas. Por lo general, hay una cosa abstracta llamada 'cursor' que se puede mover por la pantalla, y cualquier carácter enviado reemplazará lo que esté en el cursor y el cursor avanzará un carácter más adelante. A menudo, también puede cambiar el color de un personaje que está a punto de imprimirse con secuencias de escape.

Hay 'ttys de cristal' que no siguen este modelo y, en consecuencia, se manejan mal en el mundo de Unix. La familia de terminales de video IBM 3270 pertenece a esta categoría.

Lo que la gente de Linux/Unix suele llamar una 'ventana de Shell' es una emulación de un cristal utilizando una interfaz gráfica de usuario. Internamente, los programas que se ejecutan dentro de una ventana de Shell están hablando con un dispositivo tty virtual que a veces se denomina pseudo-tty o pseudo-terminal (también conocido como pty).

Terminal

Una terminal es solo un lugar donde se supone que la computadora y los humanos deben interactuar. Los terminales pueden ser completamente gráficos y no seguir el modelo tty de ninguna manera, aunque un programa pueda usar sus capacidades para emular esto. Todos los ttys físicos reales (de vidrio o de otro tipo) son terminales.

Consola

Una consola es un tipo especial de terminal que generalmente se supone que está conectado de manera segura y directa al hardware en el que se ejecuta el sistema operativo.

En Linux, la consola se virtualiza de forma pequeña, lo que le permite usar una pulsación de tecla especial para cambiar entre las consolas virtuales. Pero esta virtualización se realiza con una pieza real de hardware por software en el núcleo.

Hay maneras de usar Linux a través de lo que se llama una 'consola serie', que es una consola que está conectada a la computadora a través de un puerto serie como un puerto USB (o, en algunas computadoras muy pequeñas y/o muy viejas, un puerto RS-232 de algún tipo) y sigue el antiguo modelo de teletipo de una manera bastante estricta.

Una vez más, la idea es que esta consola esté conectada de manera física directa a la computadora en lugar de a través de algún tipo de red que permita a cualquiera conectarse.

5
Omnifarious