Intro
Se suelen usar los términos terminal y shell de manera intercambiable. Pero es importante saber la diferencia.
Antes la expresión "terminal" se utilizaba para referirse a un dispositivo físico que permitía escribir comandos a través de un teclado y ver los resultados en pantalla. Algo así como esto:

Hoy por hoy la expresión "terminal" se refiere en realidad a un emulador de terminal, es decir, una emulación en software de aquellos dispositivos de antaño.
Emuladores de terminal hay muchos, pero lo que determina cuáles comandos son válidos y cuáles no es lo que se conoce como **shell**.
La terminal o emulador de terminal permite recibir comandos e imprimir los resultados de dichos comandos en la pantalla de tu PC, pero la shell es quien se encarga de ejecutarlos.
En resumidas cuentas, la shell se encarga de:
- Leer los comandos que ingresas via teclado
- Evaluar (ejecutar) dichos comandos
- Imprimir los resultados de esos comandos
- Permitirte ingresar otro comando a continuación para repetir el proceso
De hecho estos 4 pasos son lo que componen algo llamado REPL (Read, Evaluate, Print, Loop). Pero eso es cuento para otro día 😉