Estoy empezando a aprender UNIX. ¿Cuál es (en términos simples) la diferencia entre un shell y un terminal?

Un Shell es el software que le permite interactuar con el Kernel de Unix (la parte principal del sistema operativo en sí. Esto es equivalente a la línea de comandos en Windows).

Los diferentes shells proporcionan capacidades diferentes, los más comunes son el shell Korn, el shell Bourne y el shell C (y variantes como el shell Bourne nuevamente).

Una terminal era una pieza física de hardware que se usaba para comunicarse con la computadora (generalmente a través de una línea serial o una conexión serial a través de módems y una línea telefónica). Los primeros terminales consistían en una máquina de teletipo (o similar) con una impresora y un teclado, por lo tanto, la abreviatura de un dispositivo serie de tty. Más tarde cambiaron a monitores de tubo de rayos catódicos. Una de las terminales más populares fue la Digital Equipment Corporation VT100.

Hoy en día muy pocas personas usan terminales como dispositivos requeridos por hardware. Si está ejecutando Linux en su PC, puede interactuar con él utilizando un terminal virtual (probablemente tenga uno o dos en ejecución). Si se conecta a una computadora remota, puede usar un emulador de terminal (un software que pretende ser un terminal de hardware), a menos que lo haga a través de una conexión de línea serie o módem, es probable que esté utilizando un dispositivo pseudo terminal ( pty) en la máquina remota en lugar de un tty.

A pesar de algunas de las otras respuestas, el cambio a emuladores de terminal no se debió a un aumento en la potencia de multiprocesamiento sino a un menor costo para las PC. En lugar de gastar dinero en un dispositivo que solo le permitía conectarse a través de un enlace serie dedicado a una computadora costosa, muchas personas usaban el auge de la red y la PC significaba que las personas podían conectar su dispositivo informático multipropósito a muchas computadoras de back-end y hacer algunas tareas a nivel local.

Utilicé un terminal dedicado en 1997 cuando conectamos un terminal antiguo al puerto serie en una PC con Linux. Sin las tarjetas multiplexoras en serie, tiene un número limitado de terminales que puede conectar a una computadora moderna, pero en la década de 1980 tendría cientos de terminales conectados a una sola computadora grande.

Terminal es un dispositivo de visualización con teclado (por ejemplo, en la tienda ingresa el código PIN en la terminal)

Shell es el indicador del sistema que ves allí (en extensión moderna, digamos shell gráfico como KDE, un simple software que interactúa con la persona)

La terminal solía ser la forma en que las personas se conectaban a Unix (y a cualquier otro sistema informático) antes de que las PC estuvieran ampliamente disponibles. Todavía se usan en algunos entornos:

La abstracción de Unix / Linux para terminales se denomina “tty” (abreviatura de teletipo, que es un dispositivo aún más antiguo: un terminal que “se muestra” al imprimir entradas y salidas en papel en lugar de en una pantalla).

La gran mayoría de los usuarios hoy en día se conectan a través de un “programa de terminal” como Putty de Windows, una ventana de terminal X “xterm”, o usando ssh desde alguna otra línea de comando como cmd de Windows o la línea de comando de Mac, pero las abstracciones utilizadas para Estos son los mismos en Unix / Linux como siempre lo han sido.

Un número de “ttys” (o pttys, etc.) se adjuntan al programa “login” (o sshd para acceso ssh). Cuando se conecta a un cuadro de Unix o Linux, se conecta a un tty o ptty, se autentica y (suponiendo que su autenticación sea exitosa), inicia sesión.

Si está físicamente frente a la máquina, generalmente hay un “tty” especial llamado / dev / console o solo la consola, en el que el proceso de arranque escribe mensajes.

Una vez que haya iniciado sesión, el programa “login” o “sshd” ejecuta un shell, que es solo el programa especificado en / etc / passwd para su cuenta en el campo “shell”. Tenga en cuenta que puede ser cualquier programa, y ​​algunas cuentas tienen “shells” tontos como / bin / false para evitar inicios de sesión.

Si eres un usuario normal, tienes un shell interactivo como bash, sh, csh o tcsh (o cualquiera de las otras media docena). Estos le dan una línea de comando para que pueda hacer cosas en la máquina.

Se han dado muchas buenas respuestas. En pocas palabras, X-Term u otros programas de terminal en un entorno UNIX / Linux están emulando el terminal físico de la vieja escuela. El shell, es una pieza interactiva de software [que se ejecuta dentro … o tal vez que interactúa con el terminal] que conecta al usuario y otros programas al Kernel.

Un libro que solía tener en mi estante y que presté frecuentemente a los nuevos usuarios de UNIX fue UNIX Shell Programming por Lowell Jay Arthur, Ted Burns

Programación de UNIX Shell: Lowell Jay Arthur, Ted Burns: 9780471168942: Amazon.com: Libros

Si bien el libro es más antiguo y [si recuerdo] se centró principalmente en / bin / sh, donde la mayoría de los entornos en estos días aprovecharían / ​​bin / bash. Recomendaría recoger una copia y revisar los primeros capítulos si realmente está interesado en aprender UNIX y dejar de ser un usuario casual. Hace un gran trabajo al ofrecer una vista de alto nivel de cómo está estructurado UNIX, dónde encaja Shell y cómo puede comenzar a crear scripts y automatizar su trabajo de inmediato.

En el mundo de Linux, todos pueden verse igual desde el punto de vista del usuario en el teclado. Las diferencias están en cómo interactúan entre sí.
El shell es el programa que realmente procesa comandos y devuelve resultados. La mayoría de los shells también gestionan procesos en primer plano y en segundo plano, historial de comandos y edición de línea de comandos. Estas características (y muchas más) son estándar en bash, el shell más común en los sistemas Linux modernos.
Un terminal se refiere a un programa contenedor que ejecuta un shell. Hace décadas, este era un dispositivo físico que consistía en poco más que un monitor y un teclado. Como los sistemas unix / linux agregaron mejores sistemas de multiprocesamiento y ventanas, este concepto de terminal se resumió en software. Ahora tiene programas como Gnome Terminal, que inicia una ventana en un entorno de ventanas Gnome que ejecutará un shell en el que puede ingresar comandos.

Esta es una terminal. Solía ​​ser cómo las personas se conectaban a Unix (y a cualquier otro sistema informático) antes de que las PC estuvieran ampliamente disponibles. Todavía se usan en algunos entornos:


La abstracción de Unix / Linux para terminales se denomina “tty” (abreviatura de teletipo, que es un dispositivo aún más antiguo: un terminal que “se muestra” al imprimir entradas y salidas en papel en lugar de en una pantalla).

La gran mayoría de los usuarios hoy en día se conectan a través de un “programa de terminal” como Putty de Windows, una ventana de terminal X “xterm”, o usando ssh desde alguna otra línea de comando como cmd de Windows o la línea de comando de Mac, pero las abstracciones utilizadas para Estos son los mismos en Unix / Linux como siempre lo han sido.

Una serie de “ttys” (o pttys, etc.) se adjuntan al programa “login” (o sshd para acceso ssh). Cuando se conecta a un cuadro de Unix o Linux, se conecta a un tty o ptty, se autentica y (suponiendo que su autenticación sea exitosa), inicia sesión.

Si está físicamente frente a la máquina, generalmente hay un “tty” especial llamado / dev / console o simplemente la consola, en el que el proceso de arranque escribe mensajes.

Una vez que haya iniciado sesión, el programa “login” o “sshd” ejecuta un shell, que es solo el programa especificado en / etc / passwd para su cuenta en el campo “shell”. Tenga en cuenta que puede ser cualquier programa, y ​​algunas cuentas tienen “shells” tontos como / bin / false para evitar inicios de sesión.

Si eres un usuario normal, tienes un shell interactivo como bash, sh, csh o tcsh (o cualquiera de las otras media docena). Estos le dan una línea de comando para que pueda hacer cosas en la máquina.

Un terminal es un punto final físico donde interactúa con una computadora. Un emulador de terminal como gnome-terminal o xterm es lo que se usa comúnmente en estos días.

Un emulador de terminal generalmente proporciona muchas más facilidades que los terminales originales en los que se basa, y puede ejecutar varios emuladores de terminal en una sesión. Es un software que toma lo que escribe y lo pasa a otra cosa (el “sistema operativo” para ponerlo en términos vagos)

Un shell es realmente cualquier tipo de interfaz entre el usuario y el sistema, al que se puede acceder a través de un terminal. Puede que no. Las otras respuestas aquí hablan de shells de línea de comandos como bash, pero un shell no tiene que estar basado en texto, puede tener una GUI que es un shell. Cuando dije “sistema operativo” antes, estaba hablando del núcleo (que se encarga de hablar con otro hardware, contar eventos, organizar archivos, etc., cosas que no son muy relevantes para esta respuesta, excepto para decir que es “nivel inferior” que el shell). Mira, “kernel”, “shell” … es como palomitas de maíz o nueces. El caparazón es el bit con el que interactúa en el exterior.

En pocas palabras, el shell es un programa que toma sus comandos del teclado y los entrega al sistema operativo para que los ejecute. Un shell oculta los detalles del sistema operativo subyacente y gestiona los detalles técnicos de la interfaz del núcleo del sistema operativo.

Hay diferentes tipos de shell disponibles. En la mayoría de los sistemas Linux, un programa llamado bash (que significa Bourne Again SHell, una versión mejorada del programa de shell Bourne original, sh, escrito por Steve Bourne) actúa como el programa de shell. ksh, tcsh y zsh son algunos otros candidatos. Los emuladores de terminal son programas que ponen una ventana y permiten interactuar con el shell. xterm, rxvt, konsole, kvt, gnome-terminal son ejemplos de emuladores de terminal.

El indicador, $, que se llama símbolo del sistema, es emitido por el shell. Mientras se muestra el mensaje, puede escribir un comando. El shell lee su entrada después de presionar Entrar. Determina el comando que desea ejecutar mirando la primera palabra de su entrada. Una palabra es un conjunto ininterrumpido de caracteres. Los espacios y las pestañas separan las palabras. El script de Shell es una lista de comandos, que se enumeran en el orden de ejecución.

La respuesta de Akhil Krishnan S a ¿Cuál es el indicador de comandos de shell? ¿Y por qué lo necesito?

Solo agregaré un poco de mi conocimiento para hacerte comprender lo que son.

Shell: es un programa que proporciona la interfaz de usuario tradicional de solo texto para Linux y otros sistemas operativos similares a Unix. Es el programa el que acepta los comandos como cd, ls, etc. Hay varios tipos de shell, algunos de ellos son Bash, Zsh, Ksh que procesan comandos y devuelve resultados

Terminal: Un terminal también se llama como emuladores de terminal. Es solo un dispositivo para mostrar información y recibirla. Hace mucho tiempo, estos no eran más que dispositivos físicos que consistían en un monitor y un teclado. Hoy en día se utilizan para manejar múltiples procesos. Un terminal, por ejemplo, puede ser Xterm, Mobaxterm y Gnome.

En resumen, un terminal no es más que un dispositivo para mostrar información y recibirlo, y Shell no es más que la interpretación de comandos y trabajar en él. Espero que aclare sus dudas. Para obtener más información sobre ellos, visite esta fuente:
¿Son iguales terminal y shell?

Un terminal es una implementación de un estándar (s) que hace que la pantalla y el teclado (y probablemente otros elementos) se muestren y reaccionen a la entrada correctamente.

Un shell es un programa que se ejecuta en una terminal que toma sus comandos y los ejecuta. Los comandos pueden ser internos al shell o externos, como un comando del sistema. La salida de esos comandos se muestra en el terminal de acuerdo con los estándares del terminal.
En otras palabras, terminal es una forma de interactuar con shell.
En los viejos tiempos, el terminal era hardware, que el usuario usaba para interactuar con máquinas a diferencia de estos días.

  • Terminal = tty = Entorno de entrada / salida de texto
  • Shell = intérprete de línea de comando

Más: Página en askubuntu.com.

Shell es el programa real que toma los procesos de entrada y devuelve la salida. donde como Terminal es un envoltorio alrededor del shell que permite otras características de la GUI como pestañas, arrastrar y soltar texto / enlace, fondo personalizado con transparencia y soporte de temas, etc.

Yo usaría esta analogía: un shell es para un terminal como un programa de televisión para un televisor.

En lenguaje sencillo,
Terminal : lo que ves en la pantalla de la computadora, donde le das tus comandos.
Shell: interpreta los comandos.