Windows Subsystem for Linux(WSL)无疑大大提升了Windows下程序开发的体验。

WSL 2向开发者提供的完整的系统调用兼容,使得许多无法在WSL 1中安装的应用,如Docker在WSL 2下成为可能。

WSL 2要求Windows 10 build 18917 或更高版本,否则无法使用。

查看Win10构建号

win + R
输入:
winver

弹窗如下,显示当前的构建号:

如果build低于18917,就需要升级Win 10。

更新Win10到18917+

参考:

https://www.jb51.net/os/win10/678060.html

WSL 1升级WSL2

由于笔者的Win10已经安装了WSL 1,因此需要从WSL 1升级到WSL 2。

首先启用“虚拟机平台”可选组件,在管理员身份打开的PowerShell中输入:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

执行成功后立即重启生效。

接着使用命令行设置要由 WSL 2 支持的发行版,在 PowerShell 中运行:

wsl --set-version <Distro> 2

并确保将 <Distro> 替换为发行版的实际名称。 (可以使用以下命令查看:wsl -l)。

由于笔者使用的是Ubuntu发行版,因此在powershell中执行:

wsl --set-default-version 2
wsl --set-version Ubuntu 2

其中wsl --set-default-version 2 将今后所有安装WSL发行版初始化为WSL 2发行版。等待上述转换完成,这个过程可能会花费一些时间。

接着就可以在powershell中执行:

wsl -l -v

查看使用的WSL的版本。如:

PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2

在Win10中安装SSH Client

参考:

https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse

Powershell启动WSL

参考:

https://devblogs.microsoft.com/commandline/a-guide-to-invoking-wsl/

即只要在PowerShell中输入:

wsl

即可启动WSL。

通过PowerShell命令:

wsl --shutdown

也可以关闭当前运行的所有WSL实例。

除了PowerShell这种方式外,Windows还提供了快捷方式,我们的WSL通常是从Win 10的应用商店中安装的,找到Win 10本地安装WSL应用后的快捷方式,也可启动同时弹出对应WSL的终端。

WSL中安装SSH服务并启动

这个过程相当于在Linux中安装sshd,相关资料非常多,这里不赘述。

后续可以在Win 10中通过ssh客户端访问WSL,好处是可以使用自己喜欢的终端工具。

VSCode安装Remote Development套件

VSCode集成了对WSL的支持,便于在VSCode开发时操作WSL。

参考:

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

VSCode中配置SSH Config连接配置文件

示例:

Host WSL-UBUNTU
HostName 172.31.165.60
User darren

其中172.31.165.60是在WSL中执行网络查看命令如ifconfig查询到的。

VSCode连接成功WSL后,VSCode后续打开的所有Terminal都将是WSL上的终端,而不是Win10本地的终端。

VSCode打开WSL目录

在VSCode连接到WSL中之后,打开VSCode中的终端,此时终端连接的是WSL,在终端中cd到目标目录,输入:

code .

即可在VSCode中打开WSL内系统的目录。

Win 10 访问 WSL内部文件系统

如果我们想在Win 10和WSL之间进行文件的传输,Windows提供了非常方便的支持,上述通过VSCode是一种方式。

此外,在WSL中的用户home目录,输入:

explorer.exe .

Win 10就会弹出一个资源浏览器,支持以Windows窗口的形式浏览WSL中的文件系统,非常方便。

此外,PowerShell提供了一种访问WSL的命令行形式:

cd \\wsl$\{distro_name}\

例如,我的WSL是Ubuntu发行版,就在PowerShell下输入:

cd \\wsl$\Ubuntu

即可在PowerShell中浏览WSL的文件系统了。

WSL 2的神坑

原本当我在WSL 2 Ubuntu中安装了Docker-CE,这一在WSL 1中不敢想的事情时,我非常开心,觉得Windows在开发方面终于可以越来越接近MacBook,同时可以和Windows的虚拟机说拜拜了。

但是后续的使用中发现了 WSL 2存在的一个神坑,即每次重启Windows系统,WSL实例的IP地址就会动态变动,哈哈哈哈哈哈哈,每次查WSL实例的IP也是醉了。

当然网上也有一些开源的解决方案如每次启动时动态查询其IP,然后修改Windows的hosts文件,应用对WSL的访问不要使用IP而是用hosts文件中的主机名等等。

然而我还是觉得为WSL分配固定的IP应该是开发者的刚需,估计后续的Win 10版本也应该会修复这个问题。

总体说来,瑕不掩瑜,笔者已经在Windows 10 WSL 2愉快的玩Docker了,随着Win 10的不断成熟,我相信借助WSL应该会成为今后Windows上集成Docker的主流方式。

Windows 10 之 WSL 2的更多相关文章

  1. Copy Files from Windows 10 to wsl

    Method 1 reboot( close wsl window and reopen ) Method 2 – Windows System Drive as a Mount point Wind ...

  2. 黑科技抢先尝(续) - Windows terminal中WSL Linux 终端的极简美化指南

    目录 修改默认源,为apt-get安装提速 安装python 和 python pip 安装 zsh 安装powerline-font中的特定字体 安装powerline-shell 修改~目录下的配 ...

  3. 如何重启 Windows 10 子系统(WSL) ubuntu

    如何重启 Windows 10 子系统(WSL) ubuntu WSL 子系统是基于 LxssManager 服务运行的. 只需要将 LxssManager 重启即可. 可以做成一个 bat 文件. ...

  4. 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程(一)(2019-08-23)

    目录 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程 安装前准备 安装 ESP8266 工具链 下载 ESP8266 SDK 编译 花絮 使用 Windo ...

  5. 使用 VSCODE 在 Windows 10 WSL 中远程开发

    使用 VSCODE 在 Windows 10 WSL 中远程开发 安装 VSCODE 1.35+ 版本. 在 VSCODE 中安装 WSL 插件. 点击左下角的 WSL 图标. 打开项目,提示路径. ...

  6. 笔记:在 Windows 10 WSL Ubuntu 18.04 安装 Odoo12 (2019-06-09)

    笔记:在 Windows 10 WSL Ubuntu 18.04 安装 Odoo12 原因 为了和服务器一样的运行环境. 使用 Ubuntu 运行 Odoo 运行更快. 方便使用 Windows 10 ...

  7. Windows 10 WSL 2.0安装并运行Docker

    在Windows 10 2004版本,微软更新WSL到了2.0,WSL 2.0已经拥有了完整的Linux内核!今天来测试一下,是否可以安装docker!  一.开启WSL 以管理员运行Powershe ...

  8. 如何在 Windows 10 上安装 WSL 2

    翻译自 Joey Sneddon 2020年10月30日的文章<How to Install WSL 2 on Windows 10> [1] 如果您想在最新的 Windows 版本中尝试 ...

  9. Windows 10 运行原生Bash【Ubuntu】

    当前widnows用户的 AppData\Local\lxss 目录下安装了ubuntu,其中rootfs是和ubuntu安装的目录一致 bash进入的就是LINUX的SHELL,因此其二进制格式是E ...

随机推荐

  1. js中判断数据类型的四种方法总结

    js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...

  2. .jsp文件的使用和理解以及一些小练习和Listener监听器

    什么是 jsp,它有什么用? jsp 的全换是 java server pages.Java 的服务器页面.jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据.因为 Servle ...

  3. CVE-2020-0796提权操作

    简介 最新的windows10中使用了SMBv3协议,SMBv3协议在压缩消息时,未对头部数据做任何检查,导致恶意攻击者可以直接使用,从而导致内存破坏漏洞. 该漏洞可远程进行攻击目标系统,但目前只做到 ...

  4. 【工作篇】了解升级 Spring 版本导致的跨域问题

    一.背景 最近需要统一升级 Spring 的版本,避免 common 包和各个项目间的 Spring 版本冲突问题.这次升级主要是从 Spring 4.1.9.RELEASE 升级到 Spring 4 ...

  5. Spring系列之多个数据源配置

    前言 在上篇文章讲到了如何配置单数据源,但是在实际场景中,会有需要配置多个数据源的场景,比如说,我们在支付系统中,单笔操作(包含查询.插入.新增)中需要操作主库,在批量查询或者对账单查询等对实时性要求 ...

  6. NOIP 模拟 $15\; \text{影子}$

    题解 \(by\;zj\varphi\) 一道并查集的题 对于它路径上点权,我们可以转化一下:对于一个点,它在哪些路径上是最小的点权 那么我们排个序,从大到小加入点,每回加入时,将这个点与它所相连的且 ...

  7. Android 11(R) Power HAL AIDL简析 -- 基本接口

    Android 11(R) Power HAL AIDL将分三篇文章来介绍: Android 11(R) Power HAL AIDL简析 -- 基本接口 Android 11(R) Power HA ...

  8. ThreadPoolExecutor(线程池)的参数

    构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit u ...

  9. mysql版本:'for the right syntax to use near 'identified by 'password' with grant option'

    查询mysql具体版本 SELECT @@VERSION 问题分析:mysql版本8.0.13,在给新用户授权时,发生了变化: 1064 - You have an error in your SQL ...

  10. MVVMLight学习笔记(五)---RelayCommand深究

    一.概述 有时候,单纯的命令绑定不一定能满足我们的开发需求,比如我们需要在命令绑定的时候传递一个参数,这个时候,我们就需要使用RelayCommand的泛型版本了. RelayCommand的泛型版本 ...