WSL 是一个为在 Windows 10 和 Windows Server 2019 以上能够原生运行 Linux 二进制可执行文件(ELF 格式)的兼容层。可以把它当作一个只能用命令行交互的 Linux 虚拟机。

安装

参考:安装 WSL | Microsoft Learn

在管理员模式下打开终端,输入:

wsl --install

这将开始安装 Ubuntu。

安装好之后会提示你创建一个默认 UNIX 用户名和密码。用户名最好使用小写的单个单词:

Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
New password:
Retype new password:

输入完成之后,我们的 Ubuntu 就初始化成功了:

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details. Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage This message is shown once a day. To disable it please create the
/home/user/.hushlogin file.
user@host:~$

如果要退出 WSL,输入 exit

exit

如果下次要进入 WSL,输入 wsl,将进入设置的默认 Linux 发行版:

wsl

常用 WSL 命令

wsl --install   # 安装虚拟机(默认为 Ubuntu)
wsl --shutdown # 停止所有 WSL 虚拟机
wsl --update # 升级所有 WSL 虚拟机
wsl --list # 查看虚拟机列表
wsl --unregister <vm-id> # 卸载虚拟机

在 WSL 中使用 Docker

Windows 主机上的 Docker Desktop 可以和 WSL 虚拟机集成。也就是说,如果你的 Windows 主机已经安装了 Docker Desktop,那么就不用在 WSL 中再次安装 Docker(CE)了。我们只需在 Docker Desktop 设置中打开相关的虚拟机集成即可。

打开 Docker Desktop 设置,进入 Resources > WSL integration,然后打开你需要集成的虚拟机选项即可:

参考:WSL 上的 Docker 容器入门

设置镜像网络

如果你需要 WSL 虚拟机使用主机的网络环境,需要设置镜像网络。

在宿主机的用户主目录下创建文件 .wslconfig,填入以下配置:

[experimental]
autoMemoryReclaim=gradual # gradual | dropcache | disabled
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

然后重启 WSL 虚拟机:

wsl --shutdown

参考:WSL 2.0.0 Release Note

WSL 连接 U 盘

安装 USBIPD-WIN 工具(需要 Windows 11 或更高):

winget install --interactive --exact dorssel.usbipd-win

以管理员模式打开 PowerShell,然后列出 USB 设备:

usbipd list

找到你的 U 盘,然后共享并链接到 WSL:

usbipd bind --busid <bus-id>         # 共享设备
usbipd attach --wsl --busid <busid> # 链接设备

在 WSL 中验证设备已链接:

lsusb

使用完成后,可物理断开 USB 设备,或者从 PowerShell 运行命令:

usbipd detach --busid <bus-id>

参考:连接 USB 设备 | Microsoft Learn

Troubleshooting

Failed to translate xxx

安装了 Docker 的同学可能会发现使用 wsl 命令启动虚拟机时报错:

$ wsl
<3>WSL (34) ERROR: CreateProcessParseCommon:708: Failed to translate C:\Users\user
<3>WSL (34) ERROR: CreateProcessParseCommon:754: getpwuid(0) failed 2
<3>WSL (34) ERROR: UtilTranslatePathList:2866: Failed to translate C:\Program Files\PowerShell\7
<3>WSL (34) ERROR: UtilTranslatePathList:2866: Failed to translate C:\Windows\system32
<3>WSL (34) ERROR: UtilTranslatePathList:2866: Failed to translate C:\Windows
...

这是因为 WSL 的默认 Linux 发行版被设置成了 docker-desktop-data。我们可以使用 wsl -l 命令检查默认 Linux 发行版:

$ wsl -l
适用于 Linux 的 Windows 子系统分发:
docker-desktop-data (默认)
Ubuntu
docker-desktop

可以看到默认 Linux 发行版是 docker-desktop-data。我们可以使用 wsl -s 命令重新设置默认 Linux 发行版:

wsl -s ubuntu  # 设置 Ubuntu 为默认发行版

WSL2: WslRegisterDistribution failed with error: 0x80070002

我是在卸载了 VMware Workstation Pro 之后使用 WSL 安装 Ubuntu 时遇到了这样的问题。重新安装 VMware Workstation Pro,然后再卸载,然后再次使用 WSL 安装 Ubuntu 即可。

参考:WSL2: WslRegisterDistribution failed with error: 0x80070002 | GitHub

虚拟机无法联网

编辑 WSL 配置文件 /etc/wsl.conf,加入下面两行配置:

[network]
generateResolvConf = false

然后重启虚拟机:

wsl --shutdown

重新启动 WSL,并编辑 /etc/resolv.conf 文件,加入下面这行:

nameserver 223.5.5.5

参考:WSL 无法访问网络的解决办法 | CSDN

WSL 使用的更多相关文章

  1. Bash On Win10 (WSL) 安装 Odoo 开发环境

    前段时间微软发布了Bash On Win10,虽然目前还是Beta阶段,但是一想到再也不用折腾虚拟机上跑odoo了,就忍不住手痒,尝试在WSL上安装了一下odoo,结果比较惊喜,感觉可以抛弃Vitru ...

  2. 推荐一款好用的WSL终端模拟器

    Windows 10 中包含了一个 WSL(Windows Subsystem for Linux)子系统,我们可以在其中运行未经修改过的原生 Linux ELF 可执行文件.利用它我们可以做很多事情 ...

  3. Win10 Bash/WSL调试Linux环境下的.NET Core应用程序

    一.简介 使用过Mac OS的程序员都知道,在Mac Book Pro上写程序是一件比较爽的事儿,作为dotneter,我们都比较羡慕Mac系统的环境,比如命令行,当然设备也是挺漂亮的. 在新的Win ...

  4. 关于WSL(Windows上的Linux子系统)的介绍

    WSL,Windows Subsystem for Linux,就是之前的Bash on [Ubuntu on] Windows(嗯,微软改名部KPI++ 首先要说一句,其实Windows 10在一周 ...

  5. 利用 WSL 在 Windows下打造高效的 Linux 开发环境

    WSL-Windows Subsystem for Linux 介绍 The Windows Subsystem for Linux lets developers run Linux environ ...

  6. 微软为.NET程序员带来了最优的跨平台开发体验-WSL

    前言 在前几个Visual Studio Code更新中发现有一个重要得特性,就是nodejs可以使用VS Code在WSL中进行Debug了(WSL是指Win10中的Linux子系统),之前写过一篇 ...

  7. Windows Sublime Text 配置Linux子系统(WSL)下的 gcc/g++ 编译环境

    0. 简介(若已了解背景可以跳过此部分) Windows 10 Build 14316以上版本中加入了"Windows系统的Linux子系统"(Windows Subsystem ...

  8. Windows Subsystem for Linux (WSL)挂载移动硬盘U盘

    WSL想通过移动硬盘处理一些数据,结果进去了无法发现移动硬盘,于是搜了好久也没有一个正确的解决办法,终于找到一个,现在贡献出来与大家共享. WSL比起linux挂载硬盘简单一些.而且windows本身 ...

  9. WSL与Windows交互实践

    1. WSL是什么 2. WSL新特性 3. WSL管理配置 4. WSL交互 5. 解决方案  * 5.1 使用别名  * 5.2 多复制一份  * 5.3 重定向  * 5.4 symlink 6 ...

  10. WSL Windows Subsystem for Linux安装指南

    见官方文档: https://msdn.microsoft.com/en-us/commandline/wsl/install_guide

随机推荐

  1. 嵌入式知识分享——GDB程序调试方法说明

    前  言 本指导文档适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit Linux开发环境:Ubuntu 18.04.4 64bit 虚拟机:VM ...

  2. scala实现二分查找

    package day04.scala/** * Description: 使用二分查找法,查找元素为"70"的索引值 java */object Demo2SecondaySea ...

  3. frp内网穿透:基于centos8 云服务器和debian12客户端服务器

    前言 入了一台本地工控机盒子,刷成了debian12系统,性能比云服务器要好一点,现在想要远程访问这台盒子,但是盒子又没有公网地址,所以想通过内网穿透的方式,通过云服务器转发请求实现内网穿透.原来体验 ...

  4. MViTv2:Facebook出品,进一步优化的多尺度ViT | CVPR 2022

    论文将Multiscale Vision Transformers (MViTv2) 作为图像和视频分类以及对象检测的统一架构进行研究,结合分解的相对位置编码和残差池化连接提出了MViT的改进版本 来 ...

  5. vue项目坑记录:vue项目运行卡在百分之几几几

    今天晚上打着游戏,同事突然叫我拉项目下来运行,我打完就去拉代码了,结果vue项目运行卡在66%不动了,我也是百度一下分享别人怎么解决的文章给他,继续我的游戏! 结果呢? 游戏结束后,我拉代码,还是这个 ...

  6. 题解:P10320 勇气(Courage)

    P10320 勇气(Courage) 推导过程 本题是一道数学题,重点是如何推导出正确式子. 首先,先特判几个特殊点: 当 \(n>=2\) 且 \(x=2\) 时,是不存在解的,战斗力无论何时 ...

  7. DASCTF 2023六月挑战赛|二进制专项 PWN (上)

    DASCTF 2023六月挑战赛|二进制专项 PWN (上) 1.easynote edit函数对长度没有检查 free函数存在UAF漏洞 思路:1.通过堆溢出,UAF,修改size位达到堆块重叠,使 ...

  8. 使用ventoy安装windows10

    使用ventoy安装windows10 在ventoy中选择windows10镜像 进入Windows安装界面 下一步,选择现在安装 稍等片刻 选择我没有产品密钥 根据需求选择对应版本 下一步,接受许 ...

  9. 认识netty的基本组件

    Java NIO VS Netty 有了 Java NIO,而且 Netty 也是基于 Java NIO 实现,那么为什么不能直接用 Java NIO 来实现网络通信模块呢? 接下来我就给大家解释一下 ...

  10. 【CentOS】rpm包安装Jdk

    1.系统环境检查 前提情要:[如果是使用虚拟机的Linux系统,强烈建议先打个快照备份一下,以免操作失误无法重来] 首先查看系统是否存在java环境 java -version 因为点选了环境工具,这 ...