187 votes

WSL : Est-ce que j'utilise la version 1 ou la version 2 ?

J'ai Sous-système Windows pour Linux mais je ne sais pas quelle version j'ai, et beaucoup de choses ne fonctionnent pas dans la version 1. Comment puis-je vérifier ma version ?

162voto

Denis Bilenko Points 2975
  1. À l'invite de commande de Windows 10, exécutez ver . est l'avant-dernière version du groupe numérique. 18917 ou plus ? Si oui, c'est possible vous avez la WSL 2 mais pas encore vérifié . Passez à l'étape A または B.
    Si vous le faites pas voir Windows version 18917 ou supérieure, vous avez la version 1.
    Ceci illustre le résultat lorsque le système d'exploitation est Build 16299 :

    Version 16299

    A. Fenêtres ouvertes PowerShell ou cmd et entrez la commande wsl -l -v . Si la version 2 est correctement installée, vous verrez le numéro de version. Si vous ne voyez pas de numéro de version, ou si vous voyez un message d'erreur (Merci, Cornea Valentin ), vous avez la version 1 (vous pouvez également voir un numéro de version '1' qui pourrait indiquer que vous utilisez la version 1 - cf. aquí ). Désinstallez-le puis réinstallez-le en suivant les instructions suivantes https://scotch.io/bar-talk/trying-the-new-wsl-2-its-fast-Windows-subsystem-for-linux

    B. A partir de l'invite WSL Shell, exécutez uname ou uname -r . Si la version du noyau >= 4.19, il s'agit de la version 2 du WSL.

En quoi cela est-il pertinent ?

La WSL 1 était basée sur l'interface du noyau compatible avec Linux de Microsoft, une couche de traduction de la compatibilité con pas de noyau Linux code.

La WSL 2 a été repensée avec un noyau Linux fonctionnant dans un environnement VM léger, et les innovateurs ont découvert beaucoup plus de choses qu'ils peuvent faire avec la WSL 2.

Windows 10 Version 2004 (build 19041.153 et plus) améliore encore WSL2 ; voir https://devblogs.microsoft.com/commandline/wsl2-will-be-generally-available-in-Windows-10-version-2004/ y https://winaero.com/blog/wsl2-will-ship-with-Windows-10-version-2004-with-kernel-updates-via-Windows-update/ .

90voto

Jack Points 3499
  1. Ouvrir PowerShell
  2. Vérifiez la version avec wsl -l -v
  3. Si vous êtes à la version 1, mettez à jour la version avec wsl --set-version Ubuntu-20.04 2

Note : Changer la version d'un système d'exploitation en cours d'exécution l'arrêtera. Le nom du système d'exploitation ne doit pas nécessairement être Ubuntu-20.04 pour vous. Veuillez choisir le nom réel figurant dans wsl -l -v

Si vous ne pouvez pas effectuer la mise à jour vers la version 2, il se peut que vous ne disposiez pas du noyau WSL 2. Cela peut être téléchargé à partir de Microsoft .

1voto

Luce Points 43

Dans la version WSL que j'utilisais, j'ai juste tapé uname -r à laquelle j'ai obtenu le résultat

5.4.72-microsoft-standard-WSL2

Donc, je peux dire que c'est WSL2, donc vous pouvez essayer d'exécuter uname -r et vérifier.

1voto

NotTheDr01ds Points 4144

De manière programmée :

# Multiline 
wsl.exe -l -v |
iconv -f utf16 |
egrep "\b${WSL_DISTRO_NAME}\s+Running" |
tr -d '\r' |
sed 's/.*\([[:digit:]]\)[[:space:]]*/\1/'

Reviendra 1 ou 2 .

Ligne par ligne, ceci :

  • Exécute wsl.exe -l -v pour retourner la liste complète de toutes les distributions que vous avez pu installer

  • Le parcourt iconv pour corriger sa sortie UTF16 malformée. Normalement, vous ne voyez pas le problème à moins que vous n'essayiez de le grep (ou de le pipeer vers quelque chose comme hexdump -C ), mais vous devez le nettoyer avant de pouvoir le greffer.

  • Correspond à l'instance actuelle (via $WSL_DISTRO_NAME ) ligne

  • Supprime la fin de ligne DOS

  • Trouve le numéro de version dans la ligne et le sort

Merci à cette réponse du super utilisateur pour le concept.

Cela fonctionnera tant qu'Interop est activé pour WSL.

Si Interop n'est pas activé, une méthode de repli consiste à vérifier les éléments suivants /proc/cmdline :

  • /proc/cmdline sur WSL1 est BOOT_IMAGE=/kernel init=/init
  • /proc/cmdline sur WSL2 est initrd=\initrd.img panic=-1 pty.legacy_count=0 nr_cpus=16

Donc :

  • grep -q "^BOOT_IMAGE" /proc/cmdline renvoie un succès sur WSL1 mais une erreur sur WSL2
  • grep -q "^initrd" /proc/cmdline renvoie un succès sur WSL2 mais une erreur sur WSL1

Cela fonctionne actuellement (et depuis l'année dernière, au moins), mais pourrait changer à l'avenir si l'architecture de WSL1 ou WSL2 changeait d'une manière ou d'une autre. Cependant, je m'attends à ce que le /proc/cmdline sera probablement toujours différente entre WSL1 et WSL2 et peut être analysée par programme pour déterminer la version actuelle.

-1voto

Chris Halcrow Points 163

Si vous exécutez Docker pour Windows et que vous avez le WSL 1, alors si vous entrez docker dans le terminal de votre WSL, vous verrez le message suivant The command 'docker' could not be found in this WSL 1 distro. ce qui est une confirmation très claire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X