Esta es la diferencia entre terminal, consola, shell y línea de comandos. Despejamos dudas habituales en torno al 'modo texto'

Esta es la diferencia entre terminal, consola, shell y línea de comandos. Despejamos dudas habituales en torno al 'modo texto'
3 Comentarios

"Trabajar en modo texto". "Gestionar desde la línea de comandos". "Abrir la consola". Todas ellas son expresiones que nos remiten a conceptos que, por lo similares que son, tendemos a confundir y entremezclar. Y el mundo que se nos presenta más allá de las típicas interfaces gráficas ya resulta lo bastante confuso para los novatos como para, encima, internarse en él sin tener claros los conceptos.

Arrojemos un poco de luz sobre el asunto:

[Emulador de] Terminal

La terminal, propiamente dicha, es un dispositivo físico que nos permite introducir y recibir información de una computadora, sin que necesariamente el procesado de las instrucciones y datos se realice en el mismo. Hoy en día, al hablar de interactuar con el sistema operativo en modo texto, en la mayoría de los casos no nos referiremos a esta acepción de 'terminal', sino a los más correctamente denominados 'emuladores de terminal', que nos permiten utilizar el modo texto dentro de una interfaz gráfica de usuario.

Esta otra clase de terminales son, meramente, aplicaciones que ejecutan y nos dan acceso a una shell. De hecho, lo habitual es que nos permitan usar múltiples tipos de shell. Por ejemplo, tenemos el caso de Windows Terminal, que por defecto nos permite usar Windows PowerShell, PowerShell 'a secas', el 'Símbolo de sistema' ('Command Prompt', en inglés), Azure Cloud Shell, las múltiples distribuciones que tengamos instaladas en el Subsistema Linux (WSL)….

Screenshot
"Si miran ustedes sus pantallas podrán ver un theme para Oh-My-Zsh sobre shell Zsh sobre terminal Alacritty sobre sistema operativo Linux".

Windows Terminal no es el único emulador de terminal de Windows, pues existen MobaXterm, Cmder, ConEmu y otros… sin embargo, si saltamos a los sistemas basados en Unix (Linux, *BSD, macOS), el catálogo de terminales disponibles se multiplica hasta el infinito: no sólo cada entorno de escritorio suele ofrecer la suya propia (Gnome Terminal en GNOME, Konsole en KDE, iTerm en macOS…), sino que es posible instalar alternativas de terceros para todos los gustos (Terminator, Alacritty, Guake, st…).

Cada emulador de terminal se diferencia por ofrecer sus propias interfaces gráficas, funcionalidades y opciones de configuración (atajos de teclado —configurables o no—, personalización de tipografías y fondos, gestión del portapapeles, etc.).

Consola [Virtual]

Veamos… 'consola' es un término que se suele usar de forma poco consistente (más incluso que el resto de términos de este listado), y es posible encontrar múltiples definiciones del mismo en Internet. De hecho, las discrepancias empiezan incluso en el origen de la palabra: para algunos, la antigua consola física es exactamente lo mismo que una terminal física, otros introducen ciertos matices, considerando la primera como un subgrupo de la segunda.

Ciertos aspectos, como la configuración de colores o la gestión del historial de comandos, puede configurarse tanto desde la shell como desde el emulador de terminal

Pero, ¿y cuándo pasamos a hablar de software (es decir, de una 'consola virtual')? Muchas fuentes la consideran, también, sinónimo de '[emulador de] terminal', sin embargo, lo más correcto sería referirse a ella como una sesión de la shell. Es decir, cuando abrimos un emulador de terminal y nos ponemos directamente a teclear comandos, estamos -efectivamente— usando una terminal y una consola…

…pero en el mismo momento en que abrimos dos pestañas en el emulador de terminal, sean o no de la misma shell, ya estamos usando dos consolas. Y si, además, hemos subdividido una pestaña recurriendo a herramientas como un multiplexador (por ejemplo, Tmux), o funciones como 'dividir tabla' de Windows Terminal, el número de consolas seguirá multiplicándose, aunque sólo estemos usando un único terminal.

Windows Terminal
Una terminal, con cinco shells abiertas (una por pestaña) y con cuatro consolas visibles de una misma shell.

Además, cuando usamos un sistema Linux, siempre tenemos abiertas (aunque no visibles) varias consolas, las llamadas 'TTY' (de 'TeleTYpewriter), a las que podemos acceder con el atajo de teclado Ctrl + Alt + tecla de función (una por tecla). Parte de ellas serán consolas gráficas, pero las otras serán consolas de texto, cada una funcionando en paralelo con las otras, y todas ellas funcionando al margen de nuestro entorno gráfico, por lo que no las estaríamos usando desde emuladores de terminal.

'Shell' significa 'cáscara', 'concha' o 'caparazón', pues es la encargada de proteger al kernel del sistema de la interacción directa con el usuario

Shell

Ya hemos mencionado, al hablar de terminales, varios ejemplos de distintas shells que podemos encontrar en Windows. Pero, al igual que ocurre con las terminales, el número de shells en sistemas Unix se multiplica y, aunque suelen traer instalada Bash como la shell por defecto, es posible cambiarla por otras diferentes, como la muy popular Zsh (macOS la terminó adoptando con shell predefinida), la emergente Fish, las vetustas Ksh y Tcsh, u opciones minoritarias como Xonsh.

La función de la shell es interpretar los comandos que introducimos. Y, aunque pensemos que no puede haber mucha diferencia es cómo se interpretan algunos comandos, lo cierto es que la diferente sintaxis de los scripts, o aspectos como la posibilidad de crear alias y de definir variables, la existencia de un resaltado de sintaxis o de funciones de autocompletado, o el modo en que se muestra la salida del sistema en pantalla pueden lograr variar notablemente la experiencia del usuario según qué shell usemos.

Intérprete (o línea) de comandos

Toda shell es un intérprete de comandos, pero no todo intérprete de comandos es una shell. Un intérprete de comandos (también llamado CLI), es cualquier software que interactúa con nosotros a través de la introducción de órdenes de texto. Algunos CLI se ejecutan sobre una shell y no buscan ser un modo de controlar el sistema operativo, sino sólo un software o servicio online muy concreto. Ejemplos de esto pueden ser NPM, IPython, GitHub CLI, AWS CLI o nuestro cliente SSH favorito.

Temas
Inicio
Inicio