Módulo 1: La terminal y el sistema de archivos

3. Tu terminal en macOS, Linux y Windows (WSL)

Descripción

Al terminar esta lección vas a poder abrir la terminal correcta en el sistema operativo que tengas enfrente —macOS, Linux o Windows— y, si usas Windows, vas a tener WSL2 con Ubuntu instalado y funcionando, con un comando que te confirma qué shell está corriendo debajo de esa ventana. No es un detalle cosmético: es la diferencia entre seguir el resto de esta guía sin fricción o pelear contra una terminal que no habla el mismo idioma que los ejemplos.

Esto importa fuera del salón de clases. La inmensa mayoría de los servidores del mundo —donde termina viviendo el código que escribes una vez que pasa de tu máquina a producción— corre Linux. Si tu computadora de trabajo es Windows y tu única terminal es PowerShell o el Símbolo del sistema, cada comando ls, grep o chmod que aprendas en este curso no te va a servir en tu propia máquina: vas a terminar traduciendo mentalmente entre dos mundos distintos, o copiando comandos que fallan sin que entiendas por qué. Resolver esto ahora, antes de escribir tu primer comando real, te ahorra semanas de esa fricción silenciosa.

Conexión con el módulo: la lección anterior te dio el vocabulario —terminal, shell, prompt, consola— y te mostró que bash y zsh son shells distintas con historias distintas. Esta lección baja ese vocabulario a tu máquina concreta: qué ventana abres, y en el caso de Windows, qué pieza adicional necesitas instalar para que esa ventana hable el mismo idioma que el resto de la guía.

Una terminal, tres puertas distintas al mismo lenguaje

Piensa en tres edificios de oficinas que por dentro tienen exactamente la misma distribución —los mismos pasillos, las mismas salas de reunión— pero cada uno tiene la entrada en un lugar distinto de la fachada. En uno la puerta está a la izquierda, en otro al centro, en el tercero hay que tocar un timbre antes de que se abra. Una vez adentro, no importa por cuál puerta entraste: el edificio es el mismo.

Con la terminal pasa algo parecido. bash y zsh —las shells que ya conoces de la lección anterior— se comportan igual sin importar qué aplicación uses para abrirlas. Lo que cambia de un sistema operativo a otro es la puerta: la aplicación que tienes que abrir para llegar a esa shell.

En macOS, la puerta ya está instalada de fábrica: se llama Terminal.app y vive en Aplicaciones → Utilidades. La forma más rápida de abrirla es Cmd+Espacio para invocar Spotlight, escribir "Terminal" y presionar Enter. Desde macOS Catalina (2019), la shell que arranca por defecto es zsh, tal como viste en la lección anterior. Terminal.app alcanza para todo lo que necesitas en esta guía, pero no es la única puerta: iTerm2 es una alternativa gratuita y muy usada que agrega paneles divididos, búsqueda dentro del historial y perfiles configurables; Warp es una opción más reciente que agrega autocompletado inteligente y bloques de comandos reutilizables. Ninguna es obligatoria — instálalas más adelante si sientes que Terminal.app se te queda corta, no antes.

En Linux, la puerta depende del entorno de escritorio que tengas instalado, porque Linux no tiene una única terminal "oficial": GNOME (el escritorio por defecto de Ubuntu y Fedora Workstation) trae GNOME Terminal; KDE Plasma (el escritorio de Kubuntu) trae Konsole. En cualquiera de los dos, buscar "terminal" en el buscador de aplicaciones la encuentra, y en Ubuntu con GNOME el atajo Ctrl+Alt+T la abre directamente. Si en cambio te conectas a un servidor Linux sin interfaz gráfica —algo que vas a hacer en el módulo 5 de esta guía—, no hay ninguna puerta que buscar: ya estás dentro de una terminal desde el momento en que te conectas.

En Windows es donde la analogía se rompe, y por una razón real: Windows no corre Linux por debajo, así que no existe una "puerta" nativa hacia bash o zsh. PowerShell y el Símbolo del sistema (cmd.exe) son shells legítimas, pero hablan un idioma distinto —sintaxis distinta, filosofía distinta, comandos distintos— del que vas a aprender en esta guía y del que vas a encontrar en cualquier servidor Linux. La solución que recomienda esta guía es WSL2 (Windows Subsystem for Linux, versión 2): una pieza de Windows que corre un kernel Linux real dentro de una máquina virtual ligera e integrada al sistema. Con WSL2 instalado, abres una terminal que corre Ubuntu de verdad, con bash de verdad, con los mismos comandos que vas a usar el resto de esta guía.

Ejemplo trabajado

Si no usas Windows, puedes leer este ejemplo igual: te sirve para entender qué les espera a tus compañeros que sí lo usan, y vas a necesitarlo el día que te toque instalarlo en una máquina nueva.

Paso 1. Abre PowerShell como administrador: busca "PowerShell" en el menú Inicio, clic derecho sobre el resultado y elige "Ejecutar como administrador".

Paso 2. Ejecuta un único comando:

wsl --install

Este comando hace tres cosas por ti: activa las funciones de Windows que WSL necesita, descarga e instala el kernel de Linux, y descarga Ubuntu como distribución por defecto. No necesitas elegir nada más.

Qué esperar: una barra de progreso descargando componentes, y al final un mensaje pidiéndote que reinicies la computadora.

Paso 3. Reinicia. Al volver a encender la máquina, Ubuntu se abre automáticamente (o búscalo escribiendo "Ubuntu" en el menú Inicio) y te pide crear un usuario y una contraseña de Linux — son independientes de tu cuenta de Windows, y la contraseña no se muestra en pantalla mientras la escribes (eso es normal, no un error).

Paso 4. Verifica que quedó instalada la versión 2, no la versión 1 (WSL1 existe, pero es un modo de compatibilidad más limitado que no te interesa para esta guía). Desde PowerShell:

wsl -l -v

Qué esperar:

  NAME      STATE           VERSION
* Ubuntu    Running         2

El asterisco marca la distribución por defecto, y la columna VERSION en 2 confirma que estás corriendo WSL2 y no la versión 1. De acá en adelante, cada vez que necesites una terminal Linux en Windows, abres Ubuntu directamente o, mejor, instalas Windows Terminal (viene preinstalada en Windows 11 y se instala gratis desde la Microsoft Store en Windows 10) y eliges la pestaña Ubuntu desde su menú desplegable.

Por qué esta guía recomienda WSL2 y no PowerShell, CMD o Git Bash

Vale la pena decir esto con honestidad, con lo que ganas y lo que pierdes, en vez de simplemente indicarte qué instalar.

Lo que ganas con WSL2: un kernel Linux real, no una imitación. Herramientas como grep, find o chmod se comportan exactamente igual que en un servidor Linux en producción, porque es el mismo software, no una reescritura. Esto importa porque el objetivo de esta guía no es que memorices comandos de un sistema operativo específico: es que sepas moverte en cualquier máquina Linux, que es donde vas a terminar trabajando la mayor parte del tiempo como desarrollador. Git Bash —una alternativa popular en Windows— te da una sensación parecida porque incluye versiones de comandos Unix, pero corre sobre una capa de emulación (MinGW) que traduce esos comandos al mundo de Windows por debajo; la mayoría de las veces funciona, pero aparecen diferencias sutiles justo en los casos donde más te conviene que no aparezcan (permisos de archivo, rutas, procesos en segundo plano). PowerShell, por su parte, no es una imitación de nada — es una shell moderna y poderosa por derecho propio, pero trabaja con objetos de .NET en lugar de texto plano, una filosofía distinta a la que vas a estudiar en el módulo 3 de esta guía. Aprenderla vale la pena si trabajas en un entorno Windows puro, pero no es lo que esta guía enseña.

Lo que pierdes con WSL2: integración perfecta con el resto de Windows. Los archivos de tu WSL viven en un sistema de archivos Linux separado del de Windows; para llegar a tus archivos de Windows desde dentro de WSL, cruzas por /mnt/c/, y no todas las aplicaciones gráficas de Windows abren directamente archivos que viven del lado de Linux. Es un costo real, no una advertencia vacía — pero es un costo pequeño comparado con tener un entorno de desarrollo que coincide con el de casi cualquier servidor al que te vayas a conectar.

Verificar qué shell tienes corriendo: echo $SHELL

Sin importar el sistema operativo, un mismo comando te dice qué shell tienes asignada como shell de inicio de sesión:

echo $SHELL

Qué esperar en cada sistema:

# macOS (desde Catalina en adelante)
/bin/zsh

# Linux (la mayoría de distribuciones), y Ubuntu dentro de WSL2
/bin/bash

Un detalle preciso que conviene tener claro: $SHELL no siempre refleja la shell que estás usando en este preciso momento, sino la que el sistema te asignó como shell de inicio de sesión. Si alguna vez, dentro de una sesión de bash, escribes zsh para lanzar zsh manualmente, $SHELL va a seguir mostrando /bin/bash hasta que cierres esa sesión, porque la variable se fija al iniciar sesión, no en cada comando que ejecutas. Para saber qué proceso te interpreta los comandos ahora mismo, en cualquier sistema, existe ps -p $$ — pero eso es más detalle del que necesitas hoy; con echo $SHELL te alcanza para confirmar que tu terminal está corriendo la shell correcta.

Cómo se van a marcar las diferencias por sistema operativo en el resto de la guía

A partir de aquí, casi todos los comandos de esta guía funcionan sin cambios en los tres casos: la terminal de macOS, la terminal de Linux y la terminal de Ubuntu dentro de WSL2 en Windows, porque las tres corren bash o zsh de verdad. Cuando un comando puntual sí cambie entre sistemas —algo poco frecuente, pero que va a pasar alguna vez, sobre todo en el módulo 4 con permisos y procesos—, lo vas a ver marcado explícitamente así:

macOS/Linux: comando-a Windows (WSL): comando-b

Si no ves esa marca en un ejemplo, es porque el comando es idéntico en los tres casos y no hace falta distinguir nada.

Errores comunes

Pensar que WSL2 es una máquina virtual pesada, como instalar VirtualBox con un Ubuntu de escritorio completo. Qué pasa: alguien evita instalar WSL2 esperando un proceso largo, con varios gigabytes de descarga y una ventana de escritorio Linux completa arrancando por separado, como si fuera VirtualBox o VMware. Por qué pasa: WSL2 usa una arquitectura de virtualización distinta, integrada al kernel de Windows, sin interfaz de escritorio propia — es una terminal, no un sistema operativo completo con su propio escritorio gráfico. Cómo detectarlo: si después de wsl --install y el reinicio esperas ver aparecer una ventana de escritorio de Ubuntu y no una terminal, hay una confusión de expectativas, no un error de instalación. Cómo corregirlo: lo que abre es una ventana de terminal con un prompt de Linux, exactamente como si te hubieras conectado por SSH a un servidor Ubuntu real — eso es todo lo que necesitas de WSL2 para esta guía.

Seguir usando Git Bash o el Símbolo del sistema para el resto de la guía "porque ya estaba instalado". Qué pasa: algunos comandos de esta guía parecen funcionar en Git Bash, pero producen resultados sutilmente distintos a los que describe el texto — permisos de archivo que se ven raros, o un cambio de permisos que no se aplica de verdad. Por qué pasa: Git Bash traduce esos comandos al mundo de Windows por debajo, y esa traducción no es perfecta justo en los casos que dependen de conceptos propios de Linux. Cómo detectarlo: la salida de un comando no coincide con la que muestra esta guía en "Qué esperar", aunque el comando no haya marcado ningún error. Cómo corregirlo: cambia a la terminal de Ubuntu dentro de WSL2 antes de seguir; no hace falta desinstalar Git Bash, solo dejar de usarla para seguir esta guía.

Después de instalar WSL2, seguir abriendo el Símbolo del sistema (cmd.exe) por costumbre, en vez de la terminal de Ubuntu. Qué pasa: instalaste WSL2 correctamente, pero sigues escribiendo comandos de bash en una ventana de cmd.exe, que no los entiende. Cómo detectarlo: el prompt se ve como C:\Users\tu-nombre> en vez de algo como tu-usuario@tu-equipo:~$. Cómo corregirlo: abre Windows Terminal y elige la pestaña o el perfil "Ubuntu" en su menú desplegable, o simplemente escribe wsl dentro de cualquier ventana de Windows para entrar directamente a tu Ubuntu instalado.

Ejercicios

Ejercicio 1

Abre la terminal correspondiente a tu sistema operativo sin buscar los pasos en internet (usa lo que aprendiste en esta lección) y ejecuta echo $SHELL. Anota el resultado exacto.

Ver solución

No hay un único resultado correcto — depende de tu sistema:

  • macOS (Catalina en adelante): /bin/zsh
  • Linux (la mayoría de distribuciones) o Ubuntu dentro de WSL2: /bin/bash

Por qué funciona: $SHELL es una variable de entorno que el sistema fija con la ruta de tu shell de inicio de sesión; en macOS ese valor cambió a zsh en 2019, y en Linux —incluyendo Ubuntu dentro de WSL— casi siempre sigue siendo bash por defecto.

Ejercicio 2

Explica con tus propias palabras, sin copiar el texto de la lección, por qué esta guía prefiere WSL2 antes que PowerShell o Git Bash para seguir sus pasos en Windows. Menciona al menos una ventaja y una desventaja real.

Ver solución

Una respuesta completa menciona: WSL2 corre un kernel Linux real, así que los comandos se comportan exactamente igual que en un servidor Linux de producción, a diferencia de Git Bash, que emula esos comandos sobre Windows y puede diferir en casos puntuales (permisos, rutas, procesos). La desventaja real es que WSL2 vive en un sistema de archivos separado del de Windows, así que cruzar entre ambos mundos —por ejemplo, para abrir un archivo de WSL con una aplicación gráfica de Windows— requiere pasos adicionales, como acceder a /mnt/c/.

Por qué funciona: la decisión no es "WSL2 es perfecto", es "el costo de WSL2 es menor que el costo de aprender comandos que después no coinciden con los de un servidor Linux real".

Ejercicio 3

Si usas Windows: instala WSL2 siguiendo los pasos de esta lección y confirma con wsl -l -v que la columna VERSION muestra 2. Si no usas Windows: pídele a alguien que sí use Windows que ejecute ese comando y compara su salida con la que muestra esta lección.

Ver solución

La salida esperada tiene esta forma, con el asterisco marcando la distribución por defecto:

  NAME      STATE           VERSION
* Ubuntu    Running         2

Si la columna VERSION muestra 1 en vez de 2, la distribución quedó instalada en el modo de compatibilidad más antiguo; se puede migrar con wsl --set-version Ubuntu 2 desde PowerShell.

Por qué funciona: wsl -l -v (list, verbose) es el comando que la propia documentación de Microsoft recomienda para confirmar qué versión de WSL está corriendo cada distribución instalada, sin necesidad de adivinar por el comportamiento.

Ejercicio 4

Antes de seguir con el resto de esta guía: escribe el nombre exacto de la terminal que vas a usar de acá en adelante en tu propia máquina (por ejemplo, "Terminal.app en macOS", "GNOME Terminal en Ubuntu Desktop" o "Ubuntu dentro de Windows Terminal, vía WSL2").

Ver solución

No hay una única respuesta correcta — el criterio de corrección es otro: la terminal que anotaste tiene que correr bash o zsh de verdad. Si usas Windows y anotaste "PowerShell" o "Símbolo del sistema", vuelve a la sección de instalación de WSL2 antes de continuar: esta guía asume, desde la próxima lección, que tienes una shell Unix real disponible.

Por qué funciona: decidir esto por escrito, antes de seguir, evita el error más común de esta lección — seguir usando por costumbre una terminal que no habla el mismo idioma que el resto del curso.

Resumen y siguiente paso

Ya tienes una terminal abierta que corre una shell Unix real, sin importar si tu sistema es macOS, Linux o Windows con WSL2, y sabes confirmar cuál con un solo comando. Ese es el prerequisito silencioso del que hablaba la primera lección de este módulo: sin esto resuelto, cada comando nuevo que aprendas se convierte en una fuente de dudas sobre si el problema es el comando o tu entorno.

Antes de avanzar deberías poder abrir tu terminal sin pensarlo —sin buscar los pasos de nuevo— y decir de memoria qué shell tienes corriendo debajo.

Lo que sigue es la gramática de todo lo que vas a escribir en esa terminal de acá en adelante: la estructura universal que comparten absolutamente todos los comandos, sin importar cuál. Esa estructura es la próxima lección.

Recursos