- Instala y gestiona WSL 2, distros y kernel para un entorno Linux real en Windows.
- Trabaja con VS Code/Visual Studio, Docker, bases de datos y GPU dentro de WSL.
- Combina comandos Windows-Linux y optimiza el almacenamiento para máximo rendimiento.
- Domina scripting Bash: variables, bucles, cron y depuración con set -x y set -e.
Si trabajas en Windows pero necesitas la potencia de Linux, WSL te permite tener lo mejor de ambos mundos: una distribución completa de Linux integrada con tu sistema, sin máquinas virtuales pesadas ni arranques dobles. Aquí vas a aprender a preparar WSL, comprender sus comandos clave y, sobre todo, a crear y ejecutar scripts de Bash sin complicarte la vida.
Este texto une en una sola guía todo lo importante: instalación paso a paso (método rápido y manual), administración de distribuciones, almacenamiento de archivos, uso con Windows Terminal, VS Code y Visual Studio, contenedores y bases de datos, aceleración por GPU, interoperabilidad Windows-Linux, y un bloque práctico de scripting Bash (variables, entradas/salidas, condicionales, bucles, cron y depuración). Al final tendrás un entorno listo y las bases para automatizar cualquier tarea.
Qué es WSL y por qué usar Bash en Windows
WSL (Windows Subsystem for Linux) permite instalar distribuciones Linux como aplicaciones de Windows, con el kernel y herramientas de usuario listas para ejecutar comandos, compilar código y automatizar procesos. Esto ofrece interoperabilidad real: ejecutar binarios de Windows desde Linux y viceversa, compartir sistema de archivos y combinar comandos en ambas direcciones.
Su objetivo principal es facilitar la vida a administradores y desarrolladores que necesitan tooling Linux en Windows sin montar infraestructuras complejas. También viene genial a principiantes que quieran probar Linux sin arriesgar su instalación: si algo se rompe en la distro, la reinstalas y listo, sin tocar Windows.
Además, con WSL se evita uno de los dolores típicos del escritorio Linux: el soporte de hardware. Aquí la compatibilidad está garantizada y, por si fuera poco, puedes acceder a unidades ext4 desde Windows a través de WSL, algo impensable de forma nativa sin herramientas externas.
Versiones, requisitos y diferencias clave (WSL 1 vs WSL 2)
WSL 2 es la versión recomendada: utiliza una máquina virtual ligera con un kernel Linux real gestionado por Hyper‑V, mejorando compatibilidad de llamadas al sistema y rendimiento (E/S más rápida, hasta varios cientos por cien en ciertas cargas). Windows 11 ya incluye WSL 2 por defecto, y en Windows 10 se habilita si cumples versión 1903 (compilación 18362) o posterior en x64, y 2004 (19041) en ARM64.
Para verificar si tu equipo es x64 o ARM64 y revisar la build, puedes usar Win+R -> winver y, en PowerShell, consultar el tipo de sistema con: systeminfo | find "Tipo de sistema"
. Si tu build no llega al mínimo, actualiza Windows antes de dar el salto a WSL 2.
Aun con sus ventajas, hay límites: la red y ciertos periféricos pueden rendir peor por las capas de virtualización; WSL 1 no soporta funcionalidades a nivel de kernel (Docker clásico no funciona ahí), y algunas distros en Store no traen systemd por defecto, lo que complica lanzar servicios tradicionales como en un servidor puro.
Instalación de WSL: método simplificado y método manual
Si estás en una build reciente, el camino corto es un solo comando. Abre PowerShell o CMD como administrador y ejecuta:
wsl --install
Este comando habilita los componentes WSL y Plataforma de Máquina Virtual, descarga e instala el kernel más reciente, establece WSL 2 como predeterminado e instala Ubuntu (reinicio probable). Puedes listar distros disponibles con wsl --list --online
y elegir otra con: wsl --install <Distribution Name>
.
Si tu sistema no permite el método simplificado, haz la instalación manual desde PowerShell con privilegios de administrador:
- Habilitar WSL 1:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- Activar Plataforma de máquina virtual:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- Reinicia y luego instala el paquete de kernel de WSL 2 (x64): https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
- En ARM64, usa: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi
- Define WSL 2 por defecto:
wsl --set-default-version 2
- Instala una distribución Linux desde Microsoft Store (Ubuntu, Debian, openSUSE, Fedora, etc.).
La primera vez que abras la distro desde el menú Inicio, crea un usuario y contraseña Linux. Después, actualiza los paquetes con: sudo apt update && sudo apt upgrade
.
Gestión de distros y comandos WSL imprescindibles
Los comandos de WSL se ejecutan desde PowerShell/CMD con wsl (en Bash también puedes usar wsl.exe). Para consultar todo: wsl --help
. Estos son los más útiles para el día a día:
- Instalar WSL o una distro concreta:
wsl --install
owsl --install <Distribution Name>
(opciones:--distribution
,--no-launch
,--web-download
). - Listar distros disponibles:
wsl --list --online
(equivale awsl -l -o
). - Listar distros instaladas:
wsl --list --verbose
(owsl -l -v
), con estado y versión de WSL (1/2). Flags:--all
,--running
,--quiet
. - Fijar versión por distro:
wsl --set-version <Distribution Name> <1|2>
. - Definir WSL 1/2 por defecto:
wsl --set-default-version <1|2>
. - Elegir distro predeterminada:
wsl --set-default <Distribution Name>
. - Iniciar en el home:
wsl ~
(y en Linux:cd ~
). - Ejecutar una distro/usuario concreto:
wsl --distribution <Distribution Name> --user <User Name>
. - Actualizar WSL:
wsl --update
(opción--web-download
). - Estado/versionado:
wsl --status
ywsl --version
. - Ejecutar como usuario:
wsl --user <Username>
. Cambiar usuario por defecto de una distro:<DistributionName> config --default-user <Username>
. - Apagar/terminar:
wsl --shutdown
ywsl --terminate <Distribution Name>
. - Direcciones IP:
wsl hostname -I
(IP de la VM WSL 2). IP de Windows vista desde WSL 2:ip route show | grep -i default | awk '{ print $3}'
. - Exportar/importar:
wsl --export <Distribution Name> <FileName>
(tar o--vhd
),wsl --import <Name> <InstallLocation> <FileName>
(--vhd
,--version
),wsl --import-in-place <Name> <FileName.vhdx>
. - Desinstalar (unregister):
wsl --unregister <DistributionName>
(borra datos de esa distro definitivamente). - Montar/desmontar discos:
wsl --mount <DiskPath>
(--vhd
,--name
,--bare
,--type
,--partition
,--options
), ywsl --unmount <DiskPath>
. - Comandos antiguos:
wslconfig.exe
,bash
,lxrun
están obsoletos.
Almacenamiento de archivos y rendimiento
La regla de oro es guardar los proyectos donde vayas a trabajar: si usarás herramientas Linux en la terminal de la distro, coloca los archivos en el sistema de archivos de WSL (ext4). Si vas a trabajar desde PowerShell o apps Windows, mantenlos en NTFS.
Puedes abrir el directorio actual de WSL en el Explorador con explorer.exe . (incluye el punto). Las rutas típicas para proyectos en WSL son \\wsl$\<DistroName>\home\<UserName>\Proyecto
; evita rutas como C:\Users\<UserName>\Project
o /mnt/c/Users/<UserName>/Project
cuando compiles desde Linux para no penalizar el rendimiento.
Terminal y editores: Windows Terminal, VS Code y Visual Studio
Windows Terminal ofrece pestañas, paneles, soporte Unicode/UTF‑8 y aceleración GPU para renderizar texto. Cada distro instalada crea un perfil que puedes personalizar a tu gusto (temas, colores y atajos incluidos).
Para editar y depurar, lo más cómodo es Visual Studio Code con Remote – WSL. Instálalo en Windows, abre la distro y ejecuta code .
para lanzar el servidor remoto. Podrás usar todo el ecosistema de extensiones de VS Code como si estuvieras en Linux nativo.
Si trabajas en C++, Visual Studio 2022 integra WSL para compilar y depurar proyectos CMake en Windows, WSL y SSH desde la misma instancia, eligiendo el sistema de destino con un clic.
Contenedores, bases de datos y aceleración por GPU
Con WSL 2 puedes usar Docker Desktop y los Contenedores de Desarrollo para aislar dependencias y tener entornos reproducibles. Es ideal para flujos en equipo y para mantener el sistema limpio.
Levantar bases de datos dentro de WSL es directo: MySQL, PostgreSQL, MongoDB, Redis, Microsoft SQL Server o SQLite funcionan con normalidad. Instálalas con el gestor de paquetes de tu distro o con contenedores Docker si lo prefieres.
Para cargas intensivas (por ejemplo, entrenamiento de ML), configura la aceleración de GPU en WSL y aprovecha la tarjeta gráfica desde tu entorno Linux en Windows.
Interoperabilidad: comandos mixtos Windows-Linux
Desde PowerShell, ejecuta herramientas Linux anteponiendo wsl. Por ejemplo, listar un directorio con ls -la
nativo de Linux desde C:\temp:
wsl ls -la
También puedes combinar tuberías de ambos mundos: wsl ls -la | findstr "git"
o, al revés, dir | wsl grep git
. Y desde WSL, lanzar binarios de Windows como notepad.exe .bashrc
.
Un ejemplo útil de mezcla: en Bash, filtra la salida de ipconfig de Windows con herramientas GNU: ipconfig.exe | grep IPv4 | cut -d: -f2
. Desde PowerShell sería: ipconfig.exe | wsl grep IPv4 | wsl cut -d: -f2
.
Montaje de discos y aplicaciones gráficas
Con wsl –mount puedes conectar discos físicos o VHD/VHDX (ext4 por defecto) y usarlos dentro de tus distros. El desmontaje es tan simple como wsl --unmount <DiskPath>
; sin ruta desmonta todo.
La ejecución de aplicaciones GUI de Linux en WSL está soportada en builds recientes (WSLg), y en entornos anteriores hubo alternativas como Win‑KeX de Kali (experiencia de escritorio vía VNC). Necesitas builds modernas (p.ej., >= 21362) para una experiencia completa y con audio.
Scripting Bash en WSL: fundamentos que importan
Un script Bash es un archivo de texto con comandos que el shell ejecuta en orden. Te permite automatizar mantenimiento, gestionar archivos, procesar datos, desplegar aplicaciones y construir utilidades a medida.
La estructura típica incluye el shebang en la primera línea y, después, los comandos:
#!/bin/bash
echo "Hola, mundo"
Para crear y ejecutar tu primer script: abre un editor (nano, vim, code), guarda script.sh con tu contenido, marca ejecutable con chmod +x script.sh
y ejecútalo con ./script.sh
o bash script.sh
.
Variables, nombres válidos e I/O en Bash
En Bash no hay tipos estrictos: las variables almacenan texto, números, etc. Asigna con pais=España
y lee con $pais
. Evita usar espacios al asignar y nombres que empiecen por dígitos.
Convenciones: empieza por letra o guion bajo, usa letras, números y guiones bajos, distingue mayúsculas, y no utilices palabras reservadas (if, then…). Nombres válidos: mi_var, Cuenta2; inválidos: 2var, mi var, mi-var.
Para capturar entrada del usuario: read nombre
. Desde archivo: while read linea; do echo "$linea"; done < input.txt
. Con argumentos: $1
, $2
…
Para salida: imprime con echo
, redirige a archivo con >
(sobrescribe) o >>
(añade), y canaliza salidas entre comandos con tuberías para construir flujos más complejos.
Comandos básicos, condicionales y bucles
Domina lo esencial: cd, ls, mkdir, touch, rm, cp, mv, cat, grep, chmod, sudo, df, history, ps. Con man
consultas las páginas de manual de cada herramienta.
Las decisiones se modelan con if/elif/else (operadores lógicos -a
AND, -o
OR) para comprobar condiciones numéricas, de cadenas o de archivos (por ejemplo, -f
, -d
, -e
).
Los bucles while y for repiten acciones: en while controlas la condición, en for iteras listas o rangos. Incrementa contadores con (( i+=1 ))
cuando toque.
Con case comparas una expresión con patrones y ejecutas bloques según la coincidencia; termina cada bloque con ;;
y usa *
como caso por defecto.
Programación con cron y automatización
Cron programa tareas recurrentes: abre el editor con crontab -e
y define horarios con cinco campos (minuto, hora, día del mes, mes, día de la semana). Un ejemplo típico a medianoche sería 0 0 * * * /ruta/script.sh
.
Para verificar si se ejecutó un cron en Ubuntu/Debian, revisa /var/log/syslog. Según distro, la ubicación de logs puede variar, así que ajusta tu búsqueda.
Depuración y robustez en scripts
Activa modo traza con set -x o ejecuta bash -x script.sh
para ver cada comando expandido. Si quieres abortar al primer error, usa set -e
al inicio del script.
El último código de salida vive en $?: cero significa éxito, otro valor indica fallo. Intercala echo
estratégicamente para inspeccionar variables y flujos cuando algo no cuadra.
Errores típicos al ejecutar scripts y cómo solucionarlos
Si ves Permission denied, te falta el bit de ejecución: chmod +x script.sh
. Si aparece command not found, revisa el shebang, la sintaxis y que el archivo no sea en realidad un .txt.
Ante errores de sintaxis (token inesperado), revisa comillas, paréntesis y do/done o then/fi emparejados. Para problemas de PATH, añade tu carpeta (p.ej., ~/bin) con export PATH=$PATH:~/bin
en ~/.bashrc y recarga con source ~/.bashrc
.
WSL: solución de problemas frecuentes
Si al pasar a WSL 2 ves el mensaje de kernel, instala la actualización desde los paquetes MSI enlazados antes. Si una distro no arranca y da 0x8007019e, probablemente no está habilitada la característica WSL en Windows Features.
Los errores 0x80070003 o 0x80370102 durante la instalación suelen indicar virtualización deshabilitada en BIOS/UEFI: actívala y repite. El 0x80070003 también puede aparecer si intentas instalar en una unidad distinta a la del sistema (WSL sólo se ejecuta en la unidad con Windows, normalmente C:).
Si ves WslRegisterDistribution con 0x8007019e, habilita la característica desde Panel de Control -> Programas y características -> Activar o desactivar características de Windows, marcando "Subsistema de Windows para Linux" y reinicia.
Cuando el sistema diga que no hay distros instaladas, lánzalas al menos una vez desde el menú Inicio antes de invocarlas desde la línea de comandos; así completan su configuración inicial.
Diferencias con VM, arranque dual y Docker
Frente a una máquina virtual completa (VirtualBox/VMware), WSL 2 arranca en segundos, consume menos RAM y se integra con Windows, pero una VM te da más control y UI tradicional de escritorio si la necesitas para cargas muy pesadas.
En dual boot, exprimes todo Linux, pero debes reiniciar para cambiar de SO. Con WSL ganas rapidez e interoperabilidad (NTFS desde Linux y ext4 accesible desde Windows vía WSL), sin reservar particiones ni duplicar entornos.
Docker no es un SO completo sino contenedores aislados para servicios específicos. Es ideal para despliegues reproducibles; con WSL 2 se integra muy bien, pero ojo con la idea de "desarrollar en producción": mantén buenas prácticas y capas.
Notas sobre privacidad en plataformas
Al consultar contenido en comunidades como Reddit, es normal encontrar avisos de cookies y políticas de privacidad ("We value your privacy"), que no afectan al uso de WSL pero conviene tener presentes al navegar recursos.
Con todo lo anterior ya tienes el mapa completo para trabajar con WSL y dominar los scripts de Bash desde Windows: instala o migra a WSL 2, organiza bien tu almacenamiento según dónde ejecutes herramientas, apóyate en Windows Terminal y VS Code, usa Docker y bases de datos cuando toque, combina comandos Windows-Linux y automatiza con cron. Si algo falla, los comandos de gestión de WSL y las pautas de depuración te sacarán del apuro.