¿Cuál es la diferencia entre Terminal, Console, Shell y Command Line?
command-line
console
terminology
Akiva
fuente
fuente
Respuestas:
Respuesta corta:
Respuesta larga:
La consola y el terminal 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.
Terminal
En la terminología de Unix, un terminal es un tipo particular de archivo de dispositivo que implementa una serie de comandos adicionales ( ioctls ) más allá de la lectura y escritura. El kernel proporciona algunos terminales 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 terminales, a veces llamados pseudo-terminales o pseudo-ttys, son provistos (a través de una capa delgada del núcleo) por programas llamados emuladores de terminal . Algunos tipos de emuladores de terminal incluyen:
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.
Consola
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 ante el sistema operativo como terminales (implementadas en el núcleo). En algunos sistemas, como Linux y FreeBSD, la consola aparece como varios terminales (ttys) (las combinaciones de teclas especiales cambian entre estos terminales); solo para confundir las cosas, el nombre dado a cada terminal en 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"? .
Línea de comando [interfaz]
Una línea de comando es una interfaz donde el usuario escribe un comando (que se expresa como una secuencia de caracteres, generalmente un nombre de comando seguido de algunos parámetros) y presiona la Returntecla para ejecutar ese comando.
Cáscara
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 (con la notable excepción reciente de Gnome Shell) generalmente 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. El shell predeterminado de Ubuntu es Bash (como la mayoría de las otras distribuciones de Linux). Las alternativas populares incluyen 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 Ubuntu,/bin/sh
es Dash , una variante de ceniza (elegida porque es más rápida y usa menos memoria que 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.Reciclado de Unix y Linux
fuente
CONFIG_TTY
. El soporte para emuladores de terminal (más propiamente llamados pseudo terminales - "emulador de terminal" no siempre incluye telnetd, screen, expect, ...) está controlado porCONFIG_UNIX98_PTYS
. Soporte para la visualización en modo texto y el teclado de PC o similar es controlado porCONFIG_VT
. Verdrivers/tty/Kconfig
en la fuente del núcleo.Una representación visual.
Terminal
Algo en lo que puedas sentarte y trabajar como un jefe.
Consola
Un hardware que hace muchas cosas.
Otro ejemplo de una consola, sería una consola de videojuegos como una Super Nintendo [donde puedes jugar Actraiser]
Cáscara
Básicamente una aplicación para ejecutar comandos.
Línea de comando [interfaz]
Básicamente cualquier cosa que ingrese comandos.
fuente
Del Proyecto de Información de Linux :
En nuestras palabras, una aplicación GUI, desde donde podemos acceder a la consola de un usuario.
fuente
Las respuestas aquí parecen muy buenas. Sin embargo, son demasiado secos y técnicos para mi gusto, así que daré una idea.
La terminal es el final de algo, donde termina. Por ejemplo, si toma el metro en alguna ciudad, la estación donde baja es su terminal. O en un aeropuerto, el lugar donde las personas salen cuando llegan a su país de destino se considera la terminal. La razón por la cual la terminal en el aeropuerto es hoy en día tanto el lugar donde lleva a las personas a bordo como el lugar donde las baja del avión es por razones económicas obvias.
El propósito de una computadora es obtener datos, hacer algo con ellos y escupir el resultado. Por lo tanto, el terminal es cualquier dispositivo desde el que puede obtener el resultado del cálculo (una pantalla, por ejemplo). Simplemente sucedió que en las primeras computadoras generalmente tenías la entrada (teclado) y la salida (pantalla) como un solo dispositivo. Debido a eso, hoy en día los terminales se consideran dispositivos de entrada / salida. Un mouse, teclado, pantalla, cámara, todos son terminales.
Shell es una cosa del sistema operativo. En una computadora tienes el kernel que en Ubuntu, por ejemplo, es la parte de Linux. Ahora, dado que el núcleo es realmente de bajo nivel, se proporciona un shell, un programa que permite al usuario interactuar con el núcleo de una manera fácil. Eso es lo que BASH es, por ejemplo.
La consola es (de un diccionario)
Es por eso que en la industria de la música el tablero con todos los mandos, o en un transbordador espacial la mesa de comando, todos se consideran consolas. Super Nintendo y PS2 también se llaman consolas históricamente, ya que los primeros dispositivos de entretenimiento parecían cajas con un montón de botones.
La línea de comando es solo una interfaz, lo opuesto a la GUI. Es decir, hay dos tipos de interfaces en una computadora; CLI (interfaz de línea de comandos) y GUI (interfaz gráfica de usuario). La principal diferencia es que el primero recibe información del teclado mientras que el segundo recibe información del mouse.
fuente
Para resumir mi respuesta:
Shell es un programa que
processes
ordena yreturns
genera, como bash en Linux.Terminal es un programa que es
run
un shell , en el pasado era un dispositivo físico (antes de que los terminales fueran monitores con teclados, eran teletipos ) y luego su concepto se transfirió al software , como Gnome-Terminal .Entonces abro Gnome-Terminal , aparece una ventana negra que ejecuta Shell para poder ejecutar mis comandos.
La consola es un tipo especial de terminal , también era un dispositivo físico. ejemplo en Linux tenemos el
virtual console
cual puedo acceder a ellos mediante la combinación de Ctrl+ Alt+ F1 to F7.Consola a veces significa el teclado y el monitor conectados físicamente a esta computadora.
fuente
Estos términos a menudo van juntos, por lo que las personas usan uno de los términos para referirse a la colección. (es decir, generalmente es obvio por el contexto que significan una ventana de terminal que proporciona una interfaz a un shell de línea de comando)
Para evitar que esto llegue a largo aliento, solo voy a decir xterm como sustituto de XTerm / Gnome Terminal / Konsole / mrxvt / etc / etc. Lo mismo para bash.
La consola tiene muchos otros significados específicos, así que déjalo fuera por ahora.
Terminal : Algo que proporciona interacción humana con programas a través de un flujo bidireccional de caracteres ASCII / UTF8 / otros, generalmente con VT100 o procesamiento de código de escape similar. (Por ejemplo, retroceder, eliminar, teclas de flecha, etc. generan códigos de escape. Los programas pueden imprimir códigos de escape para mover el cursor por la pantalla del terminal, cambiar a texto en negrita y / o color, borrar o desplazar la pantalla, etc.) En los viejos tiempos, a menudo era un dispositivo dedicado con una pantalla y un teclado y un puerto serie. Ahora, generalmente es un programa como xterm.
Hay archivos de dispositivo para programas para leer / escribir desde / a terminales, y los terminales virtuales también tienen el otro lado accesible como un archivo de dispositivo. Aquí es donde xterm escribe su entrada para que bash pueda leerla.
Cada terminal, incluidas las virtuales, proporciona edición de línea básica cuando está en modo cocinado (en lugar de crudo). Esto es manejado por el código del núcleo. Es bash que proporciona la edición de línea que puede hacer con las teclas de flecha. (Intente ejecutar
cat
y escribir si desea ver cómo es la edición de línea básica proporcionada por el núcleo. Retroceso funciona, y un par de otras cosas según su configuración stty).Aunque hay una gran cantidad de código de kernel detrás de los dispositivos terminales, se lo denominará como código de manejo de terminales, no como un terminal en sí mismo.
Editar: Gilles me ha convencido de que referirse a un tty como terminal es un uso adecuado. Los emuladores de terminal y los programas interactivos que se ejecutan conectados a un terminal dependen de la semántica del terminal implementada por el núcleo. (La mayoría de este comportamiento está estandarizado por POSIX, y es el mismo en Linux / * BSD / otro Unix.) Un editor de texto de pantalla completa depende del comportamiento de las cosas de Unix, así como del manejo del código de escape del movimiento del cursor, y muchas otras características, del emulador de terminal.
Sin embargo, un VT100 físico con pantalla, teclado y puerto serie es una instancia de un terminal. No requiere un núcleo Unix en el otro extremo de su puerto serie para estar completo. Algo completamente diferente podría ser enviarle códigos de escape y texto ASCII, y recibir lo mismo. Sin embargo, solo sería un VT100, no un terminal Unix. Un emulador de terminal más la semántica de Unix tty constituyen el paquete completo de un terminal de Unix en el que normalmente se ejecuta un programa como bash.
La línea de comando es un estilo de interfaz de usuario, donde escribe algo, luego presiona Intro para que algo suceda. También se usa como una abreviatura para un shell de línea de comandos, como bash o MS-DOS, pero también puede decir "es una herramienta de línea de comandos" sobre algo como fdisk. Considerando solo los programas que usan un terminal para su interfaz de usuario, las dos familias principales son la línea de comandos y el texto de pantalla completa (por ejemplo, un editor como vi o
emacs -nw
).Los programas de línea de comandos que normalmente se ejecutan en terminales casi siempre funcionan con sus entradas y salidas redirigidas a archivos, pero los programas de pantalla completa basados en terminales como editores o clientes de correo electrónico son solo interactivos y no funcionarían.
Un shell es un programa para iniciar otros programas. En un contexto Unix, es común referirse al shell de línea de comandos (es decir, al shell Bourne o al equivalente del shell C). Los shells de Unix también pueden leer su entrada de archivos, es decir, scripts de shell. Son lenguajes de programación completos, con variables, bucles y condicionales, y muchos programas están escritos en bash (o solo con las
/bin/sh
funciones de shell POSIX, para una mayor portabilidad). También es fácilmente posible escribir un rápidofor i in *.something; do some_program "$i";done
en un shell interactivo.Al poner todo junto, un shell como bash (o cualquier programa que inicie ejecutando un comando de shell) recibirá caracteres del
/dev/pts/N
dispositivo terminal después de que xterm escriba su entrada en su lado del pseudo-terminal. Si ejecutacat
, luego presiona^c
, el código tty del kernel actuará en el^c
y enviará unSIGINT
proceso al primer plano en ese terminal. (Tenga en cuenta el uso de terminalen este contexto significa el Unix tty, no un emulador de terminal o algo conectado a un puerto serie). Esto sucede porque el shell pone el terminal en modo "cocinado" antes de iniciar cualquier programa, lo que significa que el núcleo actúa en algún control. secuencias (El código tty todavía no tiene nada que ver con el manejo de los códigos de escape VT100, solo algunos códigos de control de bajo ASCII). Si en lugar de un xterm, está utilizando el terminal de texto de la consola Linux, entonces el kernel está haciendo la emulación VT100, y manejando todas esas cosas. Linux se puede compilar sin soporte de terminal de texto de consola virtual, pero no sin soporte tty.La consola a veces se usa como sinónimo de terminal (KDE incluso tiene un emulador de terminal llamado Konsole).
Como señala 0xSheepdog, también tiene otro significado: hardware de interacción humana conectado localmente.
En un contexto de kernel, la consola tiene otro significado específico: es la terminal donde se escriben los mensajes de arranque. Este puede ser un puerto serie. Normalmente, por supuesto, es la consola de texto implementada por el núcleo en la parte superior de los controladores para hardware de gráficos y teclados USB / ps2 / AT. Si inicia Linux con
console=tty0 console=ttyS0,115200n8
en la línea de comando, recibirá mensajes del núcleo en su pantalla Y en el puerto serie.Linux implementa consolas virtuales (
/dev/tty1
a N ). Puede cambiar cuál está controlando su pantalla física / teclado con Ctrl+ Alt+ . Las distribuciones típicas de Linux crean 6 y comienzan en todas ellas, por lo que incluso si no puede o no desea iniciar X11, puede iniciar sesión 6 veces y alternar entre un comando, una página de manual y cualquier otra cosa, sin ejecutando un programa como pantalla. Linux (el núcleo) incluye un emulador de terminal estilo VT100 para proporcionar una interfaz de terminal a través de la pantalla y el teclado en las consolas virtuales.FNgetty
Los 6 terminales virtuales estándar con indicaciones de inicio de sesión son las razones por las que Ctrl+ Alt+ lo F7lleva de regreso a su sesión X11: el servidor X toma la próxima consola virtual disponible. (Sin embargo, el servidor X se abre
/dev/input/...
directamente, en lugar de obtener sus pulsaciones de teclas/dev/tty7
).Entonces "cambiar a una consola de texto" significa presionar Ctrl+ Alt+ F1y usar esa terminal. Cuando las computadoras eran lentas y no tenían mucha RAM, algunas personas pasaban gran parte de su tiempo en las consolas de texto, ya que eran rápidas, se podía configurar una buena fuente e incluso cambiar el tamaño del terminal para tener caracteres más pequeños, pero más en pantalla a la vez. Alt+ Lefty Alt+ Rightcambiar a la consola anterior / siguiente. (X11 deshabilita esto para su consola, por supuesto, dejando solo el combo Ctrl+ Alt+ ).FN
Entonces consola es el único de estos términos que no tiene un significado técnico bien definido. Tiene un par de diferentes. (Dependiendo de cómo se sienta acerca del manejo apropiado de terminal versus terminal más tty, se podría decir que el terminal también tiene múltiples significados).
fuente
/dev/console
. La consola no es particularmente ambigua, aunque ocasionalmente se usa en el sentido más general de terminal , eso es bastante raro (más raro que el terminal que se usa para referirse específicamente a una consola).Creo que en los primeros días de las computadoras de tiempo compartido, cada usuario tenía un terminal (¡cuando podían obtener uno!), Pero solo los operadores del sistema tenían una consola. La consola podría usarse para tareas como reiniciar la máquina u obtener diagnósticos del sistema que no eran posibles desde los terminales de usuario. La consola estaba en la sala de máquinas, una parte intrínseca de la computadora, mientras que los terminales podían ser remotos. La consola también incluiría luces e interruptores de hardware, no solo entrada y salida de texto.
Yo diría que la línea de comando es un área donde un usuario puede escribir un comando, mientras que el shell es el programa que interpreta / obedece ese comando. El término "shell" es muy particular para los derivados de Unix; "línea de comandos" está más en la tradición de Windows / DOS. El equivalente en mainframes generalmente se denomina "lenguaje de control de trabajo".
Claramente, estas distinciones originales se han vuelto borrosas con el tiempo a medida que la tecnología cambia.
fuente
Intentando una respuesta corta centrada en el usuario:
línea de comando : la línea donde ingresa los comandos. Por lo general, solía decir que necesita ejecutar algo en la ventana de modo de texto (interfaz de línea de comando) proporcionada por su sistema operativo.
shell : el programa real que ejecuta el sistema operativo para procesar las cosas que ingresas
command line
. De ahí el nombre: shell fácil de usar para el núcleo del sistema operativo no amigable. Proporciona el símbolo del sistema, como$
o>
, ejecuta sus propios comandos y aplicaciones. Siempre trabaja a través delshell
programa y nunca opera con la consola o terminal directamente.consola : es una ventana donde se ejecutan sus programas en modo texto. Esta ventana procesa las pulsaciones de teclas, sabe que es ancho y alto. Puede ser de pantalla completa.
terminal : es un dispositivo con pantalla para humanos que acepta la secuencia de entrada de caracteres y los muestra. No hay comentarios para el usuario sobre la altura o el ancho (solo hacks) o las pulsaciones de teclas del teclado, solo los caracteres se desplazan hacia él. El terminal procesa secuencias especiales en esta secuencia para colorear las cosas, limpiar la pantalla y hacer otras cosas desagradables. Los terminales son escamosos, porque es fácil desordenar las cosas si el archivo que está enviando contiene secuencias especiales. Son populares en las redes y las interfaces de depuración de dispositivos, porque solo necesita una sola transmisión para enviar la salida y controlar el dispositivo de salida y puede
tap
iniciar una conversación sin necesidad de inicializar o crear una ventana.consola serie : es una consola que procesa el flujo de entrada como un terminal.
fuente
Este es un tema vago, porque los términos son muy ambiguos. Recomiendo leer los enlaces que he proporcionado a lo largo de esta respuesta, que también son mis fuentes para esta respuesta.
Un caparazón es la capa sobre el núcleo:
Una terminal tiene muchos significados:
Una consola tiene muchos significados:
A menudo, los sistemas operativos le permiten ejecutar múltiples consolas en una consola física (definición de consola 2). Estas se llaman consolas virtuales , también conocidas como terminales virtuales , y se puede acceder a través de combinaciones ctrl+ alt+ Fx. Por ejemplo, si desea abrir la tercera consola virtual, use la combinación ctrl+ alt+ F3.
Las consolas (definición 3) pueden parecerle un anacronismo, pero los expertos deberían sentirse cómodos usándolas, ya que hay muchos sistemas operativos que no admiten GUI. Además, si una GUI deja de responder, la consola aún puede funcionar.
fuente
La mayoría de las terminales hoy en día son estrictamente hablando emuladores de terminal . Es un tipo de función en el funcionamiento de un sistema similar a UNIX y, al mismo tiempo, la interfaz básica que ofrecen los sistemas. De hecho, todo, incluida la GUI, se construye sobre él.
Coloquialmente "terminal" también puede referirse a puntos finales en una red informática con una topografía estelar.
La consola se refiere a las interfaces (hardware) para los terminales. Es decir, hay consolas seriales y hoy en día principalmente virtuales .
La ventana coloquialmente conocida como "consola" -ventana es un shell, conectado a un terminal del sistema, a través de una consola virtual.
En el pasado, cuando las computadoras eran caras, una instalación podría haber tenido una computadora real y varios terminales conectados a ella, a través de cables seriales ("consola serie"). El sistema operativo, las operaciones, etc. se llevaron a cabo en la computadora física, la entrada y la salida se realizaron en la (s) consola (s).
Puede cambiar entre terminales virtuales presionando CTRL+ ALT+ F1(hasta F6): un remanente de esos tiempos.
Hoy en día, el concepto de "clientes ligeros" se remonta en esta dirección de centralizar cantidades masivas de recursos y proporcionar el hardware suficiente para proporcionar una interfaz de última generación en el lugar de trabajo real.
shell es el "motor" que ves en la terminal. Proporciona interoperabilidad con el sistema en sí y agrega características agradables como autocompletar, variables, etc.
Se traduce de un lado a otro entre el sistema operativo / núcleo real que utiliza las llamadas del sistema y usted. Las llamadas al sistema sin shell son un poco como la codificación
assembler
y al menos un shell te proporcionaC
.La línea de comando se refiere al método de intercambio de entrada y salida a través de una ventana de texto. Estrictamente hablando, la línea en la que escribe es la línea de comando (actual). El método en general se conoce más correctamente como interfaz de línea de comando o CLI.
fuente