玩转WSL子系统(一)

玩转WSL子系统(一)

WSL介绍

WSL(Windows Subsystem for Linux,Windows 下的 Linux 子系统)是微软在 Windows 10 和 Windows 11 中推出的一项功能,允许用户在 Windows 系统中运行完整的 Linux 环境,而无需安装虚拟机或双系统。

至今,WSL 有两个主要版本

​ 这里我使用 WSL2 版本。不同于 WSL1 通过翻译层模拟 linux 系统功能,WSL2 改为使用定制的虚拟机运行完整的 Linux 内核。主要是看中了"可以运行docker"、"无需配置网络"和"文件系统无缝互访"几个特性。

相对于双系统、虚拟机软件,资源占用更少、启动速度更快

相对于 WSL1、容器一类,更接近linux裸机环境,兼容性更好

安装WSL子系统

想要使用wsl 2版本,需要Windows 11 23H2 及以上的版本

或win10 v2004 的内部版本 19041 或更高版本。

这里,主机系统使用的是Windows 11 23H2 版本

启用windows功能

在桌面导航栏的搜索框中搜索"启用或关闭windows功能"

在这里插入图片描述

把”适用于Linux的Windows子系统“和”虚拟机平台“点上

在这里插入图片描述

重启Windows。

# 更新wsl包
wsl --update

# 查看版本
wsl --sersion

打开 Microsoft Store(微软应用商店),下载Ubuntu 24.04.1 LTS

在这里插入图片描述

在这里插入图片描述

首次启动需要设置用户名和密码,推荐用户名为”ubuntu“。

设置好后等待初始化完成。

# 此时,才可以看到wsl分发版的信息
wsl --list
基础设置

在这里插入图片描述

# 修改wsl.conf文件,禁止自动配置
sudo vim /etc/wsl.conf
# 添加
[network]
hostname = Linux-WSL
generateHosts = false

# 修改主机名
sudo vim /etc/hostname
# 将文件内容改为 Linux-WSL

# 修改hosts
sudo vim /etc/hosts

# 127.0.1.1,所在行改为
127.0.1.1       Linux-WSL

# 三个文件保存好后,关掉ubuntu窗口
# 关闭wsl子系统
wsl --shutdown

在C:\Users<windows用户名>路径下,创建一个.wslconfig文件并写入

[wsl2]
# 内存四G
memory=4GB
# cpu核心2个
processors=2

[experimental]
# 开启自动回收内存,可在 gradual, dropcache, disabled 之间选择
autoMemoryReclaim=gradual
# 开启镜像网络
networkingMode=mirror
# 开启 DNS Tunnelinged
dnsTunneling=true
# 开启 Windows 防火墙
firewall=true
# 开启自动同步代理
autoProxy=true
# 开启自动释放 WSL2 虚拟硬盘空间
sparseVhd=true

再次,打开终端。执行 ipconfig.exe 命令

在这里插入图片描述

可以看到主机的ip和ubuntu wsl的ip一致(红框),主机名也改为了Linux-WSL(蓝色划线)。这说明wsl ubuntu已启用镜像网络模式。

WSL2 镜像网络

​ 早期WSL版本中,其网络架构导致Web服务在外部网络中的访问受限,WSL被视为局域网中的独立设备,这不仅增加了网络配置的复杂性,还可能引发连接延迟和不稳定的问题。

​ WSL2及其2.0.0版本引入了镜像网络功能,该功能促进了WSL2与Windows宿主机的网络整合,使WSL2更贴近Windows系统的功能组件,而不是定制的虚拟机。对外部而言,WSL提供的web服务就是windows宿主机提供的web服务

​ 实现了在Windows环境下,开发者能够顺利完成Linux应用的全部开发工作。无论是团队调试、项目演示,还是内部试用,都不再需要依赖虚拟机、双系统或服务器等独立的Linux环境。

验证一下网络可行性

默认情况下,Ubuntu只有openssh-client 客户端没有openssh-server 服务器。也就是只能登录其他机器,而不能被远程控制。

如何在局域网的其他主机上中访问本机的WSL2文章中有提到两个镜像网络使用演示。以及防火墙、端口转发等功能,我这边没用就不讲了

由于ssh服务是单向的,这里就使用web文件目录服务器验证一下网络。

wsl
cd ~
# 启动python的文件目录服务器
python3 -m http.serve

在Windows主机中访问:

在这里插入图片描述

迁移wsl子系统(可选)

使用wsl命令或Microsoft Store(微软应用商店)下载的linux实例默认安装在C盘(系统盘)。而默认情况下C盘空间有限,随着WSL子系统的使用,C盘空间越来越少,最后有可能出现C盘不足导致WSL系统崩溃。

我这里将WSL子系统迁移到空间更大的D盘(非系统盘)

# 确认停止WSL子系统
wsl --shutdown
wsl -l -v

在这里插入图片描述

# 导出系统镜像
wsl --export Ubuntu-24.04 D:\WSL-Ubuntu\Ubuntu-24.04.tar
# 确认导出成功
ls -l D:\WSL-Ubuntu

在这里插入图片描述

# 注销系统,并根据系统镜像安装到新的位置
wsl --unregister Ubuntu-24.04
wsl -l -v
wsl --import Ubuntu-24.04 D:\WSL-Ubuntu D:\WSL-Ubuntu\Ubuntu-24.04.tar --version 2

wsl --import <系统名称> <安装位置的路径> <系统镜像的路径> --version 2 (代表wsl2)

在这里插入图片描述

迁移成功后,发现默认登录用户变成了 root,这是因为没在wsl.conf指定默认登陆用户, 为了防止一些权限隐患问题,需要改回安装时候的用户。

但在这之前,

# 设置一下wsl默认启动的Linux系统
wsl --set-default Ubuntu-24.04
wsl -l

在这里插入图片描述

在wsl ubuntu命令行中

vim /etc/wsl.conf

# 编辑文件,是内容如下
[boot]
systemd = true

[user]
default = ubuntu

[network]
hostname = Linux-WSL
generateHosts = false

然后重启wsl,完毕

使用教程

网络互访-演示步骤

  1. 在WSL2中访问Windows资源
    • 打开WSL2终端。
    • 使用ping localhost命令验证是否能够成功访问Windows宿主上的资源。由于镜像网络模式使得WSL2和Windows宿主共享同一网络,因此可以通过localhost127.0.0.1来访问Windows上的服务。
    • 例如,如果Windows上运行了一个Web服务器,可以在WSL2中使用curl http://localhost:端口号来访问该服务器。
  2. 在Windows中访问WSL2资源
    • 打开Windows命令提示符或PowerShell。
    • 同样使用ping localhost命令验证从Windows到WSL2的连接。
    • 如果WSL2中运行了某个服务(如MySQL数据库),可以在Windows中使用相应的客户端工具(如MySQL Workbench)通过localhost和相应的端口号来连接该服务。

文件互访-演示步骤

  1. 在WSL2中访问Windows文件
    • 打开WSL2终端。
    • 使用/mnt/c路径来访问Windows的C盘文件系统。例如,要访问Windows桌面上的某个文本文件,可以使用nano /mnt/c/Users/用户名/Desktop/文件名.txt命令来编辑该文件。
  2. 在Windows中访问WSL2文件
    • 在Windows文件资源管理器中,输入\\wsl$来浏览WSL2中的文件和目录。
    • 也可以直接在WSL2终端中使用cpmv等命令将文件复制到/mnt/c或其他Windows可访问的路径下,然后在Windows中访问这些文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值