Windows Subsystem for Linux (WSL) en Windows 10: Guía Definitiva

El Subsistema de Windows para Linux o Windows WSL es una excelente solución para que los desarrolladores trabajen nativamente en Linux directamente desde su escritorio en la versión 10 de Windows.

Si has pasado demasiado tiempo particionando discos duros para tener varios sistemas Linux instalados junto con Windows, estás de suerte con este artículo.

La hada madrina del código en Microsoft ha decidido darte otra opción: El Subsistema de Windows para Linux (WSL). WSL facilita mucho más la ejecución de un sistema Linux junto a Windows, y lo hace más flexible.

En este tutorial, aprenderás cómo empezar con WSL. Descubrirás cómo utilizar algunas herramientas ingeniosas que hacen que WSL sea aún más versátil que usar bash o PowerShell por sí solos.

Reduce las llamadas al servicio de asistencia y actualiza las credenciales de la caché para usuarios remotos incluso fuera de VPN con una solución de restablecimiento de contraseña de autoservicio. ¡Obtén una demostración de Specops uReset!

¿Qué es WSL?

WSL o C:\Windows\System32\wsl.exe es una herramienta de Windows que te permite instalar una distribución de Linux como una aplicación desde la tienda de Windows.

Dado que WSL es un ejecutable simple de Windows, puedes llamarlo desde un símbolo del sistema o terminal de PowerShell. Profundizaremos en ese tema más adelante. Por ahora, es importante entender un poco más sobre lo que WSL está haciendo bajo el capó.

wsl.exe

Cómo Habilitar WSL

Para configurar y habilitar WSL implica instalar una distribución de Linux junto a Windows 10. Pero de una manera que permita que los dos sistemas operativos diferentes interactúen entre sí.

Prerrequisitos

Si eres un profesional de IT que lucha con demasiadas solicitudes de restablecimiento de contraseña en Active Directory, echa un vistazo a Specops uReset, una solución segura de SSPR.

Para instalar WSL en Windows, tienes un requisito que cumplir; debes tener una computadora con Windows 10 de 64 bits Build 18917 o posterior.

Puedes encontrar la versión de tu Windows 10 ejecutando la utilidad winver.

Windows build 1809

Habilitar la Característica de Windows WSL

WSL es fácil de habilitar; no se requiere descarga. Es simplemente una única característica de Windows.

Para habilitar WSL, abre PowerShell como administrador y ejecuta lo siguiente:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux 

Relacionado: Cómo Ejecutar PowerShell como Administrador

Una vez completado, ¡reinicia tu computadora y listo!

Descargar una Distribución de Linux para WSL

WSL no instala ninguna distribución de Linux por sí mismo. Necesitarás instalar una. Una vez que Windows 10 se reinicie, comienza a configurar la distribución de Linux que elijas.

Primero, abre la Tienda de Microsoft y busca ‘WSL’. Deberías ver pronto una lista de distribuciones de Linux aparecer.

A continuación, elige tu distribución preferida e instálala. Este tutorial utilizará Ubuntu 18.04. En el momento de escribir esto, también tienes disponibles algunas otras distribuciones como:

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • OpenSUSE Leap 15
  • OpenSUSE Leap 42
  • SUSE Linux Enterprise Server 12
  • SUSE Linux Enterprise Server 15
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix para WSL
  • Pengwin
  • Alpine WSL

Configuración de tu versión de WSL

Es posible que tengas que habilitar Linux para trabajar con la versión 2 de WSL. Si es así, puedes hacerlo siguiendo las instrucciones a continuación.

En una consola de PowerShell:

  1. Enumera las versiones de Linux que tienes instaladas ejecutando wsl -l o wsl --list.
  2. Una vez que tengas la lista, copia el nombre de la distribución que quieres ejecutar con WSL2 y ejecuta wsl --set-version <Distro> 2, reemplazando <Distro> con el nombre que copiaste anteriormente.
  3. Confirma que el comando fue exitoso ejecutando wsl -l -v o wsl --list --verbose. Este comando devolverá una lista completa de distribuciones de WSL y la versión que está utilizando cada distribución.
Setting WSL Linux distro

También puedes configurar tu versión predeterminada de WSL para cualquier distribución que instales en el futuro como WSL2 ejecutando wsl --set-default-version 2

Iniciando WSL

Para empezar a usar WSL, abre una terminal de PowerShell y escribe wsl. Si has configurado WSL correctamente, ingresarás a una terminal bash ejecutándose en la distribución WSL de tu elección. Desde aquí, puedes ejecutar cualquier comando de Linux que desees.

A continuación, encontrarás una referencia a todas las opciones que wsl.exe proporciona al iniciar.

Command Explanation Example
exec, -e Will run command using without using default shell wsl -e curl google.com
Passes anything after this parameter to default shell. Leaving the operator out will also work. wsl — curl google.com, wsl curl google.com
distribution, -d Opens a terminal in the specified distribution’s shell wsl -d Ubuntu-18.04
user, -u Runs WSL command as the specified user as long as user exists on that distro wsl -d Ubuntu-18.04 -u tux_user
export Exports the specified distribution to a tar file on your local system. wsl –export Ubuntu ./Test-Ubuntu.tar
import [–version] Imports a tar file as a new WSL distribution. Can specify WSL version with the –version option wsl –import Test-Ubuntu C:\data\Test-Ubuntu .\Test-Ubuntu.tar
list, -l [Options] wsl –list
all List all installed WSL distributions wsl -l –all
running List only WSL distributions that are currently running wsl -l –running
quiet, -q Only show WSL distribution names wsl -l -q
verbose, -v Show detailed information about all WSL distributions wsl -l -v
set-default, -s Sets the specified WSL distribution as the default distribution for WSL commands. wsl -s Test-Ubuntu
set-default-version Changes the default WSL version for all new distributions installed to that system wsl –set-default-version 2
set-version Changes the WSL version of the specified distribution wsl –set-version Test-Ubuntu 2
shutdown Immediately terminates all running WSL distributions wsl –shutdown
terminate, -t Terminates the specified WSL distribution wsl -t Test-Ubuntu
unregister Unregisters the specified WSL distribution wsl –unregister Test-Ubuntu
help Display information about using WSL wsl –help

Una vez que te sientas cómodo usando estos interruptores, descubrirás que ejecutar y gestionar aplicaciones a través de WSL es mucho más fácil que gestionar máquinas virtuales de Linux por tu cuenta.

Consejo rápido: Descubre todas las banderas y argumentos para WSL ejecutando wsl --help.

Cuando hayas terminado, escribe exit para volver atrás a la terminal de PowerShell.

Compartir recursos de Windows/Linux a través de WSL

Una de las mejores partes de WSL es que puede compartir recursos de Windows y Linux entre sí. En este momento, puedes compartir sistemas de archivos, variables de entorno, recursos de red y herramientas de línea de comandos como cmd y PowerShell.

Todos los ejemplos que verás en esta sección son a través de la distribución de Linux Ubuntu de WSL. Tu experiencia puede variar si has elegido descargar una distribución diferente.

Compartir sistemas de archivos

El sistema de archivos es una de las cosas más útiles para compartir con WSL. WSL te permite trabajar con ambos sistemas de archivos como si fueran uno solo.

El sistema de archivos de Windows 10 se monta como un directorio en Linux mientras que el sistema de archivos de Linux se montará como una carpeta en Windows.

Encontrar el sistema de archivos de Linux desde Windows con variables de entorno

Cuando instalas una distribución de Linux con WSL, a veces agregará una variable de entorno de Windows. En el caso de la distribución de Ubuntu de WSL, creará una variable de entorno llamada UBUNTU_HOME. Esta variable de entorno apunta al directorio de Linux /home/ubuntu tanto desde Windows como desde WSL Ubuntu.

La ruta definida en UBUNTU_HOME se puede utilizar para ejecutar scripts que utilicen recursos entre ellos, o establecer una ubicación predeterminada para el terminal de Windows (se cubrirá más adelante).

Inspecting the WSL UBUNTU_HOME environment variable

Otras distribuciones pueden definir una variable de entorno similar. Inspecciona las variables de entorno de Windows con el comando PowerShell Get-ChildItem -Path $Env:\ después de instalar una nueva distribución de Linux para ver si se ha agregado alguna.

Este atajo de variable de entorno es útil si deseas poner todo en el directorio /home/ubuntu. Pero profundicemos un poco más en cómo llegó allí y cómo más puedes acceder a él.

Encontrar el sistema de archivos de Linux desde Windows a través de la carpeta de paquetes de la Tienda Microsoft

No todas las distribuciones de WSL están garantizadas para venir con una forma fácil de referenciarlas. Es importante que aprendas cómo encontrar el sistema de archivos de Linux de una manera alternativa.

Dado que la mayoría de las distribuciones de Linux de WSL se instalarán desde la tienda de Microsoft, puedes buscar el sistema de archivos de Linux en el mismo lugar que otras aplicaciones de la tienda de Windows. Navega hasta %USERPROFILE%\AppData\Local\Packages\ para encontrar el directorio donde van tus aplicaciones de la tienda de Windows. Luego toma el control de la carpeta ya que generalmente está protegida por defecto.

Verás muchas subcarpetas en la carpeta de paquetes donde puede estar presentado el sistema de archivos de tu distribución de Linux. La distro de WSL Ubuntu, por ejemplo, estaba bajo la carpeta CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc para mí.

Si navegas dentro de la carpeta de paquetes, encontrarás el sistema de archivos de Linux. Para WSL Ubuntu, se encuentra en la carpeta LocalState\rootfs. Este es el directorio raíz de tu distro de Linux.

Linux filesystem under %USERPROFILE%/AppData/Local/Packages/

Encontrar el Sistema de Archivos de Windows desde Linux

Para encontrar el sistema de archivos de Windows 10 desde Linux, abre WSL en Windows. WSL abrirá entonces una terminal bash. Esta terminal bash se iniciará en tu directorio UBUNTU_HOME por defecto.

También puedes encontrar la raíz de tus volúmenes de almacenamiento de Windows. Cada una de tus unidades de letras de Windows (C, D, E, etc.) se trata como una unidad montada desde el sistema de archivos de Linux de WSL. Encontrarás cada volumen montado como /mnt/c, /mnt/d, etc., siempre y cuando tengas privilegios de root.

Bash equivalent of running Get-ChildItem C:\Windows\System32 | Select-Object -First 5 running on WSL

El Sistema de Archivos de WSL2

Navegar por el sistema de archivos de WSL es bastante sencillo. Cualquiera que no esté familiarizado con la estructura de un sistema de archivos de Linux apreciará poder navegar por él con el Explorador de Windows. Pero si quieres cambiar a WSL2, va a ser un poco más complicado.

WSL2 cambia cómo funciona todo bajo el capó para compartir sistemas de archivos. Para empezar, el sistema de archivos ahora es un disco duro virtual en formato vhdx en lugar de un directorio.

Puedes encontrar el archivo vhdx bajo %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState para una distribución de Ubuntu en WSL.

Notarás que los archivos VHDX se pueden montar en Windows con la herramienta Administrador de discos. Sin embargo, los discos virtuales no se pueden montar mientras la distribución de WSL esté registrada.

Compartir variables de entorno

Las variables de entorno son una parte crucial de cualquier sistema operativo, lo que facilita la referencia a binarios y ejecutables en cualquier parte de tus aplicaciones.

Antes de Windows 10 build 17063, la única variable de entorno compartida entre Windows 10 y WSL Linux era la variable PATH. Desde entonces, es posible compartir variables de entorno usando la variable de entorno WSLENV.

Usar la variable de entorno WSLENV para compartir otras variables de entorno puede sentirse un poco meta. Para compartir variables de entorno entre plataformas, en realidad tienes que establecer variables de entorno dentro de otra variable de entorno.

Resumen

Compartir variables de entorno es un proceso de tres pasos que se detalla a continuación. La única diferencia importante al compartir entre Windows/Linux es el argumento del interruptor utilizado (referencia completa abajo).

  1. Definir variable de entorno en Windows o Linux.
  2. Establecer la variable de entorno WSLENV igual a la variable de entorno previamente definida seguida de un argumento de interruptor (para la traducción de rutas).
  3. Leer la variable de entorno en Windows o Linux.

Opciones de Compartir

Puede hacer que las variables estén disponibles de cuatro formas diferentes dependiendo de en qué plataforma desea que aparezca la variable de entorno utilizando interruptores (tabla mostrada abajo).

  • Sistema de archivos de Windows solo disponible desde él mismo
  • Sistema de archivos de WSL solo disponible desde WSL
  • Sistema de archivos de WSL disponible tanto en WSL Linux como en Windows
  • Sistema de archivos de Windows disponible tanto en WSL Linux como en Windows
Flag Explanation
/p Single path. A variable set with this will be translated between the Windows and WSL Linux and made available to both.
/l List of paths. Similar to /p, except it can accept more than one path. On Windows, this list will be delimited by semicolons while on WSL Linux it will be delimited by colons.
/u Unix path. A path set with this flag can only be accessed when invoking WSL Linux from Windows. Can be used with either the /p or /l flags
/w Windows path. A path set with this flag can only be accessed when invoking Windows from WSL Linux. Can be used with either the /p or /l flags

Traducción de Rutas

La principal razón para compartir variables de entorno es para la traducción de rutas. Como es posible que ya sepa, Windows tiene carpetas de perfil de usuario mientras que Linux tiene directorios de perfil de usuario, por ejemplo. Cada usuario tiene una “carpeta de inicio” predeterminada como C:\Users\<username> en Windows y /home/<username> en Linux.

Usando los interruptores /p y /l, el WSL traducirá estas rutas de carpeta entre plataformas.

Compartir y Traducir Rutas de Windows con Linux

Puedes compartir una sola ruta o múltiples rutas a la vez usando los interruptores /p y /l.

En un símbolo del sistema de Windows y con una variable de entorno de Windows definida llamada DESKTOP, asigna un valor de DESKTOP/p a la variable WSLENV. Esto te permite acceder a ella desde WSL Linux. Puedes ver un ejemplo abajo.

Setting variables in Windows and accessing in Linux

El mismo procedimiento exacto se puede realizar para múltiples rutas a la vez usando el interruptor /l.

Compartir y Traducir Rutas de Linux con Windows

Para compartir y traducir la ruta de Linux con Windows es el mismo procedimiento que en Windows aunque utilizando comandos específicos de Linux para configurar variables de entorno.

Para obtener una visión más profunda sobre el intercambio de variables de entorno, consulta, este artículo de Microsoft.

Compartir Recursos de Red

El componente de red es otro recurso útil para compartir entre Windows y WSL Linux.

Interfaces de Red Físicas vs. Virtualizadas

En WSL2, las interfaces de red están virtualizadas. Las interfaces de red virtualizadas significan que las instancias de red de WSL2 pueden tener configuraciones de IP diferentes a sus contrapartes de Windows 10.

En el momento de escribir esto, las direcciones IP para WSL2 Linux utilizan Traducción de Dirección de Red (NAT) para acceder a recursos de red en Windows, aunque Microsoft ha mencionado que la eliminación de NAT es una de las principales tareas pendientes para solucionar.

Same comparison from earlier, but against a WSL2 distro

Resolución de DNS del Cliente

WSL seguirá generando tanto los archivos /etc/resolv.conf como /etc/hosts para permitir la resolución de DNS. Mientras no anules explícitamente ese comportamiento en /etc/wsl.conf, la resolución de DNS del cliente continuará funcionando como se espera.

Aprenderás más sobre el archivo wsl.conf más adelante en la publicación.

Usar PowerShell y Bash juntos

Una de las características más geniales de WSL es la capacidad de pasar información de manera transparente hacia y desde PowerShell y Bash en WSL.

PowerShell –> Bash

Dado que el ejecutable de WSL acepta entrada desde el canalización, puedes llamar al comando wsl.exe dentro de PowerShell y aceptar stdin. Esto te permite usar WSL para pasar objetos enteros desde PowerShell al WSL que luego se procesan con el terminal bash. Puedes ver un ejemplo a continuación.

Passing PowerShell to grep

Bash –> PowerShell/Cmd

También puedes pasar información desde bash en el WSL a PowerShell y cmd con la misma facilidad. A continuación, puedes ver un ejemplo de cómo ejecutar el comando ls de Linux y pasar la salida al cmdlet Select-Object de PowerShell mediante la canalización.

Passing Bash output to PowerShell

También puedes llamar a algunas utilidades de cmd de Windows desde el WSL y pasar la salida de vuelta a Linux siempre y cuando ambos comandos estén en la ruta del sistema.

Recuerda que el WSL conoce cuál es la ruta del sistema en ambos lados porque tiene acceso a la variable de entorno PATH de Windows de forma predeterminada

A continuación, puedes ver que puedes ejecutar ipconfig, que es un comando de Windows, desde dentro del WSL y pasar esa salida al comando grep de Linux. También puedes ver lo contrario, llamando al comando de Linux which y pasando la salida al comando de Windows ipconfig.

Executing a Windows command in Linux

Problemas de traducción

Hay algunas advertencias al pasar la salida del comando de un lado a otro entre bash y PowerShell.

Un gran problema es cómo PowerShell y bash devuelven la información. PowerShell es un lenguaje de programación orientado a objetos mientras que bash es una herramienta de manipulación de cadenas. Cualquier objeto de PowerShell que se canalice a bash se aplanará como una cadena. Por el contrario, cualquier salida de bash que se canalice a PowerShell se convertirá en un objeto de cadena.

Puedes sortear el comportamiento en cierta medida convirtiendo o lanzando explícitamente tipos de objetos en PowerShell como en el ejemplo a continuación. Pero si esperas pasar objetos entre PowerShell y WSL sin ningún trabajo adicional, te llevarás una decepción.

Problems passing objects

Al convertir la fecha de bash como la clase [datetime] en PowerShell, ahora tenemos un objeto válido de PowerShell que podemos usar en nuestro script. Si estás escribiendo scripts que necesitan ir de Windows a WSL y viceversa, es posible hacerlo con un poco de ajuste al código.

Instalar un subsistema de Windows para GUI de Linux con Xfce4

Cuando las herramientas de línea de comandos no son suficientes, es hora de recurrir a las interfaces gráficas de usuario (GUI). Si necesitas ejecutar una utilidad gráfica en WSL, explorar una distribución personalizada, o aún no estás familiarizado con bash, puedes instalar una GUI de Linux.

Xfce

Linux tiene muchos entornos de escritorio disponibles. Uno de los más comunes para configurar en WSL se llama Xfce. En el momento de escribir esto, Xfce está en la versión 4. Hay otros entornos de escritorio disponibles, pero en este artículo aprenderás cómo configurar Xfce4.

xRDP

Cuando tienes configurado un entorno de escritorio de Linux, necesitarás un servicio que comprenda el protocolo RDP. En este artículo, nos enfocaremos en el servidor xRDP. xRDP es un servidor RDP de código abierto para Linux que te permite usar clientes RDP para conectarte a Linux de la misma manera que lo harías con hosts de Windows.

Configuración

Para acceder a una GUI de Linux desde Windows con Xfce4 y xRDP, sigue las instrucciones a continuación. En una terminal de WSL:

  1. Descarga e instala Xfce4 – Descarga e instala Xfce4 utilizando el comando sudo apt-get -y install xfce4 && sudo apt-get -y install xubuntu-desktop. Esto llevará un tiempo. Espera.
  2. Instala el servidor xRDP – Descarga e instala xRDP ejecutando sudo apt-get -y install xrdp.
  3. Configura xRDP para xfce4 – echo xfce4-session > ~/.xsession
  4. Reinicia xRDPsudo service xrdp restart
  5. Encuentra la dirección IP de la distro de WSLifconfig | grep inet

En este punto, deberías poder abrir una sesión de RDP desde Windows 10. Abre la ventana de conexión de escritorio remoto utilizando mstsc y proporciona la dirección IP de Linux encontrada en el paso #5.

Si todo va bien, puedes abrir una conexión de RDP a la distro de Linux que se está ejecutando en tu sistema operativo Windows, como se muestra a continuación.

Windows Subsystem for Linux GUI with Xfce4 and xRDP

Consejos y Trucos

Ahora que conoces los conceptos básicos de WSL y cómo usarlo, ¿qué sigue? Afortunadamente, hay muchas herramientas que están diseñadas para WSL o funcionan bien con él.

Configurando Elementos de Configuración de WSL al Iniciar con wsl.conf

A configuration file exists in the WSL at /etc/wsl.conf. This file contains configuration settings that run every time the WSL distro is started. When the wsl.conf file exists, WSL will ingest any setting in this file every time the Linux distro is started.

Existen varias secciones dentro del archivo wsl.conf que puedes configurar.

  • Automontaje – Montar unidades desde Windows al inicio
  • Red – Generar resolv.conf o el archivo hosts
  • Interop – Habilitar o deshabilitar la interoperabilidad con Windows

Para obtener más detalles sobre el archivo wsl.conf, consulta la página de Configuración de Inicio de WSL de Microsoft Configurar la Configuración de Inicio de WSL.

Desarrollando en WSL con Visual Studio Code (VS Code)

VS Code parece integrarse con todo y WSL no es una excepción. Desde dentro de VS Code, puedes configurar un espacio de trabajo en tu distro de WSL pero manipularlo completamente con VS Code en Windows. ¡Ni siquiera necesitas tener una terminal en ejecución!

Para configurar VS Code en Windows para que funcione con WSL, primero obviamente necesitarás tener instalado VS Code para Windows. Asegúrate también de tener instalada la extensión de VS Code Remote – WSL.

Una vez que hayas instalado la extensión, ahora puedes conectarte a ella abriendo una terminal de WSL y ejecutando code <workspace>. <Workspace> es el directorio desde donde te gustaría ejecutar VS Code. VS Code entonces detectará que estás en una distribución de WSL, abrirá una ventana y establecerá una conexión al espacio de trabajo.

Confirma que funcionó al notar el ícono de conexión de WSL en la esquina inferior izquierda de VS Code. Deberías ver que tiene el nombre de tu distribución de WSL.

Working with WSL and Visual Studio Code

Incluso puedes usar la terminal integrada para interactuar directamente con el espacio de trabajo de WSL. No es necesario abrir una ventana separada para los comandos de git bash.

Agregando el Subsistema de Windows para Linux al Terminal de Windows

Otro caso de uso útil de WSL es agregar la consola de WSL al Terminal de Windows.

Desde dentro del Terminal de Windows, puedes agregar cada distribución de WSL en su propia pestaña. También puedes personalizar la apariencia de cada pestaña para que no te pierdas.

Si estás utilizando una distribución de WSL que establece una variable de entorno para el directorio de usuario, como UBUNTU_HOME, también puedes configurar eso como el directorio de inicio para tu terminal.

Checking the date in PowerShell and Bash

Si deseas un recorrido completo en video sobre cómo configurar WSL para trabajar con Windows Terminal, echa un vistazo al video tutorial de TechSnips a continuación.

Pensamientos de cierre

Deja de luchar con llamadas de restablecimiento de contraseña y bloqueos de cuentas en Active Directory. Obtén una prueba GRATUITA de Specops uReset.

Microsoft lanzó WSL para permitir a los desarrolladores de Linux la capacidad de desarrollar en Windows. Hasta ahora, WSL ha sido un paso en la dirección correcta.

Parece que WSL va a ser un componente crucial de la nueva estrategia amigable con el código abierto de Microsoft. Si Microsoft va a competir con Apple para ser los dispositivos en los que los desarrolladores escriben su código, va a ser una batalla cuesta arriba. Pero WSL es una carta fuerte para jugar.

WSL aporta muchos beneficios bienvenidos para los desarrolladores, como:

  • Considerablemente más ligero que ejecutar máquinas virtuales de Linux locales
  • Elimina la sobrecarga de instalar y gestionar un hipervisor
  • No más necesidad de discos duros particionados
  • No más complicados gestores de arranque de grub

WSL simplemente se enciende y se ejecuta para que todos podamos programar felices para siempre.

Source:
https://adamtheautomator.com/windows-subsystem-for-linux/