Interoperabilidad de Windows con LinuxWindows interoperability with Linux

El subsistema de Windows para Linux (WSL) está mejorando continuamente la integración entre Windows y Linux.The Windows Subsystem for Linux (WSL) is continuously improving integration between Windows and Linux. Se puede hacer lo siguiente:You can:

  • Ejecuta las herramientas de Windows (por ejemplo, notepad.exe) desde una línea de comandos de Linux (por ejemplo, Ubuntu).Run Windows tools (ie. notepad.exe) from a Linux command line (ie. Ubuntu).
  • Ejecuta herramientas de Linux (por ejemplo, grep) desde una línea de comandos de Windows (por ejemplo, PowerShell).Run Linux tools (ie. grep) from a Windows command line (ie. PowerShell).
  • Comparte las variables de entorno entre Linux y Windows.Share environment variables between Linux and Windows. (Compilación 17063 o posterior)(Build 17063+)

Nota

Si ejecutas Creators Update (octubre de 2017, compilación 16299) o la Actualización de aniversario (agosto de 2016, compilación 14393), ve a las versiones anteriores de Windows 10.If you're running Creators Update (Oct 2017, Build 16299) or Anniversary Update (Aug 2016, Build 14393), jump to the Earlier versions of Windows 10.

Ejecución de herramientas de Linux desde una línea de comandos de WindowsRun Linux tools from a Windows command line

Ejecuta los archivos binarios de Linux desde el símbolo del sistema de Windows (CMD) o PowerShell mediante wsl <command> (o wsl.exe <command>).Run Linux binaries from the Windows Command Prompt (CMD) or PowerShell using wsl <command> (or wsl.exe <command>).

Por ejemplo:For example:

C:\temp> wsl ls -la
<- contents of C:\temp ->

Los archivos binarios se invocan de esta manera:Binaries invoked in this way:

  • Usan el mismo directorio de trabajo que el símbolo del sistema actual de CMD o PowerShell.Use the same working directory as the current CMD or PowerShell prompt.
  • Se ejecutan como usuario predeterminado de WSL.Run as the WSL default user.
  • Tienen los mismos derechos administrativos de Windows que el terminal y el proceso de llamada.Have the same Windows administrative rights as the calling process and terminal.

El comando de Linux que sigue a wsl (o wsl.exe) se controla como cualquier comando que se ejecute en WSL.The Linux command following wsl (or wsl.exe) is handled like any command run in WSL. Funcionan cosas como sudo, canalizaciones y redireccionamientos de archivos.Things such as sudo, piping, and file redirection work.

Ejemplo de uso de sudo para actualizar la distribución de Linux predeterminada:Example using sudo to update your default Linux distribution:

C:\temp> wsl sudo apt-get update

Después de ejecutar este comando, se mostrará el nombre de usuario predeterminado de la distribución de Linux y se te pedirá la contraseña.Your default Linux distribution user name will be listed after running this command and you will be asked for your password. Después de escribir la contraseña correctamente, la distribución descargará las actualizaciones.After entering your password correctly, your distribution will download updates.

Combinación de comandos de Windows y LinuxMixing Linux and Windows commands

Estos son algunos ejemplos de la combinación de comandos de Linux y Windows mediante PowerShell.Here are a few examples of mixing Linux and Windows commands using PowerShell.

Para usar el comando de Linux ls -la para enumerar archivos y el comando de PowerShell findstr para filtrar los resultados de las palabras que contienen "git", combina los comandos siguientes:To use the Linux command ls -la to list files and the PowerShell command findstr to filter the results for words containing "git", combine the commands:

wsl ls -la | findstr "git"

Para usar el comando de PowerShell dir para enumerar archivos y el comando de Linux grep para filtrar los resultados de las palabras que contienen "git", combina los comandos siguientes:To use the PowerShell command dir to list files and the Linux command grep to filter the results for words containing "git", combine the commands:

C:\temp> dir | wsl grep git

Para usar el comando de Linux ls -la para enumerar archivos y el comando de PowerShell > out.txt para imprimir esa lista en un archivo de texto denominado "out.txt", combina los comandos siguientes:To use the Linux command ls -la to list files and the PowerShell command > out.txt to print that list to a text file named "out.txt", combine the commands:

C:\temp> wsl ls -la > out.txt

Los comandos pasados a wsl.exe se reenvían al proceso de WSL sin modificaciones.The commands passed into wsl.exe are forwarded to the WSL process without modification. Las rutas de acceso de archivo deben especificarse en el formato de WSL.File paths must be specified in the WSL format.

Para usar el comando de Linux ls -la para enumerar los archivos de la ruta de acceso del sistema de archivos de Linux /proc/cpuinfo mediante PowerShell, utiliza el siguiente comando:To use the Linux command ls -la to list files in the /proc/cpuinfo Linux file system path, using PowerShell:

C:\temp> wsl ls -la /proc/cpuinfo

Para usar el comando de Linux ls -la para enumerar los archivos de la ruta de acceso del sistema de archivos de Windows C:\Program Files mediante PowerShell, utiliza el siguiente comando:To use the Linux command ls -la to list files in the C:\Program Files Windows file system path, using PowerShell:

C:\temp> wsl ls -la "/mnt/c/Program Files"

Ejecución de herramientas de Windows desde LinuxRun Windows tools from Linux

WSL puede ejecutar herramientas de Windows directamente desde la línea de comandos de WSL mediante [tool-name].exe.WSL can run Windows tools directly from the WSL command line using [tool-name].exe. Por ejemplo, notepad.exe.For example, notepad.exe.

Las aplicaciones que se ejecutan de esta manera tienen las siguientes propiedades:Applications run this way have the following properties:

  • Conservan el directorio de trabajo como el símbolo del sistema de WSL (en la mayoría de los casos; las excepciones se explican a continuación).Retain the working directory as the WSL command prompt (for the most part -- exceptions are explained below).
  • Tienen los mismos derechos de permiso que el proceso de WSL.Have the same permission rights as the WSL process.
  • Se ejecutan como el usuario activo de Windows.Run as the active Windows user.
  • Aparecen en el administrador de tareas de Windows como si se ejecutaran directamente desde el símbolo del sistema de CMD.Appear in the Windows Task Manager as if directly executed from the CMD prompt.

Los archivos ejecutables de Windows que se ejecutan en WSL se administran de forma similar a los ejecutables nativos de Linux; las canalizaciones, los redireccionamientos e incluso los procesos en segundo plano funcionan según lo previsto.Windows executables run in WSL are handled similarly to native Linux executables -- piping, redirects, and even backgrounding work as expected.

Para ejecutar la herramientas de Windows ipconfig.exe, usa la herramienta de Linux grep para filtrar los resultados de "IPv4", y usa la herramienta de Linux cut para quitar los campos de columna. Desde una distribución de Linux (por ejemplo, Ubuntu), escribe lo siguiente:To run the Windows tool ipconfig.exe, use the Linux tool grep to filter the "IPv4" results, and use the Linux tool cut to remove the column fields, from a Linux distribution (for example, Ubuntu) enter:

ipconfig.exe | grep IPv4 | cut -d: -f2

Vamos a probar un ejemplo de combinación de comandos de Windows y Linux.Let's try an example mixing Windows and Linux commands. Abre tu distribución de Linux (por ejemplo, Ubuntu) y crea el archivo de texto touch foo.txt.Open your Linux distribution (ie. Ubuntu) and create a text file: touch foo.txt. Ahora usa el comando de Linux ls -la para enumerar los archivos directos y sus detalles de creación, además de la herramienta de Windows PowerShell findstr.exe para filtrar los resultados, de modo que solo se muestre el archivo foo.txt en los resultados:Now use the Linux command ls -la to list the direct files and their creation details, plus the Windows PowerShell tool findstr.exe to filter the results so only your foo.txt file shows in the results:

ls -la | findstr.exe foo.txt

Las herramientas de Windows deben incluir la extensión de archivo, coincidir con el caso del archivo y ser ejecutables.Windows tools must include the file extension, match the file case, and be executable. Los no ejecutables, incluidos los scripts por lotes yNon-executables including batch scripts. comandos nativos de CMD como dir, se pueden ejecutar con el comando cmd.exe /C.CMD native commands like dir can be run with cmd.exe /C command.

Por ejemplo, para enumerar el contenido del directorio C:\ del sistema de archivos de Windows, escribe:For example, list the contents of your Windows files system C:\ directory, by entering:

cmd.exe /C dir

O bien usa el comando ping para enviar una solicitud de eco al sitio web microsoft.com:Or use the ping command to send an echo request to the microsoft.com website:

ping.exe www.microsoft.com

Los parámetros se pasan al archivo binario de Windows sin modificar.Parameters are passed to the Windows binary unmodified. Por ejemplo, el siguiente comando abrirá C:\temp\foo.txt en notepad.exe:As an example, the following command will open C:\temp\foo.txt in notepad.exe:

notepad.exe "C:\temp\foo.txt"

También funcionará lo siguiente:This will also work:

notepad.exe C:\\temp\\foo.txt

Uso compartido de variables de entorno entre Windows y WSLShare environment variables between Windows and WSL

WSL y Windows comparten WSLENV, una variable de entorno especial creada para unir las distribuciones de Windows y Linux que se ejecutan en WSL.WSL and Windows share a special environment variable, WSLENV, created to bridge Windows and Linux distributions running on WSL.

Propiedades de la variable WSLENV:Properties of WSLENV variable:

  • Se comparte; existe en entornos de Windows y WSL.It is shared; it exists in both Windows and WSL environments.
  • Se trata de una lista de variables de entorno que se pueden compartir entre Windows y WSL.It is a list of environment variables to share between Windows and WSL.
  • Puede formatear variables de entorno para que funcionen correctamente en Windows y WSL.It can format environment variables to work well in Windows and WSL.
  • Puede ayudar en el flujo entre WSL y Win32.It can assist in the flow between WSL and Win32.

Nota

Antes de la versión 17063, la única variable de entorno de Windows a la que podía tener acceso WSL era PATH, por lo que se podían iniciar ejecutables de Win32 desde WSL.Prior to 17063, only Windows environment variable that WSL could access was PATH (so you could launch Win32 executables from under WSL). A partir de 17063, WSLENV comienza a ser compatible.Starting in 17063, WSLENV begins being supported. WSLENV distingue entre mayúsculas y minúsculas.WSLENV is case sensitive.

Marcas de WSLENVWSLENV flags

Hay cuatro marcas disponibles en WSLENV que pueden influir en la forma en que se traduce la variable de entorno.There are four flags available in WSLENV to influence how the environment variable is translated.

Marcas WSLENV:WSLENV flags:

  • /p: traduce la ruta de acceso entre las rutas de acceso de estilo de WSL/Linux y las rutas de acceso de Win32./p - translates the path between WSL/Linux style paths and Win32 paths.
  • /l: indica que la variable de entorno es una lista de rutas de acceso./l - indicates the environment variable is a list of paths.
  • /u: indica que esta variable de entorno solo debe incluirse al ejecutar WSL desde Win32./u - indicates that this environment variable should only be included when running WSL from Win32.
  • /w: indica que esta variable de entorno solo debe incluirse al ejecutar Win32 desde WSL./w - indicates that this environment variable should only be included when running Win32 from WSL.

Las marcas se pueden combinar según sea necesario.Flags can be combined as needed.

Obtenga más información sobre WSLENV, incluidas las preguntas más frecuentes y ejemplos de configuración del valor de WSLENV en una concatenación de otras variables de entorno predefinidas, cada una con una barra diagonal como sufijo seguida de marcas para especificar cómo se debe traducir el valor y pasar las variables con un script.Read more about WSLENV, including FAQs and examples of setting the value of WSLENV to a concatenation of other pre-defined environment vars, each suffixed with a slash followed by flags to specify how the value should be translated and passing variables with a script. En este artículo también se incluye un ejemplo para configurar un entorno de desarrollo con el lenguaje de programación Go, configurado para compartir una variable GOPATH entre WSL y Win32.This article also includes an example for setting up a dev environment with the Go programming language, configured to share a GOPATH between WSL and Win32.

Deshabilitación de la interoperabilidadDisable interoperability

Los usuarios pueden deshabilitar la capacidad de ejecutar herramientas de Windows para una única sesión de WSL mediante la ejecución del siguiente comando como raíz:Users may disable the ability to run Windows tools for a single WSL session by running the following command as root:

echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop

Para volver a habilitar los archivos binarios de Windows, sal de todas las sesiones de WSL y vuelve a ejecutar bash.exe o ejecuta el siguiente comando como raíz:To re-enable Windows binaries, exit all WSL sessions and re-run bash.exe or run the following command as root:

echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop

La deshabilitación de la interoperabilidad no se conservará entre sesiones de WSL: la interoperabilidad se habilitará de nuevo cuando se inicie una nueva sesión.Disabling interop will not persist between WSL sessions -- interop will be enabled again when a new session is launched.

Versiones anteriores de Windows 10Earlier versions of Windows 10

Hay varias diferencias para los comandos de interoperabilidad en las versiones anteriores de Windows 10.There are several differences for the interoperability commands on earlier Windows 10 versions. Si ejecutas una versión de Creators Update (octubre de 2017, compilación 16299) o la Actualización de aniversario (agosto de 2016, compilación 14393) de Windows 10, te recomendamos actualizar a la versión más reciente de Windows. Pero si esto no es posible, a continuación describimos algunas de las diferencias en la interoperabilidad.If you're running a Creators Update (Oct 2017, Build 16299), or Anniversary Update (Aug 2016, Build 14393) version of Windows 10, we recommend you update to the latest Windows version, but if that's not possible, we have outlined some of the interop differences below.

Resumen:Summary:

  • bash.exe se ha reemplazado por wsl.exe.bash.exe has been replaced with wsl.exe.
  • La opción -c para ejecutar un único comando no es necesaria con wsl.exe.-c option for running a single command isn't needed with wsl.exe.
  • La ruta de acceso de Windows se incluye en $PATH de WSL.Windows path is included in the WSL $PATH.
  • El proceso para deshabilitar la interoperabilidad no ha cambiado.The process for disabling interop is unchanged.

Los comandos de Linux se pueden ejecutar desde el símbolo del sistema de Windows o desde PowerShell, pero para las primeras versiones de Windows, puede que tengas que usar el comando bash.Linux commands can be run from the Windows Command Prompt or from PowerShell, but for early Windows versions, you man need to use the bash command. Por ejemplo:For example:

C:\temp> bash -c "ls -la"

Cosas como las entradas, las canalizaciones y los redireccionamientos de archivos funcionan según lo esperado.Things such as input, piping, and file redirection work as expected.

Los comandos de WSL pasados a bash -c se reenvían al proceso de WSL sin modificaciones.The WSL commands passed into bash -c are forwarded to the WSL process without modification. Las rutas de acceso de archivo deben especificarse en el formato de WSL y se debe tener cuidado al escapar caracteres relevantes.File paths must be specified in the WSL format and care must be taken to escape relevant characters. Ejemplo:Example:

C:\temp> bash -c "ls -la /proc/cpuinfo"

O bien...Or...

C:\temp> bash -c "ls -la \"/mnt/c/Program Files\""

Al llamar a una herramienta de Windows desde una distribución de WSL en una versión anterior de Windows 10, deberás especificar la ruta de acceso del directorio.When calling a Windows tool from a WSL distribution in an earlier version of Windows 10, you will need to specify the directory path. Por ejemplo, desde la línea de comandos de WSL, escribe:For example, from your WSL command line, enter:

/mnt/c/Windows/System32/notepad.exe

En WSL, estos ejecutables se tratan de forma similar a los ejecutables nativos de Linux.In WSL, these executables are handled similar to native Linux executables. Esto significa que la adición de directorios a la ruta de acceso de Linux y la canalización entre comandos funciona según lo previsto.This means adding directories to the Linux path and piping between commands works as expected. Por ejemplo:For example:

export PATH=$PATH:/mnt/c/Windows/System32

O bienOr

ipconfig.exe | grep IPv4 | cut -d: -f2

El archivo binario de Windows debe incluir la extensión de archivo, coincidir con el caso del archivo y ser ejecutable.The Windows binary must include the file extension, match the file case, and be executable. Los no ejecutables, incluidos los scripts por lotes y comandos como dir, se pueden ejecutar con el comando /mnt/c/Windows/System32/cmd.exe /C.Non-executables including batch scripts and command like dir can be run with /mnt/c/Windows/System32/cmd.exe /C command. Por ejemplo:For example:

/mnt/c/Windows/System32/cmd.exe /C dir

Recursos adicionalesAdditional resources