Saltar al contenido principal
Logo FPCode

WSL

Contenido

Introducción al uso de Windows Subsystem for Linux (WSL), la herramienta que permite ejecutar distribuciones de Linux dentro de Windows de manera nativa, facilitando el aprendizaje, el desarrollo y la integración de entornos.

Introducción

Windows Subsystem for Linux, más conocido como WSL, es una característica de Windows que permite ejecutar distribuciones completas de Linux de forma nativa dentro del propio sistema operativo. Gracias a esta integración, los usuarios pueden acceder a un entorno Linux sin necesidad de instalar máquinas virtuales pesadas ni configurar un arranque dual.

El objetivo de WSL es ofrecer la potencia y flexibilidad de Linux junto con la comodidad y compatibilidad de Windows, creando un puente ideal para estudiantes, desarrolladores y profesionales que trabajan en entornos mixtos. Con WSL es posible instalar distribuciones como Ubuntu, Debian o Fedora y utilizarlas directamente desde la terminal de Windows, sin perder rendimiento ni complicar la configuración.

En el ámbito educativo y profesional, WSL resulta especialmente útil porque:

  • Facilita el aprendizaje de comandos y utilidades de Linux en equipos Windows.
  • Permite montar entornos de desarrollo que requieren Linux, como servidores web, bases de datos o compiladores.
  • Favorece la integración con herramientas modernas como Docker, Git o Visual Studio Code.

Por lo tanto, WSL es una herramienta que acerca lo mejor de ambos mundos: la versatilidad de Linux y la usabilidad de Windows, abriendo la puerta a un entorno de desarrollo más completo y adaptado a las necesidades actuales.

Conocimiento previo

  • Gestión de Windows
  • Introducción a Linux y sus comandos principales

Referencias

Índice

  1. Introducción a WSL
    1.1. ¿Qué es WSL?
    1.2. Diferencias entre WSL 1 y WSL 2
    1.3. Ventajas frente a máquinas virtuales y dual boot
    1.4. Requisitos previos
  2. Instalación y configuración
    2.1. Activación de la característica WSL en Windows
    2.2. Instalación de distribuciones Linux
    2.3. Actualización y eliminación de distribuciones
    2.4. Configuración inicial de usuario
  3. Uso Básico de WSL
    3.1. Iniciar y detener distribuciones
    3.2. Comandos básicos
  4. Integración entre Windows y Linux
    4.1. Usuarios
    4.2. Acceso a archivos de Windows desde Linux
    4.3. Acceso a archivos de Linux desde Windows
    4.4. Sistema de permisos de archivo
    4.5. Ejecución de aplicaciones y comandos cruzados
    4.6. Variables de entorno compartidas
  5. Redes y Servicios
    5.1. Red en WSL 1 vs WSL 2
    5.2. Exposición de servicios
    5.3. Configuración de puertos y firewall
  6. Herramientas y aplicaciones en WSL
    6.1. Gestor de paquetes
    6.2. Instalación de entornos de desarrollo
    6.3. Compiladores y utilidades
    6.4. Docker y contenedores
    6.5. Integración con VS Code
  7. Administración Avanzada
    7.1. Exportar e importar distribuciones
    7.2. Configuración personalizada
    7.3. Optimización de recursos
  8. Casos Prácticos
    8.1. Entorno de desarrollo web
    8.2. Uso de Git y control de versiones
    8.3. Despliegue de servicios en local
  9. Ejercicios

1. Introducción a WSL

Windows Subsystem for Linux (WSL) es una de las herramientas más relevantes que Microsoft ha incorporado en Windows durante los últimos años. Su finalidad es permitir que los usuarios puedan ejecutar un entorno Linux completo dentro de Windows, de forma nativa y sin necesidad de utilizar máquinas virtuales o configuraciones de arranque dual.

Con WSL se pueden instalar distintas distribuciones de Linux, como Ubuntu, Debian, Fedora o openSUSE, directamente desde la Microsoft Store. Una vez instaladas, se accede a ellas mediante una terminal y se pueden usar comandos, gestores de paquetes, utilidades y entornos de desarrollo propios de Linux.

Esta característica ha supuesto un gran cambio en la forma de trabajar, ya que une la potencia de Linux con la compatibilidad de Windows, ofreciendo un entorno de desarrollo mucho más flexible.

1.1. ¿Qué es WSL?

WSL (Windows Subsystem for Linux) es una capa de compatibilidad creada por Microsoft que permite ejecutar binarios de Linux en Windows de forma nativa. No se trata de un emulador ni de una máquina virtual tradicional, sino de un subsistema que traduce las llamadas del kernel de Linux al kernel de Windows (en WSL 1) o que utiliza un kernel de Linux real integrado en Windows (en WSL 2).

De esta manera, un usuario puede abrir una terminal en Windows y ejecutar comandos propios de Linux como ls, grep o apt-get, trabajar con scripts de bash, instalar servidores o compilar programas, todo ello sin salir del sistema operativo principal.

WSL convierte a Windows en un entorno mucho más versátil, ya que permite trabajar simultáneamente con aplicaciones nativas de Windows y herramientas de Linux en un mismo flujo de trabajo.

1.2. WSL 1 y WSL 2

Existen dos versiones principales de WSL:

WSL 1

  • Introducido en 2016.
  • Utiliza una capa de traducción entre las llamadas de Linux y Windows.
  • Ventaja: integración muy rápida con el sistema de archivos de Windows.
  • Limitación: menor compatibilidad con ciertas aplicaciones y menor rendimiento en procesos que requieren intensivo uso de sistema.

WSL 2

  • Presentado en 2019.
  • Incluye un kernel real de Linux ejecutándose sobre una tecnología ligera de virtualización.
  • Ofrece compatibilidad completa con aplicaciones y utilidades de Linux.
  • Mejor rendimiento en operaciones de archivos, redes y ejecución de software.
  • Permite ejecutar herramientas avanzadas como Docker Desktop sin necesidad de configuraciones adicionales.

En la práctica, WSL 2 es la versión recomendada para la mayoría de los usuarios, aunque Microsoft sigue manteniendo la compatibilidad con WSL 1 en casos donde la integración de archivos con Windows sea prioritaria.

1.3. Ventajas frente a máquinas virtuales y dual boot

Antes de WSL, quienes necesitaban Linux en un equipo Windows tenían dos opciones principales: instalar una máquina virtual o configurar un arranque dual. Ambas soluciones tienen desventajas que WSL resuelve:

  • Rapidez: WSL arranca en segundos, sin la carga pesada de un hipervisor como en VirtualBox o VMware.
  • 💾 Uso eficiente de recursos: consume menos memoria y CPU que una máquina virtual.
  • 🔄 Integración fluida: permite copiar archivos, ejecutar comandos y usar herramientas de Windows y Linux en paralelo.
  • 🖥️ Sin reinicios: no es necesario reiniciar el ordenador para cambiar entre Windows y Linux, como sucede en el arranque dual.
  • 🐧 Entorno real de Linux: a diferencia de emuladores o entornos simulados, en WSL 2 se ejecuta un kernel Linux completo.

Estas ventajas han convertido a WSL en una herramienta muy popular, especialmente en educación y en entornos de desarrollo profesional.

1.4. Requisitos previos

Para poder usar WSL es necesario disponer los siguientes requisitos:

  • Sistema operativo:

    • Windows 10 (versión 2004 o superior, con compilación 19041 o más reciente).
    • Windows 11 (todas las versiones soportan WSL de forma nativa).
  • Configuración del sistema:

    • Tener habilitada la característica Subsistema de Windows para Linux.
    • En el caso de WSL 2, también se debe activar la característica de Plataforma de máquina virtual (Virtual Machine Platform).
  • Permisos: es necesario contar con privilegios de administrador para instalar o habilitar estas funciones.

  • Espacio en disco y recursos: cada distribución ocupa varios cientos de MB y, dependiendo del uso, se recomienda disponer de al menos 10 GB libres y 4 GB de memoria RAM.

Una vez cumplidos estos requisitos, la instalación de WSL y de las distribuciones Linux se puede realizar con unos pocos comandos desde PowerShell o directamente desde la Microsoft Store.

2. Instalación y configuración

Para comenzar a trabajar con WSL, primero es necesario habilitar la característica en Windows y luego instalar una distribución de Linux. Este apartado describe paso a paso cómo realizar la instalación y configuración inicial para disponer de un entorno funcional.

2.1. Activación de la característica WSL en Windows

Dependiendo de la versión de Windows, puede ser que WSL no venga activado por defecto, por lo que debemos habilitarlo manualmente. Existen dos métodos principales: a través de la interfaz gráfica y mediante línea de comandos.

Mediante entorno gráfico
  1. Abrir el Panel de Control y dirigirse a Programas > Activar o desactivar características de Windows.
  2. Marcar la casilla Subsistema de Windows para Linux.
  3. Si se va a instalar WSL 2, también marcar Plataforma de máquina virtual.
  4. Reiniciar el equipo para que los cambios tengan efecto.
Agregar WSL
Mediante línea de comandos
  1. Abrir PowerShell como administrador (clic derecho sobre el icono y seleccionar “Ejecutar como administrador”).
  2. Ejecutar el siguiente comando para habilitar WSL:
Terminal window
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

2.2. Instalación de distribuciones Linux

Para la instalación de cualquier distribución de linux se puede realizar de varias formas, pero la más sencilla y recomendada es mediante línea de comandos con PowerShell o CMD.

Desde PowerShell o CMD:

A partir de Windows 10 versión 2004 y Windows 11, Microsoft simplificó la instalación de WSL y la distrubución inicial con un comando único:

  1. Abrir PowerShell o CMD como administrador.
  2. Ejecutar el comando:
Terminal window
wsl --install

Este comando realiza varias acciones:

  • Habilita automáticamente las características necesarias (WSL y plataforma de máquina virtual).
  • Descarga e instala la última versión de WSL 2.
  • Instala Ubuntu como distribución predeterminada (puede cambiarse más adelante).

Para verificar que WSL se ha instalado correctamente se puede consultar mediante este comando:

Terminal window
wsl --list --verbose

Esto mostrará las distribuciones instaladas y su versión de WSL.

Instalación distribución inicial
Desde Microsoft Store:
  1. Abrir la Microsoft Store.
  2. Buscar la distribución deseada, por ejemplo: Debian, Fedora Remix, openSUSE.
  3. Hacer clic en Instalar.
  4. Una vez instalada, la distribución aparecerá en el menú de inicio y podrá iniciarse con un clic y mediante comando en PowerShell o CMD.
Listados de distribuciones desde el store de Windows

Aunque Ubuntu es la distribución predeterminada, Windows permite instalar otras distribuciones.

  • Para listar todas las distribuciones disponibles a instalar:
Terminal window
wsl --list --online
  • Una vez seleccionada la distribución para su instalación específica se emplea el comando:
Terminal window
wsl --install -d <Distribución>
Listado de distribuciones

Cuando se instala una distribución en WSL, se genera localmente un archivo con extensión .vhdx que contiene todo el sistema de archivos de Linux. La ubicación de este archivo puede variar según la versión de Windows y de WSL que se utilice.

  • En versiones anteriores o en WSL1, normalmente se encuentra en:
C:\Users\<Usuario>\AppData\Local\Packages\<Distribucion>\LocalState\ext4.vhdx

El nombre de la distribución depende de la versión instalada. Por ejemplo, para Ubuntu, podría aparecer como:

CanonicalGroupLimited.Ubuntu_<Identificador>

  • En versiones más recientes de WSL2, los discos virtuales se almacenan en:
C:\Users\<Usuario>\AppData\Local\wsl

2.3. Actualización y eliminación de distribuciones

Una vez se disponen de distribuciones instaladas, es importante conocer cómo mantenerlas actualizadas y cómo eliminar aquellas que ya no se necesiten.

Se puede cambiar la versión del WSL mediante el comando:

Terminal window
wsl --set-version <Distribución> <1|2>

Se tendrá que indicar el nombre de la distribución instalada y elegir el número de versión entre WSL 1 y WSL 2 según las necesidades de compatibilidad o rendimiento.

Si de lo contrario se desea eliminar una distribución que ya no se use, se puede hacer de la siguiente manera:

Terminal window
wsl --unregister <Distribución>

Esto elimina completamente la distribución seleccionada, liberando espacio y recursos.

Adicionalmente, el mantenimiento de las distribuciones también incluye la actualización de los paquetes y software instalados dentro de ellas. Esto se realiza como en cualquier sistema Linux, usando el gestor de paquetes correspondiente. Por ejemplo, para actualizar paquetes en distribuciones basadas en Debian/Ubuntu:

Terminal window
sudo apt update
sudo apt upgrade -y

2.4. Configuración inicial de usuario

Al iniciar la distribución Linux por primera vez, el sistema solicitará crear un usuario y contraseña. Este paso es necesario porque define el usuario principal para trabajar en Linux:

  1. Abrir la distribución predeterminada desde el menú de inicio o ejecutar:
Terminal window
wsl
  1. Introducir el nombre de usuario.
  2. Crear y confirmar la contraseña.

Opcionalmente, se puede cambiar el usuario predeterminado de la distribución con:

Terminal window
wsl -u <Usuario>

Después de este proceso, la distribución estará lista para usarse y se podrán instalar paquetes, ejecutar comandos de Linux y empezar a desarrollar dentro de WSL.

Configuracion inicial

3. Uso básico de WSL

Una vez instalada y configurada la distribución Linux en Windows, es importante conocer los principales usos y comandos básicos que permiten manejar WSL.

3.1. Iniciar y detener distribuciones

Cada distribución instalada puede iniciarse y detenerse de varias maneras.

Iniciar

Desde el menú de inicio:

  • Buscar el nombre de la distribución, por ejemplo Ubuntu, y hacer clic para abrir la terminal.
Iniciar desde el menú de inicio

Desde PowerShell o CMD:

  • Para iniciar WSL y arrancar la distribución predeterminada:
Terminal window
wsl
  • Para iniciar una distribución específica:
Terminal window
wsl -d <NombreDistribución>

Por defecto, cada vez que se inicie sesión se encontrará en el directorio home del usuario creado durante la configuración inicial.

Detener

Para salir del terminal de Linux, simplemente se podrá cerrar la ventana o usar el comando exit.

Terminal window
user@host:/mnt/c/Windows/system32$ exit

Esto permite salir de la sesión de Linux y volver a Windows. Es posible que aún que estemos en Windows, la distribución siga ejecutándose en segundo plano.

Las máquinas virtuales activas siguen consumiendo recursos del sistema. Para detenerlas por completo, estando en el terminal de windows, se puede detener con:

Terminal window
wsl -t <NombreDistribución>

O para detener todas las distribuciones activas:

Terminal window
wsl --shutdown

3.2. Comandos básicos

WSL proporciona diferentes comandos para administrar distribuciones y acceder al entorno Linux, se puede visualizar todas sus funciones con wsl --help

A continuación se muestran los comandos más comunes:

ComandoDescripción
wsl --helpMuestra la ayuda contextual con todos los comandos disponibles.
wsl --statusMuestra el estado actual de WSL, incluyendo la versión y la distribución predeterminada.
wsl --listMuestra el nombre de las distribuciones instaladas y cuál de ellas es la predeterminada.
wsl --list --verboseMuestra todas las distribuciones instaladas con su versión y estado.
wsl --list --onlineMuestra las distribuciones disponibles para instalar.
wsl --installInstala una distribución predeterminada.
wsl --install -d <Distribución>Instala una distribución concreta.
wsl --unregister <Distribución>Desinstala una distribución concreta.
wsl --distribution <Distribución>Accede directamente a una distribución específica.
wsl --terminate <Distribución>Detiene una distribución específica.
wsl --shutdownDetiene todas las distribuciones activas.
wsl --set-version <Distribución> <1|2>Cambia la versión de WSL (1 o 2) para una distribución específica.
wsl --set-default <Distribución>Establece la distribución predeterminada.
wsl --export <Distribución> <Archivo.tar>Exporta la distribución a un archivo para respaldo o migración.
wsl --import <Nombre> <Directorio> <Archivo.tar>Importa una distribución desde un archivo previamente exportado.

Cada uno de estos comando dispone de las mismas opciones pero abreviadas, por ejemplo -l en lugar de --list, -t en lugar de --terminate, etc.

El listado de los comandos son los que se disponen para WSL, una vez dentro del terminal de la distribución, se pueden usar todos los comandos habituales de Linux.

3.3. Ejecución de instrucciones y aplicaciones

Con WSL se puede usar de manera flexible o directa permitiendo ejecutar aplicaciones o instrucciones del terminal desde cualquiera de los entornos Windows o Linux.

  • Ejecutar comandos de Linux directamente sin entrar en la distribución:

    Terminal window
    wsl ls -la /home

Esto ejecuta el comando ls -la /home en la distribución predeterminada de Linux y muestra el resultado en Windows sin tener que iniciar la distribución, es decir, en ningún momento se esta ejecutando la instrucción en el terminal de Linux.

  • Ejecutar aplicaciones de Windows desde el terminal de la distribución:

Se puede acceder a los archivos de Windows desde Linux usando rutas como /mnt/c/Users/... y ejecutar aplicaciones de Windows desde Linux directamente indicando el .exe de la aplicación. Por ejemplo, explorer.exe tal y como se muestra en la imagen.

Ejecución de aplicaciones desde la distribución

4. Integración entre Windows y Linux

WSL ofrece un entorno en el que es posible ejecutar aplicaciones y servicios de Linux directamente dentro de Windows, logrando así una coexistencia práctica de ambos sistemas. Aunque se ejecuta como una característica adicional del sistema operativo Windows, WSL brinda al usuario la capacidad de interactuar con ficheros, directorios y procesos de manera muy cercana a la de un sistema Linux nativo.

Una de las ventajas más destacables es la posibilidad de acceder al sistema de archivos de Windows desde la distribución de Linux y viceversa. Esto significa que se pueden leer, modificar y compartir archivos sin necesidad de herramientas externas, lo que facilita enormemente el trabajo colaborativo entre ambos entornos.

No obstante, es importante subrayar que WSL no sustituye por completo a un Linux tradicional. Existen áreas propias de Windows —como la configuración del sistema, las políticas de seguridad, las opciones del panel de control o la administración del cortafuegos— que no pueden alterarse directamente desde WSL y requieren gestionarse de manera nativa en Windows.

4.1. Usuarios

Los usuarios creados en Windows no se comparten con WSL. Cada distribución de Linux instalada tiene su propio sistema de cuentas y contraseñas, totalmente separado del sistema Windows.

Al instalar una nueva distribución en WSL, se solicita crear un primer usuario de Linux, que será el inicial. A partir de ahí, cualquier otra cuenta debe añadirse de manera manual. Este proceso se repite cada vez que una distribución se reinstale o restablezca.

Usuario root y el uso de sudo
El usuaro administrador en WSL funciona igual que en cualquier sistema Linux: permite ejecutar comandos administrativos, por ejemplo:

Terminal window
sudo apt upgrade

Sin embargo, el usuario root solo tiene efecto dentro de la distribución de Linux. No debe confundirse con el Administrador de Windows, que sigue siendo independiente.

Si un usuario olvida su contraseña en una distribución Linux, el procedimiento es el mismo que en un sistema Linux nativo, pero requiere iniciar WSL directamente como root:

Abrir WSL como root desde Windows:

Terminal window
wsl -u root

Actualizar la contraseña con el comando:

Terminal window
passwd <usuario>

Tras escribir la nueva contraseña y confirmarla, el usuario podrá volver a acceder.

4.2. Acceso a archivos de Windows desde Linux

WSL monta automáticamente las unidades de Windows bajo el directorio /mnt. Esto permite acceder fácilmente a todos los archivos de Windows desde la terminal Linux:

  • Unidad C: /mnt/c/
  • Unidad D: /mnt/d/

Por ejemplo, para listar archivos en la carpeta de documentos de Windows:

Terminal window
ls /mnt/c/Users/Usuario/Documents

También es posible editar archivos de Windows usando editores de Linux como nano, vim o incluso scripts de bash, integrando ambos entornos en el flujo de trabajo.

Interactuación ficheros Linux-Windows

4.3. Acceso a archivos de Linux desde Windows

Desde Windows, se puede acceder a los archivos de WSL usando rutas especiales o explorador de archivos, accediendo mediante la ruta \\wsl$ o localizando el icono de Linux en el acceso rápido del explorador de archivos.

Acceso al sistema de archivos de linux

Ruta directa a una distribución específica:
\\wsl$\Distribución

Por ejemplo, para abrir la carpeta home de Ubuntu desde el explorador de Windows:

  1. Abrir el explorador de archivos.
  2. Escribir en la barra de direcciones:
Terminal window
\\wsl$\Ubuntu\home\Usuario
  1. Esto permite copiar, mover o editar archivos directamente desde Windows.
Interactuación ficheros Windows-Linux

4.4. Sistema de permisos de archivos

La gestión de permisos de archivos depende de la versión de WSL y del tipo de sistema de archivos que se esté utilizando. En general los permisos de archivos en WSL funciona de forma muy similar a un Linux nativo, aunque con algunas diferencias cuando se accede a archivos de Windows.

Archivos de Linux dentro de WSL

Tanto en WSL 1 como en WSL 2, los archivos ubicados en el sistema de archivos raíz de la distribución (/home, /usr, /etc, etc.) utilizan permisos nativos de Linux.

  • Se pueden usar los comandos estándar de Linux para gestionar permisos:
    • chmod → cambiar permisos
    • chown → cambiar propietario
    • chgrp → cambiar grupo
  • El umask se aplica normalmente al crear nuevos archivos y directorios, limitando permisos según la configuración de la distribución.

💡 Los archivos en el sistema de archivos raíz de Linux no se ven afectados por los permisos de Windows.

Cuando se crean archivos nuevos en Linux (/ de la distro):

  • Se aplican permisos estándar de Linux (umask, chmod, chown).
  • No dependen de Windows ni de atributos extendidos.
Archivos de Windows desde WSL

Cuando se accede a archivos de Windows desde WSL (/mnt/c/), el comportamiento depende de la versión de WSL y de si se usan metadatos:

VersiónComportamiento
WSL 1Utiliza directamente la pila de permisos de Windows. Los comandos chmod y chown no afectan a los archivos de Windows.
WSL 2Los permisos se interpretan a partir de los permisos de Windows o, si se habilitan, de metadatos NTFS, permisos al estilo Linux usando atributos extendidos.

Cuando se crean archivos nuevos en Windows:

  • Sin metadatos: heredan permisos del directorio padre.
  • Con metadatos: aplican el umask definido en WSL y se guardan los atributos extendidos.

Metadatos

Los metadatos permiten gestionar atributos extendidos NTFS en los archivos de Windows, que WSL puede usar para almacenar información adicional sobre permisos al estilo Linux.

AtributoDescripción
$LXUIDID del propietario del usuario de Linux
$LXGIDID del grupo propietario de Linux
$LXMODPermisos en formato octal (ej: 0777)
$LXDEVIdentificador de dispositivo (si es un archivo de dispositivo)

⚠️ Estos metadatos solo funcionan en WSL 2 y permiten que los permisos Linux se respeten incluso en archivos de Windows.

Por defecto, los metadatos no están habilitados. Para habilitar los metadatos es necesario configurar el montaje automático de las unidades en /etc/wsl.conf agregando la siguiente sección:

[automount]
options = "metadata"

Al reiniciar WSL, los sistemas de archivos montados de Windows respetarán estos metadatos y el usuario y grupo predeterminados pasan a ser 1000, y la umask se establece en 022.

Los archivos creados en unidades de Windows ahora respetan los permisos de Linux, siempre dentro de los límites que permite Windows.

👉 En el apartado Configuración personalizada se explica como configurar el fichero wsl.conf

Personalización de permisos

Además de utilizar metadata, se pueden definir opciones adicionales de montaje para controlar los permisos de archivos en unidades de Windows:

Opción Descripción umask Máscara de permisos aplicada a todos los archivos fmask Máscara de permisos aplicada solo a archivos dmask Máscara de permisos aplicada solo a directorios

Ejemplo de configuración:

[automount]
options = "umask=022,fmask=022,dmask=022,metadata"

⚠️ La combinación de umask, fmask y dmask determina los permisos finales mediante una operación OR lógica.

Acceso desde Windows a archivos Linux

Al acceder desde Windows (\wsl$), los archivos toman los permisos del usuario predeterminado de la distribución.

El umask predeterminado (022) se aplica al crear archivos desde Windows.

💡 Esto significa que las aplicaciones de Windows tienen los mismos permisos que el usuario Linux predeterminado dentro de WSL.

Gestión de atributos extendidos

Para manipular atributos extendidos de los metadatos en WSL es necesario instalar el paquete attr.

  • Asignar propietario y grupo:
Terminal window
setfattr -n user.LXUID -v 1000 archivo.txt
setfattr -n user.LXGID -v 1001 archivo.txt
  • Consultar atributos:
Terminal window
getfattr -d archivo.txt

Esto mostrará valores como user.LXUID, user.LXGID y user.LXMOD.

4.5. Ejecución de aplicaciones y comandos cruzados

Con WSL se puede usar de manera flexible o directa permitiendo ejecutar aplicaciones o instrucciones del terminal desde cualquiera de los entornos Windows o Linux.

Ejecutar comandos de Linux directamente sin entrar en la distribución:
Terminal window
wsl ls -la /home

Esto ejecuta el comando ls -la /home en la distribución predeterminada de Linux y muestra el resultado en Windows sin tener que iniciar la distribución, es decir, en ningún momento se esta ejecutando la instrucción en el terminal de Linux.

Ejecutar aplicaciones de Windows desde el terminal de la distribución:

Es posible ejecutar aplicaciones de Windows desde Linux directamente indicando el fichero .exe de la aplicación. Por ejemplo, explorer.exe tal y como se muestra en la imagen.

Ejecución de aplicaciones desde la distribución

Gracias a esto, se puede combinar el uso de herramientas de ambos sistemas. Por ejemplo,

  • Abrir la ruta del sistema de archivos de Linux con el explorador de Windows:
Terminal window
explorer.exe .
  • Ejecutar el bloc de notas de Windows sobre un fichero de Linux:
Terminal window
notepad.exe archivo
  • Copiar al portapapeles de Windows desde Linux:
Terminal window
echo "Texto de prueba" | clip.exe

Esta interoperabilidad permite crear flujos de trabajo híbridos, combinando la potencia de Linux para desarrollo y scripts con la comodidad de Windows para aplicaciones gráficas y herramientas de productividad.

4.6. Variables de entorno compartidas

WSL permite compartir variables de entorno entre Windows y Linux para facilitar la ejecución de aplicaciones, scripts y compartir información de configuración.

Para lograr esto se dispone de WSLENV, una variable de entorno compartida que existe tanto en Windows como en WSL. Su propósito es indicar qué variables deben trasladarse entre ambos entornos y cómo deben adaptarse, manejando aspectos como formato de ruta y delimitadores de lista.

Dentro de WSLENV, cada variable se define junto con una o varios paramétros, que controlan cómo se traduce o cuándo se aplica.

  • /p — Traduce rutas entre el estilo Linux (WSL) y el estilo Win32 (Windows).
  • /l — Indica que el valor es una lista de rutas: en WSL usa : y en Windows ; como separadores.
  • /u — Sólo se aplica cuando se lanza WSL desde Windows (Windows → WSL).
  • /w — Sólo se aplica cuando se ejecuta un proceso de Windows desde WSL (WSL → Windows)

Estos parámetros se pueden combinar según la necesidad de la variable que se quiera compartir.

De Windows a Linux

Inicialmente hay que predefinir la variable que se quiere compartir, en Windows se hace directamente con set o setx en PowerShell o CMD. Hay que indicar WSLENV y la variable que se quiere compartir junto con sus parámetros.

Terminal window
set WSLENV=<VARIABLE></parametro>

Una vez definida, al iniciar WSL, la variable estará disponible dentro del entorno Linux.

Terminal window
echo $<VARIABLE>
# Salida esperada: El contenido de la variable

Por ejemplo, imagina que en Windows queremos que la variable USERPROFILE esté disponible dentro de WSL, con traducción de ruta:

Uso de variables de entorno compartidas de Windows a Linux

Tal y como se aprecia en la imagen con el parámetro /u indica que esta variable se comparte únicamente al invocar WSL desde Windows. Para incluir además la traducción de ruta, se añade /p junto con /u, ahora la ruta que hay en la variable se adapta al formato Linux.

De Linux a Windows

Para compartir variables desde WSL a Windows, se sigue un proceso similar, pero definiendo WSLENV dentro de la distribución Linux.

Terminal window
export WSLENV=<VARIABLE></parametro>

Ahora desde Windows, la variable estará disponible.

Terminal window
set <VARIABLE>
# Salida esperada: El contenido de la variable
Uso de variables de entorno compartidas de Linux a Windows

Independientemente de la dirección en la que se comparta la variable, las variables de entorno declaradas solo sirven en la sesión actual, es decir, si se realiza exit desde Linux o se cierra el terminal desde Windows, se perderán. Para definir variables de entorno permanentes hay que añadirlas a los archivos de configuración de inicio, editando /etc/environment para todos los usuarios o .bashrc para solo el usuario específico en Linux, o a las variables de entorno del sistema, usando setx en Windows.

5. Redes y conectividad

WSL no solo permite ejecutar comandos y aplicaciones de Linux, sino que también ofrece la capacidad de trabajar con servicios de red, como si la distribución Linux fuera un equipo independiente dentro de la red.

Gracias a esto, es posible:

  • Compartir carpetas entre Windows y Linux de manera directa.
  • Aprovechar las herramientas de red disponibles en Linux y Windows.
  • Ejecutar servicios de red, como servidores web, bases de datos o aplicaciones en red, que pueden ser accesibles desde el equipo host o incluso desde otros dispositivos en la misma red local.

5.1. Red en WSL 1 vs WSL 2

La red se comporta de manera diferente según la versión de WSL utilizada:

  • WSL 1

    • Utiliza directamente la pila de red de Windows.
    • La dirección IP de la distribución es la misma que la del equipo Windows.
    • Los servicios que se ejecuten en Linux son accesibles desde Windows sin configuraciones adicionales.
  • WSL 2

    • Funciona sobre una máquina virtual ligera con un kernel Linux real.
    • Cada distribución tiene su propia dirección IP, distinta a la del equipo Windows.
    • Los servicios ejecutados en WSL 2 no se exponen automáticamente a Windows ni a otros equipos en la red local, aunque Windows 11 recientes permiten acceder a ellos mediante localhost gracias al reenvío automático de puertos.
    • Para otros equipos de la red, es necesario exponer o redirigir puertos manualmente.

5.2. Conocer la red y configuración

Para conocer la configuración de red, es necesario recurrir a los comandos que dispone Windows y Linux, dependiendo de la versión de WSL que se esté utilizando.

  • En Windows, para ver la configuración de red:
Terminal window
ipconfig
  • En Linux, para ver la configuración de red:
Terminal window
ip addr

El comando ip viene por defecto en la mayoría de distribuciones, aun que existe otras alternativas como ifconfig, systemctl, nmcli, etc.. Estas herramientas no vienen por defecto y requiere que se instalen previamente.

5.2. Exposición de servicios

Para ejecutar servicios de Linux (por ejemplo, un servidor web con Apache o Nginx) y hacerlos accesibles desde Windows o desde otros dispositivos en la red local:

  • Comprobar que el servicio está activo:
sudo service apache2 start
  • Verificar la dirección IP de la distribución:
ip addr
  • Acceder al servicio desde Windows usando localhost (WSL 2 con soporte de reenvío) o la IP asignada a la distribución.

En WSL 2 también se pueden redirigir puertos manualmente con PowerShell:

netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=<IP-WSL>

5.3. Configuración de puertos y firewall

Para que los servicios funcionen correctamente, a veces es necesario configurar el firewall de Windows o abrir puertos:

  • Abrir puerto específico en el firewall de Windows:
New-NetFirewallRule -DisplayName "WSL 8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow
  • Verificar reglas existentes:
Get-NetFirewallRule | where { $_.DisplayName -like "*WSL*" }
  • Para servicios que deben ser accesibles fuera del equipo local, asegurarse de que el router o la red permite la conexión a los puertos configurados.

6. Herramientas y aplicaciones en WSL

Otra de las funcionalidades que facilita WSL es explotar la facilidad de instalar aplicaciones en las distribuciones y funcionar de forma independiente. Uno de los usos que suele utilizarse habitualmente es la instalación de entornos de desarrollo para facilitar el trabajo y no disponer por completo de Windows. Por ejemplo, imagina el uso de cualquier herramienta propia de Linux que no está disponible para Windows o que no se dispone de permisos de instalación en Windows, en cambio, se tiene acceso a WSL.

6.1. Gestor de paquetes

En Linux no existe ejecutables que permitan la instalación de forma gráfica y empleando asistentes de instalación.

En Linux, es necesario el uso de gestores de paquetes, que facilitan la búsqueda de la aplicación de instalar de los repositorios que se disponen, a descargarla, junto con sus dependencia y finalmente proceder a la instalación

Dependiendo de la distribución, se utilizará uno u otro:

  • Ubuntu/Debian: apt
  • Fedora: dnf
  • openSUSE: zypper

Es muy importante que se mantenga el gestor de paquetes actualizado, con todos los repositorios al día.

Terminal window
sudo apt update
sudo apt upgrade -y

6.2. Aplicaciones

A continuación, se expone algunas aplicaciones que son habilituales

Entornos de desarollo

WSL facilita la instalación de lenguajes y entornos completos:

  • Python:
    Terminal window
    sudo apt install python3 python3-pip
  • Node.js y npm:
    Terminal window
    sudo apt install nodejs npm
  • Java (OpenJDK):
    Terminal window
    sudo apt install openjdk-17-jdk
  • Ruby, PHP, Go u otros lenguajes también pueden instalarse desde el gestor de paquetes correspondiente.

Esto permite compilar, ejecutar y probar programas directamente en el entorno Linux sin salir de Windows.

6.3. Compiladores y utilidades

WSL incluye o permite instalar compiladores y herramientas esenciales para desarrollo:

  • Compiladores: gcc, g++, javac
  • Editores de texto: vim, nano, emacs
  • Sistemas de control de versiones: git, svn
  • Utilidades de construcción: make, cmake

Estas herramientas son compatibles con scripts y proyectos que tradicionalmente se ejecutan en entornos Linux, facilitando la migración de software o el trabajo educativo.

6.4. Docker y contenedores

WSL 2 es compatible con Docker Desktop, lo que permite ejecutar contenedores Linux directamente en Windows:

  • Instalar Docker Desktop en Windows y habilitar la integración con WSL 2.
  • Usar Docker desde la terminal de WSL:
Terminal window
docker run hello-world
  • Crear contenedores para desarrollo de aplicaciones, servidores web, bases de datos o entornos de prueba sin afectar al sistema principal.

Esto abre la puerta a un flujo de trabajo profesional que combina Linux, contenedores y herramientas modernas de desarrollo.

6.5. Integración con VS Code

Visual Studio Code ofrece soporte nativo para trabajar con WSL:

  • Instalar VS Code en Windows.
  • Instalar la extensión Remote - WSL desde el marketplace.
  • Abrir un proyecto dentro de WSL usando VS Code con:
Terminal window
code .
  • Esto permite editar archivos, depurar código y usar terminales integradas de Linux, combinando la potencia de WSL con la interfaz de VS Code en Windows.

Gracias a esta integración, los desarrolladores pueden crear un entorno completo, híbrido y eficiente, combinando lo mejor de ambos sistemas operativos.

7. Administración avanzada

Además del uso básico, existen herramientas que permite realizar tareas avanzadas de administración para personalizar el entorno, optimizar recursos y gestionar múltiples distribuciones.

7.1. Exportar e importar distribuciones

Anteriormente se vio donde se almacenan las distribuciones y sus archivos instalados, no es recomendable copiar y pegar ese contenido para portar esas máquinas. Se dispone de una herramienta para gestionar copias de seguridad y migraciones mediante exportación e importación. WSL permite crear respaldos completos de las distribuciones y transferirlas a otros equipos:

  • Exportar una distribución a un archivo tar:
Terminal window
wsl --export <Distribución> <Archivo.tar>

Esto genera un archivo con todo el contenido de la distribución, incluyendo archivos, configuraciones y usuarios.

  • Importar una distribución desde un archivo tar:
Terminal window
wsl --import <NombreNuevaDistribución> <DirectorioDestino> <Archivo.tar>

La distribución se registra como nueva y puede iniciarse normalmente. Si se intenta importar una distribución con el mismo nombre que otra ya existente, se producirá un error.

Exportar e importar una distribución de WSL

7.2. Configuración personalizada

Por defecto, al instalar WSL se aplican valores predeterminados para la configuración de las distribuciones. Aun así es posible personalizar ciertos aspectos del entorno mediante archivos de configuración específicos.

En WSL encontramos dos archivos principales que permiten personalizar el comportamiento del entorno: wsl.conf y .wslconfig.

  • .wslconfig → Se utiliza para definir parámetros globales que afectan a todas las distribuciones, pero únicamente cuando se ejecutan en WSL 2.
  • wsl.conf → Permite establecer configuraciones específicas por cada distribución de Linux instalada en WSL.
.wslconfig

un archivo .wslconfig en la carpeta de usuario de Windows (C:\Users\Usuario\.wslconfig):

Ejemplo de configuración:

[wsl2]
memory=4GB
processors=2
swap=2GB
localhostForwarding=true

Opciones principales:

  • memory: limita la memoria máxima que WSL puede usar.
  • processors: número de núcleos de CPU asignados.
  • swap: tamaño de espacio de intercambio.
  • localhostForwarding: permite acceder a servicios de WSL desde Windows mediante localhost.

Modificar estos valores permite optimizar el rendimiento y ajustar el uso de recursos según las necesidades del usuario.

wsl.conf

El archivo wsl.conf se encuentra en el directorio /etc/ de cada distribución.
Las configuraciones que se definan aquí se aplicarán solo a esa distribución concreta, sin afectar al resto de distribuciones instaladas en el sistema.

El contenido de este archivo emplea una sintaxis sencilla basada en secciones y opciones. Cada sección se define entre corchetes [ ] y dentro se especifican las claves y sus valores.

Por ejemplo:

  • [boot] → Configura el arranque de la distribución en WSL.
    • systemd=true → Activa systemd como proceso principal de inicio dentro de la distro Linux.

⚠️ Tras cualquier modificación en este fichero, es necesario reiniciar WSL.

El archivo admite cinco secciones principales: [automount], [network], [interop], [user] y [boot].

  • [automount]
    Controla el montaje automático de las unidades de Windows en WSL.

    • enabled (boolean, por defecto true) → Monta automáticamente las unidades (ej. C:/) en /mnt/.

    • mountFsTab (boolean, por defecto true) → Procesa el fichero /etc/fstab en cada inicio.

    • root (string, por defecto /mnt/) → Directorio base donde se montan las unidades.

    • options (lista separada por comas) → Parámetros aplicados a todas las unidades montadas.

      Opciones comunes dentro de options:

      • uid → ID de usuario (por defecto 1000).
      • gid → ID de grupo (por defecto 1000).
      • umask → Máscara de permisos excluidos (por defecto 000).
      • fmask → Máscara de permisos excluidos para ficheros.
      • dmask → Máscara de permisos excluidos para directorios.
      • metadata → Habilita el uso de metadatos NTFS para permisos Linux.
      • case → Control de sensibilidad a mayúsculas/minúsculas (off, dir, force).
  • [network]
    Configura la red en WSL.

    • generateHosts (boolean, por defecto true) → Genera automáticamente entradas en /etc/hosts.
    • generateResolvConf (boolean, por defecto true) → Crea /etc/resolv.conf con los DNS de Windows.
    • hostname (string, por defecto el de Windows) → Define el nombre de host de la distribución.
  • [interop]
    Define la interoperabilidad con Windows.

    • enabled (boolean, por defecto true) → Permite ejecutar procesos de Windows desde WSL.
    • appendWindowsPath (boolean, por defecto true) → Añade rutas de Windows a la variable $PATH de WSL.
  • [user]
    Gestiona el usuario por defecto en WSL.

    • default (string) → Usuario que iniciará la sesión. Por defecto es el creado en la primera instalación.
  • [boot]
    Esta opción solo disponible en Windows 11 y Windows Server 2022. Establece el arranque.

    • systemd (booleano) → Activa systemd como proceso principal de inicio dentro de la distro Linux

Un ejemplo de configuración de este archivo podría ser:

[boot]
systemd=true
[automount]
enabled=true
root=/mnt/
options=metadata,umask=22,fmask=111
[network]
hostname=MiWSL
generateResolvConf=true

7.3. Optimización de recursos

Para asegurar un rendimiento óptimo:

  • Cerrar distribuciones inactivas:
Terminal window
wsl --shutdown
  • Ajustar .wslconfig según la memoria y procesadores disponibles.
  • Limpiar paquetes y archivos temporales:
Terminal window
sudo apt autoremove
sudo apt clean
  • Evitar usar discos de red para archivos de trabajo intensivo; utilizar el sistema de archivos de la distribución /home para operaciones frecuentes.

Estas prácticas ayudan a mantener un entorno WSL eficiente, estable y rápido, incluso con varias distribuciones y servicios ejecutándose simultáneamente.

8. Casos prácticos

A continuación se exponen algunos casos habituales de forma práctica en la que se le puede dar uso a WSL.

8.1. Entorno de desarrollo web

Establecer un entorno de desarrollo web para desarrollar aplicaciones y sitios web con diferentes tecnologías:

  • Servidor web: Apache, Nginx o incluso Node.js.
  • Bases de datos: MySQL, PostgreSQL o MongoDB.
  • Lenguajes y frameworks: PHP, Python (Django, Flask), JavaScript (Node.js, Express).

Ejemplo de instalación en Ubuntu para un entorno LAMP (Linux, Apache, MySQL y PHP) básico:

Terminal window
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
sudo service apache2 start
sudo service mysql start

Después de esto, el desarrollador puede acceder al servidor web desde Windows usando localhost y trabajar directamente con archivos ubicados en /home/usuario/proyecto.

8.2. Uso de Git y control de versiones

Establecer Git para gestionar proyectos, aprovechando herramientas nativas de Linux:

  • Configuración inicial:
Terminal window
git config --global user.name "Nombre"
git config --global user.email "tuemail@ejemplo.com"
  • Clonar un repositorio:
Terminal window
git clone https://github.com/usuario/proyecto.git
  • Trabajar con ramas, commits y sincronización:
Terminal window
git checkout -b nueva-rama
git add .
git commit -m "Descripción del cambio"
git push origin nueva-rama

8.3. Despliegue de servicios en local

WSL permite ejecutar servicios y aplicaciones completas de manera local para pruebas o desarrollo:

  • Levantar un servidor web o API:
Terminal window
python3 -m http.server 8000
  • Ejecutar contenedores Docker:
Terminal window
docker run -d -p 8080:80 nginx
  • Probar aplicaciones de bases de datos: conectar desde Windows a PostgreSQL o MySQL en WSL usando localhost y los puertos correspondientes.

9. Ejercicios

Ejercicio 1: Comandos Básicos en WSL

Abre tu distribución Linux en WSL. Navega hasta tu directorio home y crea una carpeta llamada proyecto.
Luego, lista el contenido del directorio y muestra la ruta absoluta actual usando comandos ls y pwd.

Ejercicio 2: Instalación de Paquetes

Usando tu distribución de WSL, instala el paquete curl y verifica que se ha instalado correctamente.
Escribe el comando para mostrar la versión instalada de curl.

Ejercicio 3: Gestión de Archivos

Dentro de la carpeta proyecto creada anteriormente:

  • Crea un archivo de texto llamado notas.txt.
  • Añade algunas líneas de texto usando echo o un editor como nano.
  • Copia el archivo a una subcarpeta llamada backup.
  • Lista el contenido de ambas carpetas para comprobar que la copia se realizó correctamente.
Ejercicio 4: Uso de Git en WSL

Configura Git en tu distribución de Linux:

  • Configura tu nombre de usuario y correo electrónico.
  • Crea un repositorio local dentro de proyecto.
  • Añade el archivo notas.txt, realiza un commit con mensaje "Primer commit" y verifica el historial de commits.
Ejercicio 5: Servidor Web Local

Utiliza Python para levantar un servidor web local en WSL:

  • Navega hasta la carpeta proyecto.
  • Ejecuta el comando python3 -m http.server 8000.
  • Abre un navegador en Windows y accede a http://localhost:8000 para verificar que el servidor está funcionando.