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 ?
Réponses
Trop de publicités?-
À 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 :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-linuxB. A partir de l'invite WSL Shell, exécutez
uname
ouuname -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/ .
- Ouvrir PowerShell
- Vérifiez la version avec
wsl -l -v
- 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 .
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 commehexdump -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 estBOOT_IMAGE=/kernel init=/init
-
/proc/cmdline
sur WSL2 estinitrd=\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.