Utilisation des systèmes de fichiers Windows et Linux

Vous devez tenir compte de certains éléments lors de l’utilisation de systèmes de fichiers Windows et Linux. Nous en avons décrit quelques-uns pour vous dans ce guide, dont des exemples de prise en charge de l’interopérabilité pour une combinaison de commandes Windows et Linux.

Stockage de fichiers et performances dans les systèmes de fichiers

Nous vous recommandons d’utiliser vos fichiers dans des systèmes d’exploitation, sauf si une raison particulière vous amène à ne pas le faire. Pour des performances de vitesse optimales, stockez vos fichiers dans le système de fichiers WSL si vous utilisez une ligne de commande Linux (Ubuntu, OpenSUSE, etc.). Si vous utilisez une ligne de commande Windows (PowerShell, invite de commandes), stockez vos fichiers dans le système de fichiers Windows.

Par exemple, lors du stockage de vos fichiers de projet WSL :

  • Utilisez le répertoire racine du système de fichiers Linux : \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Et non le répertoire racine du système de fichiers Windows : /mnt/c/Users/<user name>/Project$ ou C:\Users\<user name>\Project

Lorsque vous voyez /mnt/ dans le chemin du fichier d’une ligne de commande WSL, cela signifie que vous travaillez à partir d’un lecteur monté. Ainsi, le lecteur C:/ du système de fichiers Windows (C:\Users\<user name>\Project) ressemble à ceci quand il est monté dans une ligne de commande WSL : /mnt/c/Users/<user name>/Project$. Il est possible de stocker vos fichiers de projet sur un lecteur monté, mais la vitesse de vos performances est améliorée si vous les stockez directement sur le lecteur \\wsl$.

Afficher votre répertoire actif dans l’Explorateur de fichiers Windows

Vous pouvez afficher le répertoire dans lequel vos fichiers sont stockés en ouvrant l’Explorateur de fichiers Windows à partir de la ligne de commande en utilisant :

explorer.exe .

Vous pouvez également utiliser la commande powershell.exe /c start .. Veillez à ajouter le point à la fin de la commande pour ouvrir le répertoire actif.

Pour afficher toutes les distributions Linux disponibles et leurs systèmes de fichiers racines dans l’Explorateur de fichiers Windows, dans la barre d’adresses, entrez : \\wsl$

Afficher les fichiers de projet dans l’Explorateur de fichiers Windows

Respect de la casse des noms des fichiers et des répertoires

Le respect de la casse détermine si les lettres majuscules (FOO.txt) et minuscules (foo.txt) sont gérées de façon distincte (respect de la casse) ou équivalente (non-respect de la casse) dans un nom de fichier ou un répertoire. Les systèmes de fichiers Windows et linux gèrent le respect de la casse différemment : Windows ne la respecte pas et Linux la respecte. Pour plus d’informations sur la façon d’ajuster le respect de la casse, en particulier lors du montage de disques avec WSL, consultez l’article de procédure Ajuster le respect de la casse.

Interopérabilité entre les commandes Windows et Linux

Les commandes et outils Windows et Linux peuvent être utilisés indifféremment avec WSL.

  • Exécuter les outils Windows (p. ex. notepad.exe) à partir d’une ligne de commande Linux (p. ex. Ubuntu).
  • Exécuter les outils Linux (p. ex. grep) à partir d’une ligne de commande Windows (p. ex. PowerShell).
  • Partager des variables d’environnement entre Linux et Windows. (Build 17063+)

Exécuter les outils Linux à partir d’une ligne de commande Windows

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>).

Par exemple :

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

Les fichiers binaires appelés de cette façon :

  • Utilisent le même répertoire de travail que l’invite CMD ou PowerShell en cours.
  • Sont exécutés en tant qu’utilisateur par défaut WSL.
  • Ont les mêmes droits d’administration Windows que le terminal et le processus appelant.

La commande Linux qui suit wsl (ou wsl.exe) est gérée comme n’importe quelle commande exécutée dans WSL. Des actions comme l’exécution de sudo, la création de canaux et la redirection de fichiers fonctionnent.

Exemple utilisant sudo pour mettre à jour votre distribution Linux par défaut :

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. Une fois que vous avez entré correctement votre mot de passe, votre distribution télécharge les mises à jour.

Combinaison de commandes Linux et Windows

Voici quelques exemples de combinaison de commandes Linux et Windows à l’aide de 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 :

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 :

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 :

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

Les commandes passées à wsl.exe sont transmises au processus WSL sans modification. Les chemins de fichiers doivent être spécifiés au format WSL.

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 :

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 :

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

Exécuter des outils Windows à partir de Linux

WSL peut exécuter des outils Windows directement à partir de la ligne de commande WSL à l’aide de [tool-name].exe. Par exemple, notepad.exe.

Les applications exécutées de cette manière ont les propriétés suivantes :

  • Conservent le répertoire de travail en tant qu’invite de commandes WSL (en général, les exceptions sont décrites ci-dessous).
  • Ont les mêmes autorisations que le processus WSL.
  • Sont exécutées en tant qu’utilisateur Windows actif.
  • Apparaissent dans le Gestionnaire des tâches de Windows comme si elles étaient directement exécutées à partir de l’invite CMD.

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.

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 :

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

Essayons un exemple combinant des commandes Windows et Linux. Ouvrez votre distribution Linux (p. ex. Ubuntu) et créez un fichier texte : 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 :

ls -la | findstr.exe foo.txt

Les outils Windows doivent inclure l’extension de fichier, correspondre à la casse de fichier et être exécutables. Les fichiers non exécutables, dont les scripts de commandes et les commandes natives CMD comme dir, peuvent être exécutés avec la commande cmd.exe /C.

Par exemple, listez le contenu du répertoire C:\ de votre système de fichiers Windows, en entrant :

cmd.exe /C dir

Ou utilisez la commande ping pour envoyer une demande d’écho au site web microsoft.com :

ping.exe www.microsoft.com

Les paramètres sont passés au fichier binaire Windows non modifié. Par exemple, la commande suivante ouvre C:\temp\foo.txt dans notepad.exe :

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

Cela fonctionne également :

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

Partager des variables d’environnement entre Windows et WSL avec WSLENV

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.

Propriétés de la variable WSLENV :

  • Elle est partagée et existe dans les environnements Windows et WSL.
  • Il s’agit d’une liste de variables d’environnement à partager entre Windows et WSL.
  • Elle peut mettre en forme des variables d’environnement pour fonctionner correctement dans Windows et WSL.
  • Elle peut faciliter le flux entre WSL et 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). Avec la build 17063, WSLENV commence à être pris en charge. WSLENV respecte la casse.

Indicateurs WSLENV

Quatre indicateurs sont disponibles dans WSLENV pour influencer la manière dont cette variable d’environnement est traduite.

Indicateurs WSLENV :

  • /p : convertit le chemin entre les chemins de style WSL/Linux et les chemins Win32.
  • /l : indique que la variable d’environnement est une liste de chemins.
  • /u : indique que cette variable d’environnement doit être incluse uniquement lors de l’exécution de WSL à partir de Win32.
  • /w : indique que cette variable d’environnement doit être incluse uniquement lors de l’exécution de Win32 à partir de WSL.

Les indicateurs peuvent être combinés en fonction des besoins.

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. 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.

Désactiver l’interopérabilité

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 :

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 :

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.