作为Windows系统内置的一个革命性新功能,Windows Subsystem for Linux(WSL)让开发者在Windows环境中直接体验Linux的强大功能。你可以在Windows上一键安装各种Linux发行版,运行命令行工具、编程语言环境、数据库和服务器等,还能运行Linux GUI应用程序并与Windows桌面无缝集成。最新的WSL 2版本更是在文件系统、GPU利用、系统集成等多方面有突破性提升,成为Windows开发者高效使用Linux,提高跨平台开发效率的最佳拍档。
WSL
WSL是适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导。WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。
- • 使用 WSL 安装和运行各种 Linux 发行版,例如 Ubuntu、Debian、Kali 等。 安装 Linux 发行版[1]并从 Microsoft Store[2] 接收自动更新、导入 Microsoft Store 中不可用的 Linux 发行版[3],或构建你自己的客户 Linux 发行版[4]。
- • 将文件存储在独立的 Linux 文件系统中,具体取决于安装的发行版。
- • 运行命令行工具,例如 BASH。
- • 运行常用的 BASH 命令行工具(例如
grep
、sed
、awk
)或其他 ELF-64 二进制文件。 - • 运行 Bash 脚本和 GNU/Linux 命令行应用程序,包括:
- • 工具:vim、emacs、tmux
- • 语言:NodeJS[5]、JavaScript、Python[6]、Ruby、C/C++、C# 和 F#、Rust、Go 等。
- • 服务:SSHD、MySQL[7]、Apache、lighttpd、MongoDB[8]、PostgreSQL[9]。
- • 使用自己的 GNU/Linux 分发包管理器安装其他软件。
- • 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。
- • 在 Windows 上调用 GNU/Linux 应用程序。
- • 运行直接集成到 Windows 桌面的 GNU/Linux 图形应用程序[10]
- • 使用你的设备 GPU 加速 Linux 上运行的机器学习工作负载[11]。
WSL 有着不同的版本,其中 WSL 2 现在是默认版本
比较 WSL 1 和 WSL 2
功能 | WSL 1 | WSL 2 |
Windows 和 Linux 之间的集成 | ✅ | ✅ |
启动时间短 | ✅ | ✅ |
与传统虚拟机相比,占用的资源量少 | ✅ | ✅ |
可以与当前版本的 VMware 和 VirtualBox 一起运行 | ✅ | ❌ |
托管 VM | ❌ | ✅ |
完整的 Linux 内核 | ❌ | ✅ |
完全的系统调用兼容性 | ❌ | ✅ |
跨 OS 文件系统的性能 | ✅ | ❌ |
systemd 支持 | ❌ | ✅ |
IPv6 支持 | ✅ | ✅ |
WSL和VirtualBox,VMware对比
特性 | VMware | VirtualBox | WSL |
类型 | 基于 Hypervisor 的虚拟化 | 基于 Hypervisor 的虚拟化 | 操作系统级虚拟化 |
虚拟化 | 在主机操作系统上运行虚拟机 | 在主机操作系统上运行虚拟机 | 在 Windows 内核上运行 Linux |
客操作系统支持 | 广泛的操作系统支持(Linux、Windows、macOS) | 广泛的操作系统支持(Linux、Windows、macOS) | 仅限于 Linux 发行版 |
资源使用 | 高 | 中等 | 低 |
复杂度 | 复杂的设置和管理 | 复杂的设置和管理 | 易于设置和管理 |
高级功能 | 快照、克隆、VMotion | 快照、克隆、USB 设备支持 | 无 |
与 Windows 集成 | 有限的集成 | 有限的集成 | 无缝集成 |
使用场景 | 运行非 Linux 操作系统、资源密集型工作负载 | 运行非 Linux 操作系统、资源密集型工作负载 | 运行 Linux 环境、DevOps、测试 |
接下来,我们说说WSL的安装使用。
windows 设置
1. 打开控制面板 点击程序
2. 点击启用或者关闭windows功能
3. 开启下面红框选项
4.之后确定并且重启
配置好了,然后可以安装 ubuntu.
安装Ubuntu20.04到C盘
安装在 C 盘安装比较简单,直接在 Windows 应用商店 下载 Ubuntu 20.04 安装即可。
你可以从 打开 microsoft store安装, 快捷键 win + q 输入 microsoft Store 打开微软商店 搜索 ubuntu 点击获取。ubuntu 有很多的版本,建议选择较新的版本,版本之间的差距不是很大。
如果你是中国用户,因为网络原因 无法打开microsoft store 可以去官网上安装。
https://learn.microsoft.com/en-us/windows/wsl/install-manual
下载完成后一路点击next 安装就可以, 安装成功就你就可以在你的电脑中看到你的Linux子系统了。
安装Ubuntu20.04到D盘
下面是将 Ubuntu20.04 安装在D盘的部分:
首先先在你喜欢的盘创建一个文件夹,比如D:\wsl\ubuntu20.04
,我比较喜欢D盘,因为这样即便是重装系统我也不用重新装软件。
然后进到这个文件夹 下载ubuntu20.04
Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing
我演示用的是D:\wsl\ubuntu20.04
,等他下载完即可,文件有432M多,等一会是正常的
然后执行下面四条命令。如下图
Rename-Item .\Ubuntu20.04.appx Ubuntu.zip Expand-Archive .\Ubuntu.zip -Verbose cd .\Ubuntu\ .\ubuntu2004.exe
这个图我是直接进了wsl,因为我已经安装过了。你们第一次安装的话会弹出一个黑框框等几分钟这样,然后输你想要的入用户名和密码就行
最后可以在powershell里面 , 看看自己安装的版本
$ wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2
Ubuntu20.04:apt换源
因为我们国内访问外网比较慢,所以我一般是会换成清华源,另外请注意,wsl的Ubuntu证书是过期的,如果你想手动换源的话请记得先更新证书
不过我已经写好脚本了
直接在Linux里执行,即可换成清华源
wget https://gitee.com/lin-xi-269/tools/raw/master/os/QHubuntu20.04 && bash QHubuntu20.04
apt换源脚本
# https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ VERSION=QH20.04 sudo apt-get install --only-upgrade ca-certificates wget https://gitee.com/lin-xi-269/tools/raw/master/source/$VERSION sudo mv /etc/apt/sources.list /etc/apt/sources.list.back sudo mv $VERSION /etc/apt/sources.list sudo apt-get update sudo apt-get upgrade
apt源内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse # 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
WSL高级用法
1. 限制内存
当计算机在使用时,CPU会将需要操作的数据传输到内存中进行操作,然后在操作完成后传递结果。WSL2(Linux 的 Windows 子系统)即使在不需要时也会保留大量RAM。它可以消耗 Windows 上总内存的 50% 或 8GB,以较小者为准;在 20175 之前的版本上:Windows 上总内存的 80%。Vmmem 负责虚拟机进程和内存管理。这意味着进程是虚拟机跳动的心脏,Vmmem 的所有活动和应用程序都在此发生。用户设置具有大量内存和 CPU 的虚拟机是 Vmmem 需要大量内存的主要原因,因为这通常会导致他们消耗所有可用资源。
解决方法
按下Windows + R 键,输入 %UserProfile% 并运行进入用户文件夹
新建文件 .wslconfig ,如果存在就覆盖,重新配置一个,然后记事本编辑:
# Settings apply across all Linux distros running on WSL 2 [wsl2] memory=4GB swap=2GB localhostforwarding=true
参数解释:
- •
memory
:分配给WSL的内存,根据自己的内存去分配哦,我的内存是16G的,我分配了4G - •
swap
:设置交换分区的容量 - •
localhostForwarding
:用于指定绑定到 WSL VM 中的通配符或 localhost 的端口是否应可通过localhost:port
从主机连接。
WSL 将检测这些文件是否存在、读取内容,并在每次启动 WSL 时自动应用配置设置。
保存文件后,重启 WSL
wsl --shutdown
或者重启计算机也行
查看 linux 内存,进入 linux 输入如下:
$ free -h total used free shared buff/cache available Mem: 3.8Gi 79Mi 3.7Gi 0.0Ki 35Mi 3.6Gi Swap: 2.0Gi 0B 2.0Gi
wsl.conf[12] 和 .wslconfig[13] 文件用于针对每个发行版 (wsl.conf
) 和全局跨所有 WSL 2 发行版 (.wslconfig
) 配置高级设置选项。本指南将介绍每个设置选项、何时使用每种文件类型、存储文件的位置、示例设置文件和提示。
wsl.conf 和 .wslconfig 之间有什么差别?
参考:WSL 中的高级设置配置[14]
可以为已安装的 Linux 发行版配置设置,使它们在你每次启动 WSL 时自动应用,有两种方法:
- • .wslconfig[15] 用于在 WSL 2 上运行的所有已安装发行版中配置全局设置。
- • wsl.conf[16] 用于为在 WSL 1 或 WSL 2 上运行的每个 Linux 发行版按各个发行版配置本地设置。
这两种文件类型都用于配置 WSL 设置,但存储文件的位置、配置的范围、可配置的选项类型,以及运行发行版的 WSL 版本都会影响应选择的文件类型。
WSL 1 和 WSL 2 使用不同的体系结构运行,并会影响配置设置。WSL 2 作为轻型虚拟机 (VM) 运行,因此请使用让你能够控制内存或处理器使用量的虚拟化设置(使用 Hyper-V 或 VirtualBox 的话可能会比较熟悉)。
2. Xshell连接wsl2下的Ubuntu
卸载ssh,再安装ssh
sudo apt-get remove --purge openssh-server ## 先删ssh sudo apt-get install openssh-server ## 在安装ssh sudo rm /etc/ssh/ssh_config sudo service ssh --full-restart
修改配置文件
sudo vim /etc/ssh/sshd_config
更改以下配置项
Port 6666 ListenAddress 0.0.0.0 PasswordAuthentication yes PermitRootLogin yes
给wsl设置root密码
sudo passwd root
连接xshell
主机号设置为127.0.0.1,端口号设为刚刚设置的6666,即可连接
3. Windows和Linux文件互访
windows访问Linux目录
wsl2的套路变了,linux的文件系统整个是个镜像文件,启动系统后,这个文件系统映射到了 \\wsl$\系统名
下面
\\wsl$\Ubuntu-20.04\
image-20240428115043790
Linux访问windows文件
windows的磁盘被挂载到了/mnt下,可以直接访问
$ ll /mnt total 8 drwxr-xr-x 5 root root 4096 Apr 27 13:51 ./ drwxr-xr-x 19 root root 4096 Apr 28 11:03 ../ drwxrwxrwx 1 fly fly 4096 Apr 27 14:23 c/ drwxrwxrwx 1 fly fly 4096 Apr 27 13:51 d/ drwxrwxrwt 2 root root 60 Apr 28 11:03 wsl/
4. WSL常用命令
https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
wsl --status //检查 WSL 状态 wsl //进入默认的发行版本,退出执行 exit wsl -l -v //列出已安装的 Linux 发行版 wsl --terminate //终止指定的发行版或阻止其运行 例:wsl --terminate Ubuntu-18.04 wsl --shutdown //重启wsl服务 wsl --set-default //设置默认 Linux 发行版 wsl --set-version //将WSL版本设置为1或2 wsl --set-default-version //设置默认 WSL 版本 wsl --distribution --user //运行特定的Linux发行版 wsl -u , wsl --user //以特定用户的身份运行 wsl config --default-user //更改发行版的默认用户 wsl --unregister //注销或卸载 Linux 发行版
window terminal
如果你在你的window电脑中有多个window子系统, 你可以下载 window terminal 来进行管理 。
使用 Windows 终端可以打开多个标签页或窗口窗格,显示并快速切换多个 Linux 发行版或其他命令行(PowerShell、命令提示符、Azure CLI 等)。你可以使用独特的配色方案、字体样式、大小、背景图片和自定义键盘快捷键完全自定义你的终端。
下载地址: https://learn.microsoft.com/en-us/windows/terminal/install
常见问题
1. Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel
如果你安装过程出现了错误, 可能需要你把wsl升级到wsl2
.\ubuntu2004.exe Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x800701bc Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel Press any key to continue...
- 2. 下载并安装 wsl 2 的升级软件
- 1. Linux 内核更新包会安装最新版本的 WSL 2 Linux 内核[17],以便在 Windows 操作系统映像中运行 WSL。(若 要运行 Microsoft Store 中的 WSL[18] 并更频繁地推送更新,请使用
wsl.exe --install
或wsl.exe --update
。) - 2. 运行上一步中下载的更新包。(双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
3.将 WSL 2 设置为默认版本
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
4.然后重新打开 ubuntu,显示正在安装就没有问题了
2. Windows下WSL Ubuntu中登录root账号的密码
今天刚从Microsoft Store中下载了Ubuntu 20.04 LTS,使用的时候发现只能注册自己的个人账户,而不是root账户,那也就是说自己一开始设置的账户密码无法登录root账户,因此想到可能是系统有默认的密码,后面上网查看才知道,原来是这样的:
Ubuntu 的默认 root 密码是随机的,即每次开机都有一个新的 root 密码。
我们可以在终端输入命令 sudo passwd
,然后输入当前用户的密码,终端会提示我们输入新的密码并确认,此时的密码就是 root 新密码。
修改成功后,输入命令 su root
,再输入新的密码就 ok 了。
引用链接
[1]
安装 Linux 发行版: https://learn.microsoft.com/zh-cn/windows/wsl/install
[2]
Microsoft Store: https://learn.microsoft.com/zh-cn/windows/wsl/compare-versions#wsl-in-the-microsoft-store
[3]
导入 Microsoft Store 中不可用的 Linux 发行版: https://learn.microsoft.com/zh-cn/windows/wsl/use-custom-distro
[4]
构建你自己的客户 Linux 发行版: https://learn.microsoft.com/zh-cn/windows/wsl/build-custom-distro
[5]
NodeJS: https://learn.microsoft.com/zh-cn/windows/nodejs/setup-on-wsl2
[6]
Python: https://learn.microsoft.com/zh-cn/windows/python/web-frameworks
[7]
MySQL: https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-database
[8]
MongoDB: https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-database
[9]
PostgreSQL: https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-database
[10]
GNU/Linux 图形应用程序: https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps
[11]
GPU 加速 Linux 上运行的机器学习工作负载: https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gpu-compute
[12]
wsl.conf: https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#wslconf
[13]
.wslconfig: https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#wslconfig
[14]
WSL 中的高级设置配置: https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config
[15]
.wslconfig: https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#wslconfig
[16]
wsl.conf: https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#wslconf
[17]
WSL 2 Linux 内核: https://github.com/microsoft/WSL2-Linux-Kernel
[18]
Microsoft Store 中的 WSL: https://learn.microsoft.com/zh-cn/windows/wsl/compare-versions#wsl-in-the-microsoft-store