当前位置: 首页 > news >正文

WSL在 Windows 上使用 Linux 工具链和开发环境

WSL 是什么?

WSL(Windows Subsystem for Linux) 是微软为 Windows 系统提供的一种兼容层,它允许用户在 Windows 操作系统上直接运行 Linux 用户空间环境,而不需要使用虚拟机或双系统。WSL 特别适合开发人员在 Windows 上使用 Linux 工具链和开发环境。

主要版本

WSL 1 2016 使用 Windows 内核的兼容层翻译 Linux 系统调用
WSL 2 2020 使用真正的 Linux 内核运行,性能更好,兼容性更强

WSL 的工作原理

  1. WSL 1 工作原理(兼容层)
    本质上是一个系统调用转发器。当 Linux 程序调用系统 API(如读写文件、网络请求等)时,WSL 1 会把这些调用转换成 Windows 系统调用。没有使用真正的 Linux 内核,而是一个兼容层模拟。
    优点: 启动快,占用资源少;
    缺点: 与原生 Linux 内核不完全兼容,如 Docker 无法直接运行。

  2. WSL 2 工作原理(轻量虚拟机)
    WSL 2 使用了 真正的 Linux 内核,运行在 轻量级的 Hyper-V 虚拟机 中(称为 Utility VM)。Linux 文件系统(如 ext4)存储在一个虚拟磁盘(.vhdx 文件)中。使用 9P 文件系统协议 将 Windows 和 Linux 文件系统互相挂载,支持双向文件访问。与 Windows 网络桥接,实现互通。
    优点:
    完整兼容 Linux 系统调用;
    支持 Docker、systemd 等;
    更快的文件系统性能(尤其是 Linux 内部操作)。
    缺点:
    启动稍慢;
    文件互访(Windows <-> Linux)可能存在性能瓶颈。

为什么使用 WSL?

在 Windows 上无缝使用 Linux 工具链如:gcc, python, bash, make, git, apt, vim 等。方便开发跨平台项目特别是需要 Linux 构建环境(如 AI 模型部署、容器开发)。低资源开销相比 VirtualBox、VMWare 更轻量。支持图形界面(WSLg)在 WSLg 支持下,甚至可以运行 Linux GUI 程序(如 gedit、code)。
WSL 与 Docker 的结合
WSL 2 中可以直接运行 Docker Desktop,并在 Linux 内核中执行容器;不需要使用 Hyper-V 方式启动虚拟机,资源占用更低;支持 VSCode + Remote - WSL 插件进行跨系统开发调试。

具体使用流程

windows默认会带wsl1版本我们先手动升级到2->https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-3—enable-virtual-machine-feature官网下载内核升级包即可

  • 选择版本
wsl --set-default-version 2
  • 下载Ubuntu22.04(看个人需要)
wsl --install Ubuntu-22.04
  • 查看安装的环境和版本
C:\Users\DELL>wsl --list --verboseNAME            STATE           VERSION
* Ubuntu-22.04    Running         2
  • 进入虚拟环境
wsl -d Ubuntu-22.04

在这里插入图片描述

  • 将D盘空间软链接到wsl中,方便文件操作
D盘新建WSL/ubuntu22.04/
ln -s /mnt/d/WSL/ubuntu22.04/ workspace
  • 升级apt、安装自己需要的库等,略
sudo apt-get update
http://www.dtcms.com/a/288198.html

相关文章:

  • 慕尼黑工业大学具身机器人实时环境探索!FindAnything:基于开放词汇对象中心映射的机器人任意环境认知与导航
  • FLASH:GPU 集群全连接通信的近最优极速调度
  • Keil编译文件格式转换全解析
  • 5 基于STM32单片机的绝缘检测系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)
  • QT窗口(5)-对话框
  • 基于朴素贝叶斯的姓名性别预测系统
  • 如何构建未来的人-AI-环境智能教育生态系统
  • Java并发8--并发安全容器详解
  • 关于Vuex
  • uhd_find_devices有serial但是GNU Radio显示find no devices
  • Vue rem回顾
  • YOLOv8中添加SENet注意力机制
  • XSS-Labs 各关卡测试过程
  • 统计学习方法
  • 如何解决 ext4 文件系统的元数据损坏问题
  • 【深度强化学习】MIP-DQN 实现案例(完整Python代码)
  • [spring6: IntroductionAdvisor IntroductionInterceptor]-源码分析
  • C++编程学习(第11天)
  • Patch-wise Structural:一种引入局部统计特性的时序预测损失函数
  • eNSP综合实验(DNCP、NAT、TELET、HTTP、DNS)
  • 定时器中BDTR死区时间和刹车功能配置
  • debian的pulseaudio删掉也没事
  • Go语言pprof性能分析指南
  • SIMATIC WinCC Unified 使用 KPI 优化流程
  • 永磁同步电机无速度算法--脉振正弦注入法
  • Kakfa集群部署及主题创建
  • haproxy七层代理
  • day7--绑定媒资、课程发布
  • kafka--基础知识点--6--AR、ISR、OSR
  • Mysql系列--3、数据类型