Interopérabilité Windows avec LinuxWindows interoperability with Linux

Le sous-système Windows pour Linux (WSL) améliore en permanence l’intégration entre Windows et Linux.The Windows Subsystem for Linux (WSL) is continuously improving integration between Windows and Linux. Vous pouvez :You can:

  • Exécuter les outils Windows (p. ex. notepad.exe) à partir d’une ligne de commande Linux (p. ex. Ubuntu).Run Windows tools (ie. notepad.exe) from a Linux command line (ie. Ubuntu).
  • Exécuter les outils Linux (p. ex. grep) à partir d’une ligne de commande Windows (p. ex. PowerShell).Run Linux tools (ie. grep) from a Windows command line (ie. PowerShell).
  • Partager des variables d’environnement entre Linux et Windows.Share environment variables between Linux and Windows. (Build 17063+)(Build 17063+)

Notes

Si vous exécutez une version Creators Update (octobre 2017, build 16299) ou la mise à jour anniversaire (août 2016, build 14393), accédez aux versions antérieures 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.

Exécuter les outils Linux à partir d’une ligne de commande WindowsRun Linux tools from a Windows command line

Exécutez des fichiers binaires Linux à partir de l’invite de commandes Windows (CMD) ou de PowerShell en utilisant wsl <command> (ou wsl.exe <command>).Run Linux binaries from the Windows Command Prompt (CMD) or PowerShell using wsl <command> (or wsl.exe <command>).

Par exemple :For example:

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

Les fichiers binaires appelés de cette façon :Binaries invoked in this way:

  • Utilisent le même répertoire de travail que l’invite CMD ou PowerShell en cours.Use the same working directory as the current CMD or PowerShell prompt.
  • Sont exécutés en tant qu’utilisateur par défaut WSL.Run as the WSL default user.
  • Ont les mêmes droits d’administration Windows que le terminal et le processus appelant.Have the same Windows administrative rights as the calling process and terminal.

La commande Linux qui suit wsl (ou wsl.exe) est gérée comme n’importe quelle commande exécutée dans WSL.The Linux command following wsl (or wsl.exe) is handled like any command run in WSL. Des actions comme l’exécution de sudo, la création de canaux et la redirection de fichiers fonctionnent.Things such as sudo, piping, and file redirection work.

Exemple utilisant sudo pour mettre à jour votre distribution Linux par défaut :Example using sudo to update your default Linux distribution:

C:\temp> wsl sudo apt-get update

Votre nom d’utilisateur de distribution Linux par défaut sera listé après l’exécution de cette commande et vous serez invité à entrer votre mot de passe.Your default Linux distribution user name will be listed after running this command and you will be asked for your password. Une fois que vous avez entré correctement votre mot de passe, votre distribution télécharge les mises à jour.After entering your password correctly, your distribution will download updates.

Combinaison de commandes Linux et WindowsMixing Linux and Windows commands

Voici quelques exemples de combinaison de commandes Linux et Windows à l’aide de PowerShell.Here are a few examples of mixing Linux and Windows commands using PowerShell.

Pour utiliser la commande Linux ls -la pour lister les fichiers et la commande PowerShell findstr pour filtrer les résultats avec des mots contenant « git », combinez les commandes suivantes :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"

Pour utiliser la commande PowerShell dir pour lister les fichiers et la commande Linux grep pour filtrer les résultats avec des mots contenant « git », combinez les commandes suivantes :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

Pour utiliser la commande Linux ls -la pour lister les fichiers et la commande PowerShell > out.txt pour imprimer cette liste dans un fichier texte nommé « out.txt », combinez les commandes suivantes :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

Les commandes passées à wsl.exe sont transmises au processus WSL sans modification.The commands passed into wsl.exe are forwarded to the WSL process without modification. Les chemins de fichiers doivent être spécifiés au format WSL.File paths must be specified in the WSL format.

Pour utiliser la commande Linux ls -la pour lister les fichiers dans le chemin du système de fichiers Linux /proc/cpuinfo, à l’aide de PowerShell :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

Pour utiliser la commande Linux ls -la pour lister les fichiers dans le chemin du système de fichiers Windows C:\Program Files, à l’aide de PowerShell :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"

Exécuter des outils Windows à partir de LinuxRun Windows tools from Linux

WSL peut exécuter des outils Windows directement à partir de la ligne de commande WSL à l’aide de [tool-name].exe.WSL can run Windows tools directly from the WSL command line using [tool-name].exe. Par exemple, notepad.exe.For example, notepad.exe.

Les applications exécutées de cette manière ont les propriétés suivantes :Applications run this way have the following properties:

  • Conservent le répertoire de travail en tant qu’invite de commandes WSL (en général, les exceptions sont décrites ci-dessous).Retain the working directory as the WSL command prompt (for the most part -- exceptions are explained below).
  • Ont les mêmes autorisations que le processus WSL.Have the same permission rights as the WSL process.
  • Sont exécutées en tant qu’utilisateur Windows actif.Run as the active Windows user.
  • Apparaissent dans le Gestionnaire des tâches de Windows comme si elles étaient directement exécutées à partir de l’invite CMD.Appear in the Windows Task Manager as if directly executed from the CMD prompt.

Les exécutables Windows exécutés dans WSL sont gérés de la même façon que les exécutables Linux natifs : la création de canaux, les redirections et même le travail en arrière-plan fonctionnent comme prévu.Windows executables run in WSL are handled similarly to native Linux executables -- piping, redirects, and even backgrounding work as expected.

Pour exécuter l’outil Windows ipconfig.exe, utiliser l’outil Linux grep afin de filtrer les résultats « IPv4 », et utiliser l’outil Linux cut afin de supprimer les champs de colonne, à partir d’une distribution Linux (par exemple, Ubuntu), entrez :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

Essayons un exemple combinant des commandes Windows et Linux.Let's try an example mixing Windows and Linux commands. Ouvrez votre distribution Linux (p. ex. Ubuntu) et créez un fichier texte : touch foo.txt.Open your Linux distribution (ie. Ubuntu) and create a text file: touch foo.txt. À présent, utilisez la commande Linux ls -la pour lister les fichiers directs et les détails de leur création, ainsi que l’outil Windows PowerShell findstr.exe pour filtrer les résultats afin que seul votre fichier foo.txt s’affiche dans les résultats :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

Les outils Windows doivent inclure l’extension de fichier, correspondre à la casse de fichier et être exécutables.Windows tools must include the file extension, match the file case, and be executable. Les fichiers non exécutables, dont les scripts de commandes etNon-executables including batch scripts. les commandes natives CMD comme dir, peuvent être exécutés avec la commande cmd.exe /C.CMD native commands like dir can be run with cmd.exe /C command.

Par exemple, listez le contenu du répertoire C:\ de votre système de fichiers Windows, en entrant :For example, list the contents of your Windows files system C:\ directory, by entering:

cmd.exe /C dir

Ou utilisez la commande ping pour envoyer une demande d’écho au site web microsoft.com :Or use the ping command to send an echo request to the microsoft.com website:

ping.exe www.microsoft.com

Les paramètres sont passés au fichier binaire Windows non modifié.Parameters are passed to the Windows binary unmodified. Par exemple, la commande suivante ouvre C:\temp\foo.txt dans notepad.exe :As an example, the following command will open C:\temp\foo.txt in notepad.exe:

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

Cela fonctionne également :This will also work:

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

Partager des variables d’environnement entre Windows et WSLShare environment variables between Windows and WSL

WSL et Windows partagent une variable d’environnement spéciale, WSLENV, créée pour relier les distributions Windows et Linux s’exécutant sur WSL.WSL and Windows share a special environment variable, WSLENV, created to bridge Windows and Linux distributions running on WSL.

Propriétés de la variable WSLENV :Properties of WSLENV variable:

  • Elle est partagée et existe dans les environnements Windows et WSL.It is shared; it exists in both Windows and WSL environments.
  • Il s’agit d’une liste de variables d’environnement à partager entre Windows et WSL.It is a list of environment variables to share between Windows and WSL.
  • Elle peut mettre en forme des variables d’environnement pour fonctionner correctement dans Windows et WSL.It can format environment variables to work well in Windows and WSL.
  • Elle peut faciliter le flux entre WSL et Win32.It can assist in the flow between WSL and Win32.

Notes

Avant la build 17063, la seule variable d’environnement Windows à laquelle WSL pouvait accéder était PATH (par conséquent, vous pouviez lancer des exécutables Win32 sous WSL).Prior to 17063, only Windows environment variable that WSL could access was PATH (so you could launch Win32 executables from under WSL). Avec la build 17063, WSLENV commence à être pris en charge.Starting in 17063, WSLENV begins being supported. WSLENV respecte la casse.WSLENV is case sensitive.

Indicateurs WSLENVWSLENV flags

Quatre indicateurs sont disponibles dans WSLENV pour influencer la manière dont cette variable d’environnement est traduite.There are four flags available in WSLENV to influence how the environment variable is translated.

Indicateurs WSLENV :WSLENV flags:

  • /p : convertit le chemin entre les chemins de style WSL/Linux et les chemins Win32./p - translates the path between WSL/Linux style paths and Win32 paths.
  • /l : indique que la variable d’environnement est une liste de chemins./l - indicates the environment variable is a list of paths.
  • /u : indique que cette variable d’environnement doit être incluse uniquement lors de l’exécution de WSL à partir de Win32./u - indicates that this environment variable should only be included when running WSL from Win32.
  • /w : indique que cette variable d’environnement doit être incluse uniquement lors de l’exécution de Win32 à partir de WSL./w - indicates that this environment variable should only be included when running Win32 from WSL.

Les indicateurs peuvent être combinés en fonction des besoins.Flags can be combined as needed.

Pour en savoir plus sur WSLENV, consultez ce blog. Vous y trouverez notamment des questions fréquentes et des exemples pour définir la valeur de WSLENV avec une concaténation de variables d’environnement prédéfinies, chaque variable ayant pour suffixe une barre oblique suivie d’indicateurs pour spécifier comment la valeur doit être traduite. Vous apprendrez également à passer des variables avec 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. Cet article contient aussi un exemple montrant comment configurer un environnement de développement avec le langage de programmation Go pour partager un GOPATH entre WSL et 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.

Désactiver l’interopérabilitéDisable interoperability

Les utilisateurs peuvent désactiver la possibilité d’exécuter des outils Windows pour une session WSL individuelle en exécutant la commande suivante en tant que racine :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

Pour réactiver les fichiers binaires Windows, fermez toutes les sessions WSL et réexécutez bash.exe, ou exécutez la commande suivante en tant que racine :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 désactivation de l’interopérabilité n’est pas conservée entre les sessions WSL : l’interopérabilité sera réactivée lors du lancement d’une nouvelle session.Disabling interop will not persist between WSL sessions -- interop will be enabled again when a new session is launched.

Versions antérieures de Windows 10Earlier versions of Windows 10

Il existe plusieurs différences pour les commandes d’interopérabilité sur les versions antérieures de Windows 10.There are several differences for the interoperability commands on earlier Windows 10 versions. Si vous exécutez une version Creators Update (octobre 2017, build 16299) ou la mise à jour anniversaire (août 2016, build 14393) de Windows 10, nous vous recommandons d’effectuer une mise à jour vers la dernière version de Windows. Toutefois, si cela n’est pas possible, nous décrivons certaines différences d’interopérabilité ci-dessous.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.

Résumé :Summary:

  • bash.exe a été remplacé par wsl.exe.bash.exe has been replaced with wsl.exe.
  • L’option -c permettant d’exécuter une seule commande n’est pas nécessaire avec wsl.exe.-c option for running a single command isn't needed with wsl.exe.
  • Le chemin Windows est inclus dans la variable WSL $PATH.Windows path is included in the WSL $PATH.
  • Le processus de désactivation de l’interopérabilité est inchangé.The process for disabling interop is unchanged.

Les commandes Linux peuvent être exécutées à partir de l’invite de commandes Windows ou de PowerShell, mais pour les versions antérieures de Windows, vous pouvez être amené à utiliser la commande 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. Par exemple :For example:

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

Des actions comme les entrées, la création de canaux et la redirection de fichiers fonctionnent comme prévu.Things such as input, piping, and file redirection work as expected.

Les commandes WSL passées à bash -c sont transmises au processus WSL sans modification.The WSL commands passed into bash -c are forwarded to the WSL process without modification. Les chemins de fichiers doivent être spécifiés au format WSL et des précautions doivent être prises pour placer les caractères appropriés dans une séquence d’échappement.File paths must be specified in the WSL format and care must be taken to escape relevant characters. Exemple :Example:

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

Ou ...Or...

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

Lorsque vous appelez un outil Windows à partir d’une distribution WSL dans une version antérieure de Windows 10, vous devez spécifier le chemin du répertoire.When calling a Windows tool from a WSL distribution in an earlier version of Windows 10, you will need to specify the directory path. Par exemple, à partir de votre ligne de commande WSL, entrez :For example, from your WSL command line, enter:

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

Dans WSL, ces exécutables sont gérés de la même façon que les exécutables Linux natifs.In WSL, these executables are handled similar to native Linux executables. Cela signifie que l’ajout de répertoires au chemin Linux et la création de canaux entre les commandes fonctionnent comme prévu.This means adding directories to the Linux path and piping between commands works as expected. Par exemple :For example:

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

OuOr

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

Le fichier binaire Windows doit inclure l’extension de fichier, correspondre à la casse de fichier et être exécutable.The Windows binary must include the file extension, match the file case, and be executable. Les fichiers non exécutables, dont les scripts de commandes et une commande comme dir, peuvent être exécutés avec la commande /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. Par exemple :For example:

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

Ressources supplémentairesAdditional resources