WSL (Windows Subsystem for Linux) wsl1+wsl2+对比+在线安装+离线安装+版本转换+右键菜单+外网访问

WSL (Windows Subsystem for Linux),是微软在Windows10中增加的Linux子系统,可以方便的在Windows中使用Linux系统进行开发、测试及其他便捷功能
当前有两个不同实现版本

一、两者比较

以下表格为官方提供的两者功能对比

功能 WSL 1 WSL 2
Windows 和 Linux 之间的集成
启动时间短
占用的资源量少
可以与当前版本的 VMware 和 VirtualBox 一起运行
托管 VM
完整的 Linux 内核
完全的系统调用兼容性
跨 OS 文件系统的性能

简单归纳两者区别

  • WSL 1 由于与 Windows 共用 NTFS 文件系统,所以两个系统间跨系统文件交互性能更强

    • 但正是由于这一点,无法使用很多功能,如完整的 docker,另外IO性能也不如正经 Linux
  • WSL 2 使用了虚拟化技术,相当于在 Windows 中打开了一个虚拟机,所以可用功能是要远远多于 WSL 1 的,IO 性能也明显上来了
    • 使用了微软自家的 Hyper-v 虚拟化技术,其他虚拟机类产品的兼容版本 VMware 15.5.5+ 和 VirtualBox 6+
    • WSL 2 仅适用于 Windows 10 版本 1903、内部版本 18362 或更高版本

不需要纠结,没啥特殊要求就上WSL2吧,而且两者可以相互转换

重要 重要 重要
WSL 2 现在有一项问题,如果使用了诸如 WeGame 的网络加速、Proxifier 等会改变网络设置的软件,会导致 WSL 2 无法启动
错误如下 参考的对象类型不支持尝试的操作。
使用管理员身份执行以下命令重置网络设置即可,无需重启计算机

netsh winsock reset

重要 重要 重要

二、安装

1.启用适用于 Linux 的 Windows 子系统

以管理员身份在 CMD 或 PowerShell 中运行以下命令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

或以管理员身份在 PowerShell 运行

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

该步骤是必须的,如果想使用 WSL 2 继续第2步,如果想使用 WSL 1 重启计算机,然后直接跳到第5步。

2.开启虚拟机功能

WSL 2 使用了虚拟机技术,所以使用管管理员身份在 CMD 或 PowerShell 中运行以下命令

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

然后重启计算机

3.安装 Linux 内核更新包

在 适用于 x64 计算机的 WSL2 Linux 内核更新包 中下载安装更新包

4.将 WSL 2 设置为默认版本

以管理员身份在 CMD 或 PowerShell 中运行下面的命令

wsl --set-default-version 2

将默认版本改为 WSL 2,以后安装wsl时将默认安装为 WSL 2,该版本可以随时转换

5.安装所需的分发版

5.1.在线安装

打开 Microsoft Store 选择自己喜欢的分发版进行安装

5.2.离线安装

  1. 首先下载离线安装包

    Ubuntu 20.04
    Ubuntu 20.04 ARM
    Ubuntu 18.04
    Ubuntu 18.04 ARM
    Ubuntu 16.04
    Debian GNU/Linux
    Kali Linux
    OpenSUSE Leap 42
    SUSE Linux Enterprise Server 12
    Fedora Remix for WSL

  2. 安装

    有两种安装方式

    1. 直接安装,在 powershell 中进入安装包所在目录,运行下面的命令(app_name.appx是安装包名)
    Add-AppxPackage .\app_name.appx
    
    1. 解压安装,可以自定义安装位置
      将下载的安装包解压到想要安装的位置,然后将该目录添加到环境变量的 PATH

5.3.初始化

对于在线安装的或者下载安装包使用命令安装的,直接打开对应图标即可
对于手动解压的,需要进入解压目录打开对应的可执行文件,如分发版为 Debian 的打开 debian.exe 即可

等待一会儿待初始化完成后按照说明分别设置 用户名密码 即可使用

三、版本转换

如果你的系统是 Windows 内部版本 18362 或更高版本,可以无损转换已经安装的 WSL 版本

  1. 查询已安装的 WSL 分发版

    wsl --list --verbose
    

    命令输出中展示了
    name: 已安装分发版名字
    state: 已安装分发版状态,可以简单理解为开机还是关机状态
    version: 已安装分发版版本,即 WSL 版本

  2. 使用第一条命令中找到的 name (假如名字是 Debian) 执行以下命令

    1. WSL 1 -> WSL 2
    wsl --set-version Debian 2
    
    1. WSL 2 -> WSL 1
    wsl --set-version Debian 1
    

四、添加右键菜单

将下面代码复制保存到 xxx.js 文件中,双击即可添加/删除右键菜单

  1. 添加菜单
  • 只安装了一个分发版
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.CurrentDirectory = "..";
WshShell.RegWrite("HKCU\\Software\\Classes\\Directory\\Background\\shell\\wsl_here\\", "WSL Here", "REG_SZ");
WshShell.RegWrite("HKCU\\Software\\Classes\\Directory\\Background\\shell\\wsl_here\\command\\",  "C:\\Windows\\System32\\wsl.exe", "REG_SZ");
  • 指定一个分发版

    • 将代码中的 分发版的名字 几个字改为 查询已安装的 WSL 分发版 中获取到的 name,想要添加哪个分发版就改为哪一个
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.CurrentDirectory = "..";
WshShell.RegWrite("HKCU\\Software\\Classes\\Directory\\Background\\shell\\wsl_here\\", "WSL Here", "REG_SZ");
WshShell.RegWrite("HKCU\\Software\\Classes\\Directory\\Background\\shell\\wsl_here\\command\\",  "C:\\Windows\\System32\\wsl.exe -d 分发版的名字", "REG_SZ");
  1. 删除菜单
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.RegDelete("HKCU\\Software\\Classes\\Directory\\Background\\shell\\wsl_here\\command\\");
WshShell.RegDelete("HKCU\\Software\\Classes\\Directory\\Background\\shell\\wsl_here\\");

五、在 Windows Terminal 中使用 WSL

使用了Windows Terminal?

参考我的另一篇文章 Windows Terminal 配置+右键菜单+管理员权限

六、设置网络访问

当前时间 2020-11-27 官方文档中显示尚未支持纯 IPV6 的访问

0.获取WSL的ip

WSL 1 直接与 Windows 共用网络,只需要开放相应端口即可

WSL 2 使用了虚拟机,所以需要将端口映射到物理机上

  • 查找 WSL 2 的ip地址,以下命令在 WSL 2 中运行,输出中查找 inet 处的ip地址
ip addr | grep eth0 | grep inet

1.Windows访问WSL

WSL 1 直接使用 127.0.0.1 或者 localhost 即可访问

WSL 2 当前版本使用命令找到的 ip 或者 localhost 均可访问

2.WSL访问Windows

官方文档中提供的方法为从 /etc/resolv.conf 文件中寻找 nameserver 即为Windows的ip

可以在 WSL 中使用如下命令

cat /etc/resolv.conf | grep nameserver

3.局域网/广域网访问WSL

3.1.手动方法

需要将 WSL 的端口与 Windows 端口绑定,并且 WSL 2 每次分配到的地址可能不固定,所以需要多次设置

以管理员身份运行

netsh interface portproxy add v4tov4 listenport=[Windows端口] listenaddress=0.0.0.0 connectport=[WSL端口] connectaddress=[WSL的IP]

查看端口转发状态

netsh interface portproxy show all

删除端口转发

netsh interface portproxy delete v4tov4 listenport=4000 listenaddress=0.0.0.0

3.2.自动脚本

为了方便使用,提供如下脚本进行添加、删除、查看Windows与WSL2的端口转发,复制另存为 xxx.bat 双击打开使用

只有安装了 WSL 的系统下可用

@echo off
@title WSL2端口转发:isAdmin
::判断当前是否有管理员权限
REG QUERY "HKU\S-1-5-19">NUL 2>&1||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&exit):start
cls
echo.
echo. ************************************************
echo. * 自动获取 WSL 2 的ip地址,绑定指定端口号
echo. * 方便局域网/广域网访问 WSL 2 内部应用
echo. *
echo. * 0. 退出
echo. * 1. 绑定端口号
echo. * 2. 查看已绑定端口号
echo. * 3. 删除已绑定端口号
echo. ************************************************
echo.
goto loopChoice:loopChoice
set "choice=notChoice"
set /p choice="输入序号后回车: "
if "%choice%"=="0" goto exit
if "%choice%"=="1" set "nextStep=addForward" & goto loopPort
if "%choice%"=="2" goto showForward
if "%choice%"=="3" set "nextStep=delForward" & goto loopPort
echo. & echo 选择错误 & goto loopChoice:loopPort
echo.
set "choice=notPort"
set /p choice="输入监听的端口号后回车: "
if "%choice%"=="0" goto exit
echo %choice%| findstr /v "[^0-9]">nul&& set "wsl2Port=%choice%" || set "choice=notPort"
if %wsl2Port% GTR 65535 set "choice=notPort"
if %wsl2Port% LSS 1 set "choice=notPort"
if "%choice%"=="notPort" echo. & echo 端口号输入错误 & echo. & goto loop
goto %nextStep%:addForward
:: 添加新的端口转发
for /f "tokens=2" %%i in ('wsl -e ip addr ^| findstr eth0 ^| findstr inet') do (set wsl2ip=%%i)
for /f "tokens=1 delims=/" %%i in ('echo %wsl2ip%') do (set wsl2ip=%%i)
netsh interface portproxy add v4tov4 listenport=%wsl2Port% listenaddress=0.0.0.0 connectport=%wsl2Port% connectaddress=%wsl2ip% && echo 添加成功 || echo 添加失败
goto end:delForward
:: 删除已经存在的端口转发
netsh interface portproxy delete v4tov4 listenport=%wsl2Port% listenaddress=0.0.0.0 && echo 删除成功 || echo 删除失败
goto end:showForward
:: 显示已经绑定的端口转发
netsh interface portproxy show all
goto end:end
echo. & echo 按任意键返回主菜单... & pause >NUL
goto start:exit
exit

WSL (Windows Subsystem for Linux) wsl1+wsl2+对比+在线安装+离线安装+版本转换+右键菜单+外网访问相关推荐

  1. WSL:WSL(Windows Subsystem for Linux)的简介、安装、使用方法之详细攻略

    WSL:WSL(Windows Subsystem for Linux)的简介.安装.使用方法之详细攻略 目录 WSL的简介 WSL的安装 WSL的使用方法 WSL的简介 Windows Subsys ...

  2. wsl(Windows Subsystem for Linux)启动多个子系统和设置默认启动子系统

    WSL的全称是Windows Subsystem for Linux Windows 10在开发者模式下可以使用linux子系统,这个子系统需要在Microsoft Store中下载安装 如果你已经在 ...

  3. win10 WSL windows subsystem for linux update setup wizard ended prematurely

    从microsoft官网上看的安装过程,结果触发了这个错,搜了下有人说什么更新.net 4.5,而我.net是4.8,未果 解决方案: 开始菜单搜索 启用或关闭windows功能 勾选适用于Linux ...

  4. WSL(windows subsystem for linux)安装错误:安装过程中遇到错误,但可以继续安装。组件: ‘WSL 内核‘ 错误代码: 0x80072f78解决方法

    文章目录 问题来源 解决 参考 问题来源 使用管理员身份打开powershell,输入 wsl --install 之后等待安装: 结果,出现如下问题: PS C:\WINDOWS\system32& ...

  5. windows10 上运行 linux -- WSL(Windows Subsystem for Linux)

    1 - Microsoft Store 搜索linux,下载Ubuntu应用 2 - 打开windows功能 并重启 3 - 打开Ubuntu App 创建用户(不能使用root)

  6. WSL(Windows Subsystem for Linux) 适用于Linux的Windows子系统

    打开 Microsoft Store , 搜索 Linux .选择 Ubuntu , 仔细看介绍,尤其是安装前的说明 ========================================= ...

  7. WSL/Windows Subsystem for Linux based on PICO

    Refer to https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux

  8. Windows Subsystem for Linux (WSL2) - WSL 的基本命令

    Windows Subsystem for Linux (WSL2) - WSL 的基本命令 Windows Subsystem for Linux Documentation https://lea ...

  9. 把windows装到linux下,如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10?

    原标题:如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10? Windows 10凭借大受欢迎的WSL(Windows Subsystem for L ...

  10. WSL安装Oracle,折腾记录:WSL(Windows Subsystem for Linux,Windows上的Linux子系统)安装后的环境配置-Go语言中文社区...

    WSL(Windows Subsystem for Linux,Windows上的Linux子系统)的安装比较简单,教程网上较多,此处略过.安装后须要进行一系列配置(如软件源配置.中文配置.图形化配置 ...

最新文章

  1. 【怎样写代码】偷窥高手 -- 反射技术(三):深入窥视字段
  2. WebApi发送HTML表单数据:文件上传与多部分MIME
  3. 求android实现未读短信图标数字提示效果
  4. mageia linux 5.1 内核,Linux 5.10 LTS发布 为近期最重要的内核版本之一
  5. 九 Deepin配置ssh访问gitee
  6. 练习1-17 编写一个程序,打印长度大于80个字符的所有输入行.
  7. springboot配置templates直接访问
  8. Theano 中文文档 0.9 - 7.1.2 NumPy新手
  9. insert into select 死锁
  10. 按键精灵post教程_掌控POST(1)
  11. 发际线对于一个人的颜值影响有多大?
  12. 第 7 章 排序算法
  13. Tomcat Connector的三种运行模式【bio、nio、apr】
  14. 一步一步教你安装Nginx+PHP+Mysql
  15. ActiveX控件dsoFramer的使用(word、excel、PPT)
  16. 使用js进行登录表单验证
  17. 如何看出一个程序员的技术能力和水平?
  18. 爬虫入门(1)——requests(1)
  19. kvm 监控内存,替换页表(linux版的win VT晶核)(这个整复杂了,不用小内核也可以实现,留着吧,主要记录了bootLoad的启动过程)
  20. 系统集成项目管理工程师高频考点(第八章)

热门文章

  1. 留不下的城市,回不去的家乡,真得么?
  2. 思迅商云8版的最后一个版本_泪目!科比成为2K21第3位封面球星,将推出曼巴永恒版...
  3. Github系列教程一 ————开门
  4. x-editable
  5. 崇明东平森林公园一日游
  6. mysql 查询去掉多余零
  7. 5G可以让万人演唱会中人人有网上?有它就行
  8. Dart 2.18 正式发布
  9. 《Machine Learning in Action》—— Taoye给你讲讲Logistic回归是咋回事
  10. 非接触物体尺寸形态测量(G题)