GNU/Linux >> Tutoriales Linux >  >> Linux

¿La diferencia exacta entre un 'terminal', un 'shell', un 'tty' y una 'consola'?

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

  • terminal
  • concha
  • tty
  • consola

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

Respuesta aceptada:

Un 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 la 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 comandos

Consola, terminal y tty están estrechamente relacionados. Originalmente, se referían a una pieza de equipo a través de la cual podía interactuar con una computadora:en los primeros días de Unix, eso significaba un dispositivo estilo teleimpresora que se asemejaba a una máquina de escribir, a veces llamada 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 del mobiliario. Muy temprano en la historia de Unix, los teclados electrónicos y las pantallas se convirtieron en la norma para las 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) además de leer y escribir. En su significado más común, terminal es sinónimo de tty. El núcleo proporciona algunos tty 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 la salida transmitidas a través de una línea serie. Otros ttys, a veces llamados pseudo-ttys , son proporcionados (a través de una fina capa de kernel) por programas llamados emuladores de terminal , como Xterm (que se ejecuta en el sistema X Window), Screen (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 secuencias de comandos de terminal interacciones), 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, una terminal X es una especie de cliente ligero, una computadora de propósito especial cuyo único propósito es controlar un teclado, una pantalla, un 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 una terminal en el sentido físico que es, por alguna definición, la terminal principal conectada directamente a una máquina. La consola aparece en 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 en particular puede ser "consola", "consola virtual", "terminal virtual" y otras variaciones.

Un caparazón es la interfaz principal que ven los usuarios cuando inician sesión, cuyo propósito principal es iniciar otros programas. (No sé si la metáfora original es que el shell es el entorno doméstico del usuario, o si el shell es donde se ejecutan otros programas).

Relacionado:Centos:¿cómo instalar entornos de escritorio en CentOS 7?

En los círculos de Unix, shell se ha especializado para referirse a 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 los archivos u otros objetos sobre los que la aplicación debe actuar, y presionar la tecla Intro. Otros tipos de entornos no usan la palabra "shell"; por ejemplo, los sistemas de ventanas implican "administradores de ventanas" y "entornos de escritorio", no un "shell".

Hay muchos shells Unix diferentes.
Los shells populares para uso interactivo incluyen Bash (el 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 indicador 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 shell ”, casi siempre se da a entender que el caparazón es un caparazón de estilo Bourne. Algunos shells que a menudo se usan para secuencias de comandos pero que carecen de funciones interactivas avanzadas incluyen el shell Korn (ksh) y muchas variantes de ash. Prácticamente cualquier sistema similar a Unix tiene un shell de estilo Bourne instalado como /bin/sh , normalmente 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 cuentas de solo transferencia de archivos).

La división del trabajo entre la terminal y el caparazón no es completamente obvia. Estas son sus tareas principales.

  • Entrada:el terminal convierte las teclas en secuencias de control (por ejemplo, Izquierdae[D ). El shell convierte las secuencias de control en comandos (por ejemplo, e[Dbackward-char ).
  • El shell proporciona la edición de líneas, el historial de entrada y la finalización.
    • El terminal puede proporcionar su propia edición, historial y finalización de línea en su lugar, y solo enviar una línea al shell cuando esté lista 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 según estas instrucciones.
  • El indicador es puramente un concepto de shell.
  • El shell nunca ve la salida de los comandos que ejecuta (a menos que sea redirigido). El historial de salida (scrollback) es puramente un concepto de terminal.
  • El terminal proporciona copiar y pegar entre aplicaciones (normalmente con el ratón o secuencias de teclas como Ctrl +Mayús +V o Cambio +Insertar ). El shell también puede tener su propio mecanismo interno de copiar y pegar (por ejemplo, Meta +W y Ctrl +Y ).
  • El control de tareas (ejecutar programas en segundo plano y administrarlos) lo realiza principalmente el shell. Sin embargo, es la terminal la que maneja combinaciones de teclas como Ctrl +C para eliminar el trabajo en primer plano y Ctrl +Z para suspenderlo.

Linux
  1. ¿Diferencia entre Shell de inicio de sesión y Shell sin inicio de sesión?

  2. ¿La diferencia entre un comando incorporado y uno que no lo es?

  3. ¿La diferencia entre las cotizaciones "...", '...', $'...' y $"..." en el caparazón?

  4. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  5. ¿La diferencia en el uso entre las variables de shell y las variables de entorno?

¿Cuál es la diferencia entre InnoDB y MyISAM?

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Cuál es la diferencia entre una consola, una terminal y un shell?

¿Cuál es la diferencia entre nohup y ampersand?

¿Cuál es la diferencia entre &> y >&en bash?