700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > WSL (Windows Subsystem for Linux) wsl1+wsl2+对比+安装+离线安装+版本转换+右键菜单+外网访问

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

时间:2020-03-30 15:15:19

相关推荐

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 由于与 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 配置+右键菜单+管理员权限

六、设置网络访问

当前时间 -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):startclsecho.echo. ************************************************echo. * 自动获取 WSL 2 的ip地址,绑定指定端口号echo. * 方便局域网/广域网访问 WSL 2 内部应用echo. *echo. * 0. 退出echo. * 1. 绑定端口号echo. * 2. 查看已绑定端口号echo. * 3. 删除已绑定端口号echo. ************************************************echo.goto loopChoice:loopChoiceset "choice=notChoice"set /p choice="输入序号后回车: "if "%choice%"=="0" goto exitif "%choice%"=="1" set "nextStep=addForward" & goto loopPortif "%choice%"=="2" goto showForwardif "%choice%"=="3" set "nextStep=delForward" & goto loopPortecho. & echo 选择错误 & goto loopChoice:loopPortecho.set "choice=notPort"set /p choice="输入监听的端口号后回车: "if "%choice%"=="0" goto exitecho %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 loopgoto %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 allgoto end:endecho. & echo 按任意键返回主菜单... & pause >NULgoto start:exitexit

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。