La línea de comandos es simplemente el lenguaje utilizado para enviar comandos al intérprete de línea de comandos que se ejecuta en un shell desde el emulador de terminal / terminal.
Marty Fried
1
El teletipo (TTY) se puso en funcionamiento por primera vez y se exhibió en el Mechanics Institute de Nueva York en 1844. en.wikipedia.org/wiki/Teleprinter
Una terminal está al final de un cable eléctrico, un caparazón 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, se referían a 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 llamado teletipo, o "tty" en forma abreviada. El nombre "terminal" vino desde el punto de vista electrónico, y el nombre "consola" desde el 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 proporcionados (a través de una capa delgada del núcleo) por programas llamados emuladores de terminal , como Xterm (que se ejecuta en el sistema X Window ), 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), Expect (para las secuencias de comandos de interacciones de terminal), etc.
La palabra terminal 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 un tipo de cliente ligero , 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 otra computadora más poderosa.
Una consola es generalmente un terminal en el sentido físico que es, por alguna definición, el terminal primario conectado directamente a una máquina. La consola aparece para el sistema operativo como un tty (implementado por 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.
Un 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 el shell es el entorno hogareño para el usuario, o si el shell es lo que otros programas están ejecutando).
En los círculos de Unix, Shell se ha especializado en significar un shell de línea de comandos , centrado en ingresar el nombre de la aplicación que se desea iniciar, seguido de los nombres de archivos u otros objetos sobre los que la aplicación debería actuar, y presionar la tecla Enter. 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 la simplicidad).
Los shells de línea de comandos incluyen construcciones de control de flujo para combinar comandos. Además de escribir comandos en un mensaje interactivo, los usuarios pueden escribir scripts. Los shells más comunes tienen una sintaxis común basada en Bourne_shell . Cuando se habla de " 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 el shell Korn (ksh) y muchas variantes de cenizas . Casi cualquier sistema similar a Unix tiene un shell de estilo Bourne instalado como /bin/sh, por lo general, ash, ksh o bash.
En la administración del sistema Unix, el shell de un usuario es el programa que se invoca cuando inician sesión. Las cuentas de usuario normales tienen un shell de línea de comandos, pero los usuarios con acceso restringido pueden tener un shell restringido o algún otro comando específico (por ejemplo, para la transferencia de archivos -solo cuentas).
La división del trabajo entre el terminal y el caparazón 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). El shell convierte las secuencias de control en comandos (por ejemplo, \e[D→ backward-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 está M-x shellen 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 siguiendo estas instrucciones.
El aviso 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+ Vo Shift+ Insert). El shell también puede tener su propio mecanismo interno de copiar y pegar (por ejemplo, Meta+ Wy Ctrl+ Y).
El control del trabajo (iniciar programas en segundo plano y administrarlos) se realiza principalmente por el shell. Sin embargo, es el terminal el que maneja combinaciones de teclas como Ctrl+ Cpara eliminar el trabajo en primer plano y Ctrl+ Zpara suspenderlo.
Solo objeciones: diría que ambos tipos de ttys son "proporcionados por" el núcleo. La diferencia que destacaría es que los ttys de hardware (p. Ej., Las líneas seriales y la consola incorporada en modo texto) tienen un extremo conectado al hardware y un extremo al software (p. Ej. Programas de inicio de sesión y / o shells) mientras que los pseudo-ttys tienen ambos extremos conectados al software (por ejemplo, un emulador de terminal en un extremo y un shell en el otro).
Chris Johnsen
12
@phunehehe: Correcto, ese es un significado diferente de "shell", de uso común en el diseño de sistemas operativos: el shell es la parte externa del núcleo. No es la terminología de Unix: los núcleos de Unix no tienden a tener un componente que uno podría llamar un shell.
Gilles
24
Esta es la imagen en mi mente para la metáfora de la concha.
ændrük
12
También hay otro significado de "consola" en Linux. La consola (solo hay una) es donde tiene printkprioridad suficiente (por ejemplo, kernel panics). Se configura pasando console=DEVICE,...la línea de comando del núcleo (por ejemplo, console=ttyS0,115200para el primer puerto serie, a 115.200 bps). Normalmente, el valor predeterminado es el terminal virtual, pero eso se puede cambiar cuando se compila el núcleo.
derobert
19
"... el terminal ... maneja combinaciones de teclas como Ctrl + C para eliminar el trabajo en primer plano y Ctrl + Z para suspenderlo" No del todo: el terminal simplemente envía caracteres de control, es el dispositivo tty el que decide cómo manejarlos, y es configurable . Por defecto, el dispositivo tty convierte los caracteres de control en señales enviadas al shell (y otros procesos).
Chris Page
194
Un terminal o una consola es una pieza de hardware que utiliza un usuario para 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, un archivo tty . Si busca en el directorio "/ dev" de un sistema UNIX, encontrará muchos 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).
Una consola debe ser una pieza de hardware conectada físicamente (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, ver single user mode). Un 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 tty controlador y ofrece al usuario la forma de iniciar otros programas (por ejemplo, bash, csh, tcsh).
Un emulador de terminal 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 una terminal virtual , identificado por un archivo tty , dentro del cual se ejecuta un shell .
Cualquier computadora de escritorio tiene consola del sistema (en mi 2015 o en el póster de 2010, no importa). Como se dijo correctamente, es una pieza de hardware. Pero decir "Hoy en día casi todas ... las consolas representan las" virtuales "es casi contradictorio y obviamente no es bueno.
Incnis Mrsi
1
"Un terminal o una 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".
Explicación
@andcoz - ¿Qué quieres decir con "ventana de texto"? ¿No es un emulador de terminal un terminal virtual? Si ejecuto el comando ttyen un emulador de terminal como Konsole de KDE, el resultado es / dev / pts / 0.
Motivado el
1
@IncnisMrsi - ¿No es una computadora de escritorio la consola ? Si no, ¿qué quieres decir con que tiene una consola del sistema?
Motivado el
2
@Motivated /dev/pts/0es un archivo tty, un controlador de una interfaz programática expuesta por el núcleo. A través de este controlador, un programa (por ejemplo, el shell) puede interactuar con un terminal (real o virtual). Un emulador de terminal es un software que emula un terminal. El emulador le pide al núcleo que cree un controlador para permitir que los programas interactúen consigo mismos (ver man openpty). Entonces, la información fluye desde el terminal (emulador) al controlador tty del kernel, al programa (y viceversa). Los programas y terminales no se comunican directamente, sino solo a través del archivo tty (el controlador).
andcoz
48
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
El 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 bonito borde redimensionable, 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.
PTY es un pseudo TTY. TTY puede ser, pero no es esencialmente un terminal virtual (pseudo).
Luciano
35
Un TTY (es decir, una máquina de escribir T ele TY ) es un dispositivo especial que permite a las personas sordas, con dificultades auditivas o del habla utilizar 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 un terminal que se usa para escribir mensajes de texto.
Cáscara : el protector externo que cubre parte de una semilla, es decir, el grano.
O
marco o estructura exterior a la parte central o esencial de un sistema.
Consola significa el teclado y el monitor físicamente adjuntos a una computadora.
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. un emulador de terminal 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; dos términos diferentes fueron (y son) usados para referirse a tty1, tty2 ... cositas. Hoy en día (desde ≈ 1996) "terminal virtual" también puede referirse a emuladores de terminal basados en pty .
Linux vt(el controlador de la consola del sistema en modo texto) fue la primera pieza 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 también residevt.c . Los ingenieros de kernel de Linux usan constantemente la palabra "consolas" para denotar tty1, tty2 ... y usan el prefijo "vc_" para ellos. Por ejemplo, hay una vc_allocatefunción. Por otro lado, los desarrolladores de herramientas de espacio de usuario como kbdy console-toolsutilizaron "consola virtual" (VC) y "terminal virtual" (VT) indistintamente. Ī̲ contactó a Andries E. Brouwery 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, pseudoterminales (como afirma Andries, estos no son VT ). A diferencia de las consolas virtuales, donde el núcleo proporciona la funcionalidad de terminal para una aplicación de consola, los pseudoterminales usan "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 . Ejemplos son emuladores de terminal basados en X ysshd, que asigna una pseudotty para cada sesión de inicio de sesión. Una pseudotty puede no llamarse "consola", es un error.
¿Qué es un tty? - de lo contrario, su respuesta es la única que leí
loxaxs
8
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 llamados ttys de vidrio .
Cualquier computadora necesita alguna forma de informar su estado y errores (y, probablemente, aceptar comandos). Se realiza a través de una consola que casi siempre está conectada directamente a la computadora. Por lo tanto, hay dos 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. Para ello se utiliza shell (sh, bash, csh, ksh, etc.). shell se ejecuta en tty , acepta comandos del usuario y le pide al kernel que 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 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: ya sea terminal o subsistema kernel para soportar terminales.
consola: algo donde se informa el estado y los errores ( /dev/console) o el teclado físico y la pantalla de video conectados a la computadora.
Kernel : la parte más interna de cualquier sistema operativo moderno que habla 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 algunas 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 se conecta directamente a Mainframe para la administración del sistema operativo.
tty : TeleTypewriter se utiliza para 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 comandantestty
gracias, pero básicamente si existe el terminal, ¿por qué existe todavía tty también en el sistema ubuntu para computadoras personales, accesible con alt + f-1/6 por favor, no puedo entender su utilidad por encima del hecho de que se puede acceder sin el uso del sistema de gráficos si he entendido bien
Webwoman
1
@Webwoman: tengo mi sistema configurado para permitir solo el acceso a la rootcuenta a sudotravés de un inicio de sesión de consola. Las consolas a menudo tienen un lugar especial en cuanto a privilegios, ya que alguien que tiene acceso a ellas necesariamente tiene acceso físico a la computadora con la que se comunican. También son el método de acceso de último recurso. Si el sistema operativo está en un estado parcialmente roto (como el controlador de Ethernet está roto), aún puede acceder a la consola. Es el único dispositivo de interfaz humana que SIEMPRE debe estar disponible, sin importar en qué estado se encuentre el sistema.
Omnifarioso
@Omnifarious gracias por su respuesta "Las consolas a menudo tienen un lugar especial en cuanto a privilegios ya que alguien que tiene acceso a ellas necesariamente tiene acceso físico a la computadora con la que se comunican" ¿quiso decir que TTY a menudo tiene un lugar especial en cuanto a privilegios?
Webwoman
@Webwoman - No, consola. Un TTY con frecuencia no está conectado directamente a una computadora. Y una consola con frecuencia no es un TTY en el sentido tradicional. Cuando fui a la U de MN a fines de los 80, había una red especializada en todo el campus que no estaba ejecutando el Protocolo de Internet (también conocido como IP) para conectar TTY aleatorios a computadoras aleatorias. Los mainframes de IBM tienen una situación similar y esa fue una de las principales razones por las que IBM creó SNA. Y una PC normal, incluso cuando solo muestra texto, es muy diferente a un TTY en muchos aspectos, por lo que una consola de PC no es realmente un TTY exactamente.
Omnifarioso
@Webwoman: la característica definitoria de una consola es que tiene una conexión directa con el hardware que ejecuta el sistema operativo. Esta idea está algo borrosa con las modernas 'máquinas virtuales', pero esa es la idea básica.
Omnifarioso
6
Además de la respuesta aceptada y el artículo desmitificado de TTY , realmente me encantó leer estos dos artículos:
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 luego los terminales CRT (tubo de rayos catódicos). 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 serial al host,
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í.
Déjame echar 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'. El 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 usan una técnica llamada 'línea de comando' que consiste en enviar al usuario algún tipo de mensaje, 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 un 'shell'.
En Unix, si alguien llama a algo "shell", seguramente significará alguna forma de interfaz de línea de comandos como acabo de describir. Y es muy extraño en el mundo de Unix referirse a algo como un '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. A 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 utilizan 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 a 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 vidrio' 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, a pesar de que un programa puede 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 formas 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 pueda permitir que cualquiera se conecte.
Respuestas:
Una terminal está al final de un cable eléctrico, un caparazón 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
Consola, terminal y tty están estrechamente relacionados. Originalmente, se referían a 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 llamado teletipo, o "tty" en forma abreviada. El nombre "terminal" vino desde el punto de vista electrónico, y el nombre "consola" desde el 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 proporcionados (a través de una capa delgada del núcleo) por programas llamados emuladores de terminal , como Xterm (que se ejecuta en el sistema X Window ), 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), Expect (para las secuencias de comandos de interacciones de terminal), etc.
La palabra terminal 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 un tipo de cliente ligero , 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 otra computadora más poderosa.
Una consola es generalmente un terminal en el sentido físico que es, por alguna definición, el terminal primario conectado directamente a una máquina. La consola aparece para el sistema operativo como un tty (implementado por 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.
Consulte también ¿Por qué un terminal virtual es "virtual" y qué / por qué / dónde está el terminal "real"? .
Un 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 el shell es el entorno hogareño para el usuario, o si el shell es lo que otros programas están ejecutando).
En los círculos de Unix, Shell se ha especializado en significar un shell de línea de comandos , centrado en ingresar el nombre de la aplicación que se desea iniciar, seguido de los nombres de archivos u otros objetos sobre los que la aplicación debería actuar, y presionar la tecla Enter. 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 la simplicidad).
Los shells de línea de comandos incluyen construcciones de control de flujo para combinar comandos. Además de escribir comandos en un mensaje interactivo, los usuarios pueden escribir scripts. Los shells más comunes tienen una sintaxis común basada en Bourne_shell . Cuando se habla de " 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 el shell Korn (ksh) y muchas variantes de cenizas . Casi cualquier sistema similar a Unix tiene un shell de estilo Bourne instalado como
/bin/sh
, por lo general, ash, ksh o bash.En la administración del sistema Unix, el shell de un usuario es el programa que se invoca cuando inician sesión. Las cuentas de usuario normales tienen un shell de línea de comandos, pero los usuarios con acceso restringido pueden tener un shell restringido o algún otro comando específico (por ejemplo, para la transferencia de archivos -solo cuentas).
La división del trabajo entre el terminal y el caparazón no es completamente obvia. Aquí están sus tareas principales.
\e[D
). El shell convierte las secuencias de control en comandos (por ejemplo,\e[D
→backward-char
).M-x shell
en Emacs.foo
", "cambiar el color de primer plano a verde", "mover el cursor a la siguiente línea", etc. El terminal actúa siguiendo estas instrucciones.fuente
printk
prioridad suficiente (por ejemplo, kernel panics). Se configura pasandoconsole=DEVICE,...
la línea de comando del núcleo (por ejemplo,console=ttyS0,115200
para el primer puerto serie, a 115.200 bps). Normalmente, el valor predeterminado es el terminal virtual, pero eso se puede cambiar cuando se compila el núcleo.Un terminal o una consola es una pieza de hardware que utiliza un usuario para 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, un archivo tty . Si busca en el directorio "/ dev" de un sistema UNIX, encontrará muchos 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).
Una consola debe ser una pieza de hardware conectada físicamente (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, ver
single user mode
). Un 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 tty controlador y ofrece al usuario la forma de iniciar otros programas (por ejemplo, bash, csh, tcsh).
Un emulador de terminal 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 una terminal virtual , identificado por un archivo tty , dentro del cual se ejecuta un shell .
fuente
tty
en un emulador de terminal como Konsole de KDE, el resultado es / dev / pts / 0./dev/pts/0
es un archivo tty, un controlador de una interfaz programática expuesta por el núcleo. A través de este controlador, un programa (por ejemplo, el shell) puede interactuar con un terminal (real o virtual). Un emulador de terminal es un software que emula un terminal. El emulador le pide al núcleo que cree un controlador para permitir que los programas interactúen consigo mismos (verman openpty
). Entonces, la información fluye desde el terminal (emulador) al controlador tty del kernel, al programa (y viceversa). Los programas y terminales no se comunican directamente, sino solo a través del archivo tty (el controlador).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
El 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 bonito borde redimensionable, 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.
fuente
Un TTY (es decir, una máquina de escribir T ele TY ) es un dispositivo especial que permite a las personas sordas, con dificultades auditivas o del habla utilizar 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 un terminal que se usa para escribir mensajes de texto.
Cáscara : el protector externo que cubre parte de una semilla, es decir, el grano.
O
marco o estructura exterior a la parte central o esencial de un sistema.
Consola significa el teclado y el monitor físicamente adjuntos a una computadora.
fuente
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. un emulador de terminal 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; dos términos diferentes fueron (y son) usados para referirse a tty1, tty2 ... cositas. Hoy en día (desde ≈ 1996) "terminal virtual" también puede referirse a emuladores de terminal basados en pty .
Linux
vt
(el controlador de la consola del sistema en modo texto) fue la primera pieza 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 también residevt.c
. Los ingenieros de kernel de Linux usan constantemente la palabra "consolas" para denotar tty1, tty2 ... y usan el prefijo "vc_" para ellos. Por ejemplo, hay unavc_allocate
función. Por otro lado, los desarrolladores de herramientas de espacio de usuario comokbd
yconsole-tools
utilizaron "consola virtual" (VC) y "terminal virtual" (VT) indistintamente. Ī̲ contactó a Andries E. Brouwery 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, pseudoterminales (como afirma Andries, estos no son VT ). A diferencia de las consolas virtuales, donde el núcleo proporciona la funcionalidad de terminal para una aplicación de consola, los pseudoterminales usan "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 . Ejemplos son emuladores de terminal basados en X ysshd
, que asigna una pseudotty para cada sesión de inicio de sesión. Una pseudotty puede no llamarse "consola", es un error.fuente
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.
fuente
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 llamados ttys de vidrio .
Cualquier computadora necesita alguna forma de informar su estado y errores (y, probablemente, aceptar comandos). Se realiza a través de una consola que casi siempre está conectada directamente a la computadora. Por lo tanto, hay dos 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. Para ello se utiliza shell (sh, bash, csh, ksh, etc.). shell se ejecuta en tty , acepta comandos del usuario y le pide al kernel que 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:
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:
/dev/console
) o el teclado físico y la pantalla de video conectados a la computadora.fuente
Aquí está la respuesta corta:
Kernel : la parte más interna de cualquier sistema operativo moderno que habla 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 algunas 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 se conecta directamente a Mainframe para la administración del sistema operativo.
tty : TeleTypewriter se utiliza para 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 larga y detallada está aquí: Terminal, Consola, Shell, Kernel, Comandos: diferentes partes de una computadora
fuente
root
cuenta asudo
través de un inicio de sesión de consola. Las consolas a menudo tienen un lugar especial en cuanto a privilegios, ya que alguien que tiene acceso a ellas necesariamente tiene acceso físico a la computadora con la que se comunican. También son el método de acceso de último recurso. Si el sistema operativo está en un estado parcialmente roto (como el controlador de Ethernet está roto), aún puede acceder a la consola. Es el único dispositivo de interfaz humana que SIEMPRE debe estar disponible, sin importar en qué estado se encuentre el sistema.Además de la respuesta aceptada y el artículo desmitificado de TTY , realmente me encantó leer estos dos artículos:
Este está basado en NetBSD.
Este está basado en Linux.
fuente
Déjame echar 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'. El 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 usan una técnica llamada 'línea de comando' que consiste en enviar al usuario algún tipo de mensaje, 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 un 'shell'.
En Unix, si alguien llama a algo "shell", seguramente significará alguna forma de interfaz de línea de comandos como acabo de describir. Y es muy extraño en el mundo de Unix referirse a algo como un '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. A 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 utilizan 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 a 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 vidrio' 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, a pesar de que un programa puede 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 formas 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 pueda permitir que cualquiera se conecte.
fuente