Añadiendo a la excelente respuesta de Steve Chambers :
Históricamente, el término Terminal se utiliza para referirse a un dispositivo de comunicación que permite al usuario interactuar con un ordenador centralizado. Un terminal proporcionaba un dispositivo de entrada/salida en forma de teclado y pantalla.
Los días de los mainframes con acceso remoto ya no existen, y, con casi todo el mundo teniendo acceso a un ordenador propio totalmente capaz con CPU y memoria dedicadas, el uso del término Terminal es ahora un término erróneo, y por lo tanto, es más apropiado utilizar el término Emulador de terminal ya que el Terminal.app está emulando un dispositivo de terminal y el mismo sistema operativo MacOS que está ejecutando el Terminal.app también está ejecutando el programa de shell con el que el usuario realmente interactúa.
Así, en la época actual en la que ya no utilizamos real terminales, el término terminal se refiere en forma abreviada a un Emulador de Terminal.
MacOS viene con un emulador de terminal integrado llamado Terminal.app Sin embargo, existen alternativas de terceros con un conjunto de funciones más amplio. Uno de esos programas emuladores de terminal de terceros muy populares es iTerm2 .
Interfaz de línea de comandos o CLI para abreviar, es un término general para referirse a una interfaz de usuario de ordenador en la que el modo principal de interacción es a través de la escritura de comandos que se adhieren a una sintaxis específica. Se trata de un término que contrasta con la interfaz gráfica de usuario o GUI, que es la que predomina en los dispositivos informáticos actuales.
Mientras que MacOS viene preinstalado con una variedad de herramientas de línea de comandos UNIX, Apple's Command Line Tools o CLT es el término utilizado para referirse a un paquete instalable específico puesto a disposición por Apple para los desarrolladores de software. CLT, además de las herramientas UNIX preinstaladas en MacOS, instala el SDK de MacOS, cabeceras y herramientas de compilación como el compilador LLVM de Apple y Make. Permite a los desarrolladores construir e instalar software de código abierto. Para más detalles, consulte este enlace: https://developer.apple.com/xcode/features/
Cabe destacar que el término Herramienta de línea de comandos puede interpretarse de dos maneras. Herramientas de línea de comandos es un paquete de software puesto a disposición por Apple que contiene un conjunto específico de elementos. Herramienta(s) de línea de comandos en general podría utilizarse para referirse a cualquier herramienta/aplicación con la que se interactúa a través de una interfaz de línea de comandos (Homebrew es la última de las dos). Y cualquier aplicación de línea de comandos puede ser en general referida como una herramienta de línea de comandos. (Al igual que Apple utiliza el término App Store para referirse a su mercado de aplicaciones para iOS, aunque el mismo término también podría utilizarse de forma genérica).
Prompt o Símbolo del sistema es otro término comúnmente utilizado para referirse a la interfaz de la línea de comandos. Un prompt se utiliza generalmente para indicar el lugar en el que los usuarios pueden introducir la línea de comandos (es decir, la secuencia de caracteres que describen el comando completo). Un prompt de comando puede utilizar un carácter especial para dar alguna idea sobre el shell en uso o el usuario conectado. Por ejemplo, el shell BASH utiliza $
para el carácter prompt, mientras que ZSH utiliza %
para el carácter de la indicación. El prompt para el usuario Root es casi siempre #
. Un aviso suele ir seguido de un cursor parpadeante para indicar el lugar de entrada del texto.
Esta es una representación de un símbolo del sistema que ejecuta el shell BASH en Terminal.app en MacOS para un usuario no root. La parte subrayada en verde indica el prompt en el shell al que accede el usuario usando la app Terminal:
Para responder a sus preguntas concretas:
Lo que me despistó fue darme cuenta de que Apple no entrega MacOS con CLT (Command Line Tools) y tengo que descargarlo.
MacOS no viene con el CLT de Apple porque la mayoría de los usuarios de Mac (incluso la mayoría de los desarrolladores de software) nunca lo necesitarían. Y una vez que se necesitan las herramientas de línea de comandos de Apple, Apple ha hecho que sea muy fácil instalarlas.
¿No significa eso que el Terminal es inútil a menos que descargue CLT?
Terminal es muy útil y utilizable para una variedad de tareas, incluso para muchos desarrolladores de software, incluso sin las herramientas de línea de comandos de Apple instaladas. La mayoría de los desarrolladores de software nunca instalar las herramientas de línea de comandos y, sin embargo, pueden acceder a cualquiera de los shells incorporados, ejecutar comandos internos del shell, ejecutar scripts, ejecutar uno de los numerosos comandos externos preinstalados, etc. Sólo para los desarrolladores que necesiten acceder a herramientas específicas proporcionadas por CLT, tendrían que obtenerlas instalándolo.
¿Es un compilador? Y si está construido en MacOS, ¿por qué necesito descargar el CLT de Xcode?
No, CLT no es un compilador, o mejor dicho, contiene un compilador (Apple LLVM) como una de las aplicaciones de su paquete de herramientas. Las herramientas de línea de comandos han sido descritas acertadamente por Apple aquí :
Por qué necesito una aplicación como Terminal para acceder al CLI. Para empezar, ¿no es la CLI una interfaz?
La instalación de las herramientas de línea de comandos de Apple instala un paquete que contiene archivos de cabecera, SDK y varias aplicaciones de línea de comandos en MacOS. Terminal.app es entonces usado como interfaz para acceder a las propias herramientas.
¿Considera Homebrew (que es un gestor de paquetes) un CLT que tiene su propio CLI con el que interactúo usando Terminal?
Homebrew es un gestor de paquetes de terceros, desarrollado por la comunidad y de código abierto, que facilita la instalación de aplicaciones/utilidades de línea de comandos que Apple no suministra. Elimina la molestia de compilar/instalar/configurar/gestionar/desinstalar una variedad de utilidades de línea de comandos de código abierto, que podría ser una molestia para la mayoría de los usuarios (incluidos los desarrolladores de software).
El propio Homebrew se pone a disposición de los usuarios como un comando externo que les permite gestionar otras utilidades de línea de comandos. Es una aplicación/utilidad que es diferente de las herramientas de línea de comandos proporcionadas por Apple.
(Para aclarar cualquier confusión, al referirnos a la Herramientas de línea de comandos En el caso de las herramientas de línea de comandos de Apple, se da a entender que se trata de un paquete específico que contiene múltiples herramientas puestas a disposición por Apple, aunque el término en sí mismo suena bastante genérico (al igual que otros términos que utiliza Apple, como App Store). Las herramientas de línea de comandos de Apple no deben confundirse con las herramientas de línea de comandos cuando se hace referencia a ellas en general)