WSL学习笔记
WSL学习笔记
适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。
本笔记主要介绍WSL2。
WSL的版本区别
WSL有两个版本,两个版本不仅在名字上,在技术内核上也有巨大区别:
- WSL1:是较早的版本,通过将Linux内核调用转换为Windows内核调用,使得Linux应用程序可以在Windows上运行。虽然性能比起传统虚拟机要好,但还是有一些局限性,例如I/O性能相对较低。对于WSL1你可以理解为将Linux翻译成Windows进行执行,本质上并不运行真正的Linux的系统,因此存在着缺陷。
- WSL2:是较新的版本,使用了真正的Linux内核,运行在轻量级的虚拟机中。它提供了更好的性能,尤其是在文件I/O操作上。同时,WSL 2能够更好地兼容Linux应用程序,几乎所有在Linux上能运行的应用程序都可以在WSL 2上运行。实际上整个Windows和Linux都运行在基于Hyperv的虚拟化平台上,本质上是一个大虚拟机,你可以理解为WSL2上运行的是真正的Linux系统,具有完整Linux内核的系统。
| 功能 | WSL 1 | WSL 2 |
|---|---|---|
| Windows 和 Linux 之间的集成 | ||
| 启动时间短 | ||
| 与传统虚拟机相比,占用的资源量少 | ||
| 可以与当前版本的 VMware 和 VirtualBox 一起运行 | ||
| 托管 VM | ||
| 完整的 Linux 内核 | ||
| 完全的系统调用兼容性 | ||
| 跨 OS 文件系统的性能 | ||
| systemd 支持 | ||
| IPv6 支持 |
WSL2使用的前置条件
CPU虚拟化

Windows功能
其中有两个功能:
- 虚拟化平台
- 适用于Linux的Windows子系统

安装系统
直接使用powershell进行安装:
wsl --install --web-download
其中web-download是其中的一个选项,此选项会从微软的在线服务器下载并安装最新的WSL版本、Linux内核和相关组件,而不依赖于你当前Windows系统中的Windows Update或预装包。这个选项非常有用,尤其是在你希望确保安装最新版本的WSL时,或者当你的系统配置限制了使用本地或离线安装时。
如果在国内环境的话建议使用,减少了因为网络问题而无法下载的问题
此时下载完成之后会显示:

之后安装要求输入root用户名与密码:

安装完成之后会自动进入终端:

即默认WSL安装完成
其他版本WSL安装
目前WSL2已经支持几乎所有的Linux发行版,我们可以通过以下指令进行查看:
wsl --list --online

常见的官方支持的发行版有:
| NAME | FRIENDLY NAME |
|---|---|
| Ubuntu | Ubuntu |
| Debian | Debian GNU/Linux |
| kali-linux | Kali Linux Rolling |
| Ubuntu-18.04 | Ubuntu 18.04 LTS |
| Ubuntu-20.04 | Ubuntu 20.04 LTS |
| Ubuntu-22.04 | Ubuntu 22.04 LTS |
| Ubuntu-24.04 | Ubuntu 24.04 LTS |
| OracleLinux_7_9 | Oracle Linux 7.9 |
| OracleLinux_8_7 | Oracle Linux 8.7 |
| OracleLinux_9_1 | Oracle Linux 9.1 |
| openSUSE-Leap-15.6 | openSUSE Leap 15.6 |
| SUSE-Linux-Enterprise-15-SP5 | SUSE Linux Enterprise 15 SP5 |
| SUSE-Linux-Enterprise-Server-15-SP6 | SUSE Linux Enterprise Server 15 SP6 |
| openSUSE-Tumbleweed | openSUSE Tumbleweed |
其他一些发行版可以通过其他方式进行安装,可以通过下载root文件手动安装,本文在这里不做介绍
这里我们安装Kali-linux:
wsl --install kali-linux --web-download
其安装过程与安装Ubuntu类似

WSL的基本指令
1.系统镜像管理:
wsl --list -v
这里显示了WSL中所有的子系统以及运行状态

其中*代表目前WSL中默认启动的系统
- 默认系统的切换:
wsl --set-default <NAME>
这里的NAME指的是系统的名字,请务必注意区分大小写,比如说我现在切换为Ubuntu:
wsl --set-default Ubuntu

之后我们再执行1中的命令:

此时默认系统以及被切换为Ubuntu
- 系统的启动:
PowerShell右上箭头,后打开后选中你想要运行的系统:

启动速度很快,几乎秒开(看人缘 偶尔快):

如果你想要通过命令行启动系统,可以使用:
wsl -d <NAME>

- 系统的关闭:
直接关闭终端
使用
exit,出现logout即为退出登录成功

- 系统的删除:
wsl --unregister <NAME>

- 镜像的导出:
wsl --export <NAME> <EXPORT NAME>

之后再对应文件夹内即可看到tar文件,进入文件后不难看出其包含了基本的Linux文件结构

如果你想要切换其他的压缩格式,比如说7z、rar等等,你可以更改文件后缀名,比如说Ubuntu.7z等等
- 镜像的导入:
wsl --import <NAME> <导入路径> <导出镜像路径>

之后进入导入路径查看:

这更加证实了WSL2是基于Hyperv的既定事实
关于子系统的一些
- 磁盘挂载:

Windows下的C盘与D盘是作为磁盘直接挂载在WSL下的,这意味着两个文件是相通的
但由于WSL的I/O性能很弱,如果你需要进行大量文件拷贝的操作的话,可以采取内网传输的方法
- 包管理器:
之前说了WSL中运行的是完整Linux,因此我们可以直接使用包管理器进行安装,不过需要注意的是,使用前需要先进行
apt update
之后再进行安装,不然有可能会出错
- 显卡直连:
WSL本身支持显卡直连,你需要安装以下步骤:
你需要安装适用于 Windows 的最新 NVIDIA 驱动程序,确保其支持 CUDA 和 WSL 2。
安装CUDA工具包:
- 添加 CUDA 存储库:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7FA2AF80
sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
sudo apt-get update
- 安装 CUDA 工具包:
sudo apt-get install nvidia-cuda-toolkit
安装驱动:
sudo apt-get install nvidia-utils-535
- 验证:
nvidia-smi

- GUI显示:
这个对我来说没啥用意义,不写了。。。
如果你感兴趣的话不妨访问:小树 | WSL学习笔记
WSL学习笔记的更多相关文章
- The Missing Semester - 第一讲 学习笔记
The Missing Semester - 第一讲 学习笔记 第一讲 课程概览与 shell 课程视频地址: https://www.bilibili.com/video/BV1Eo4y1d7KZ/ ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- MySql 主从(备)部署 | 冷备份
前言 MySQL 主从复制(Master-Slave Replication)是一种常见的数据库架构设计,用于提高数据可用性.实现读写分离以及支持备份策略.冷备份是指在数据库关闭状态下进行的数据备份方 ...
- [Qt基础-07 QSignalMapper]
QSignalMapper 本文主要根据QT官方帮助文档以及日常使用,简单的介绍一下QSignalMapper的功能以及使用 文章目录 QSignalMapper 简介 使用方法 主要的函数 信号和槽 ...
- rust学习笔记(6)
模块 定义自己的模块,方便外部的调用 mod可以嵌套 可见程度 分为private和public 其中pub可以分为模块内可见和模块外可见 mod也遵循可见性的要求 // 一个名为 `my_mod` ...
- 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
前言 今天大姚给大家分享 3 个 .NET 开源.免费的文件压缩处理库,希望可以快速帮助同学们实现文件压缩和解压功能! SharpCompress SharpCompress 是一个基于 C# 编写的 ...
- 解决vscode"无法加载文件 ,因为在此系统上禁止运行脚本"报错
问题 在使用 vscode 自带程序终端时,会报"无法加载文件 ,因为在此系统上禁止运行脚本",这是因为 PowerShell 执行策略的问题. > tsc --init t ...
- useSyncExternalStore 的应用
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:修能 学而不思则罔,思而不学则殆 . --- <论语 ...
- Docker启动关闭所有容器命令
docker中 启动所有的容器命令 docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker中 关闭所有的容器命令 do ...
- UNIQUE VISION Programming Contest 2025 Spring (AtCoder Beginner Contest 398) (A~F) 补题+题解
A - Doors in the Center 签到题,直接构造即可. 点击查看代码 #include<bits/stdc++.h> using namespace std; #defin ...
- 面试题:Linux 系统基础 (二)
Linux系统中的定时任务有哪些类型,它们是如何配置的? Linux系统中的定时任务主要有两种类型:Cron作业和at作业. 1.Cron作业: 使用crontab命令配置和管理. 配置周期性执行的任 ...
- dxSpreadSheet的报表demo-关于设计报表模板的Datagroup问题
看随机的报表DEMO,主从表也好,数据分组也好.呈现的非常到位. 问题:可是自己在实现数据分组时,一旦设定分组字段就出现了混乱的数据记录. 问题的原因: 看一下一个报表页面设计时需要理清的概念. 页头 ...