WSL (Windows Subsystem for Linux) wsl1+wsl2+对比+在线安装+离线安装+版本转换+右键菜单+外网访问
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.离线安装
首先下载离线安装包
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安装
有两种安装方式
- 直接安装,在 powershell 中进入安装包所在目录,运行下面的命令(app_name.appx是安装包名)
Add-AppxPackage .\app_name.appx
- 解压安装,可以自定义安装位置
将下载的安装包解压到想要安装的位置,然后将该目录添加到环境变量的PATH
中
5.3.初始化
对于在线安装的或者下载安装包使用命令安装的,直接打开对应图标即可
对于手动解压的,需要进入解压目录打开对应的可执行文件,如分发版为 Debian 的打开 debian.exe
即可
等待一会儿待初始化完成后按照说明分别设置 用户名
、密码
即可使用
三、版本转换
如果你的系统是 Windows 内部版本 18362 或更高版本,可以无损转换已经安装的 WSL 版本
查询已安装的 WSL 分发版
wsl --list --verbose
命令输出中展示了
name: 已安装分发版名字
state: 已安装分发版状态,可以简单理解为开机还是关机状态
version: 已安装分发版版本,即 WSL 版本使用第一条命令中找到的
name
(假如名字是Debian
) 执行以下命令- WSL 1 -> WSL 2
wsl --set-version Debian 2
- WSL 2 -> WSL 1
wsl --set-version Debian 1
四、添加右键菜单
将下面代码复制保存到 xxx.js
文件中,双击即可添加/删除右键菜单
- 添加菜单
- 只安装了一个分发版
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");
- 删除菜单
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+对比+在线安装+离线安装+版本转换+右键菜单+外网访问相关推荐
- WSL:WSL(Windows Subsystem for Linux)的简介、安装、使用方法之详细攻略
WSL:WSL(Windows Subsystem for Linux)的简介.安装.使用方法之详细攻略 目录 WSL的简介 WSL的安装 WSL的使用方法 WSL的简介 Windows Subsys ...
- wsl(Windows Subsystem for Linux)启动多个子系统和设置默认启动子系统
WSL的全称是Windows Subsystem for Linux Windows 10在开发者模式下可以使用linux子系统,这个子系统需要在Microsoft Store中下载安装 如果你已经在 ...
- win10 WSL windows subsystem for linux update setup wizard ended prematurely
从microsoft官网上看的安装过程,结果触发了这个错,搜了下有人说什么更新.net 4.5,而我.net是4.8,未果 解决方案: 开始菜单搜索 启用或关闭windows功能 勾选适用于Linux ...
- WSL(windows subsystem for linux)安装错误:安装过程中遇到错误,但可以继续安装。组件: ‘WSL 内核‘ 错误代码: 0x80072f78解决方法
文章目录 问题来源 解决 参考 问题来源 使用管理员身份打开powershell,输入 wsl --install 之后等待安装: 结果,出现如下问题: PS C:\WINDOWS\system32& ...
- windows10 上运行 linux -- WSL(Windows Subsystem for Linux)
1 - Microsoft Store 搜索linux,下载Ubuntu应用 2 - 打开windows功能 并重启 3 - 打开Ubuntu App 创建用户(不能使用root)
- WSL(Windows Subsystem for Linux) 适用于Linux的Windows子系统
打开 Microsoft Store , 搜索 Linux .选择 Ubuntu , 仔细看介绍,尤其是安装前的说明 ========================================= ...
- WSL/Windows Subsystem for Linux based on PICO
Refer to https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux
- Windows Subsystem for Linux (WSL2) - WSL 的基本命令
Windows Subsystem for Linux (WSL2) - WSL 的基本命令 Windows Subsystem for Linux Documentation https://lea ...
- 把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 ...
- WSL安装Oracle,折腾记录:WSL(Windows Subsystem for Linux,Windows上的Linux子系统)安装后的环境配置-Go语言中文社区...
WSL(Windows Subsystem for Linux,Windows上的Linux子系统)的安装比较简单,教程网上较多,此处略过.安装后须要进行一系列配置(如软件源配置.中文配置.图形化配置 ...
最新文章
- 【怎样写代码】偷窥高手 -- 反射技术(三):深入窥视字段
- WebApi发送HTML表单数据:文件上传与多部分MIME
- 求android实现未读短信图标数字提示效果
- mageia linux 5.1 内核,Linux 5.10 LTS发布 为近期最重要的内核版本之一
- 九 Deepin配置ssh访问gitee
- 练习1-17 编写一个程序,打印长度大于80个字符的所有输入行.
- springboot配置templates直接访问
- Theano 中文文档 0.9 - 7.1.2 NumPy新手
- insert into select 死锁
- 按键精灵post教程_掌控POST(1)
- 发际线对于一个人的颜值影响有多大?
- 第 7 章 排序算法
- Tomcat Connector的三种运行模式【bio、nio、apr】
- 一步一步教你安装Nginx+PHP+Mysql
- ActiveX控件dsoFramer的使用(word、excel、PPT)
- 使用js进行登录表单验证
- 如何看出一个程序员的技术能力和水平?
- 爬虫入门(1)——requests(1)
- kvm 监控内存,替换页表(linux版的win VT晶核)(这个整复杂了,不用小内核也可以实现,留着吧,主要记录了bootLoad的启动过程)
- 系统集成项目管理工程师高频考点(第八章)