A menudo se usan indistintamente los términos terminal, shell, TTY y consola, pero cada uno designa una capa distinta en el ecosistema de la línea de comandos. Originalmente, en los años 60, todos se referían al mismo dispositivo físico: una máquina con teclado e impresora conectada al ordenador. Con la evolución hacia el software, los significados se separaron.
La consola es el dispositivo físico de entrada/salida conectado directamente al sistema, el último recurso cuando el resto falla. El terminal es la interfaz que el usuario ve: un emulador que maneja la representación de texto, colores y secuencias de escape ANSI, pero no entiende los comandos. La shell, en cambio, es el intérprete de comandos que procesa lo que el usuario escribe y ejecuta los programas correspondientes. El TTY es un archivo de dispositivo en el núcleo del sistema Unix que actúa como intermediario entre el terminal y la shell. Los pseudo terminales (PTY) permiten que programas de usuario emulen terminales reales.
Comprender esta pila de capas es esencial para depurar problemas de entrada/salida, construir aplicaciones TUI (Interfaz de Usuario de Texto) o simplemente entender cómo herramientas como vim toman el control de la pantalla. Cada capa tiene responsabilidades claras: el terminal renderiza, la shell interpreta, el TTY gestiona el flujo de datos en el kernel. La separación entre terminal y shell permite intercambiar uno sin afectar al otro.
En la práctica, eliges un terminal emulador (iTerm2, Alacritty, Windows Terminal) y una shell (bash, zsh, PowerShell) independientemente. Los modos raw y canonical determinan cómo el TTY procesa la entrada; el modo raw, usado por editores como vim, envía cada pulsación directamente al programa sin esperar al salto de línea. Las secuencias ANSI permiten controlar colores, posiciones y estilos en el terminal, base de las interfaces TUI modernas.
