Windows就是Linux:WSL带来全新Linux开发体验

简介: Windows就是Linux:WSL带来全新Linux开发体验

作为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 命令行工具(例如 grepsedawk)或其他 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. 打开控制面板 点击程序

49a3a21a31130d7b296ed5ed0a27e3cf.jpg



2. 点击启用或者关闭windows功能


c1a36e5b633ebaa9d038292cf443daa0.jpg

3. 开启下面红框选项


460fe53bb2b046b289201877c1ac9b74.jpg

4.之后确定并且重启


6f33121293b593349d151f01ab8fc522.jpg


配置好了,然后可以安装 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

f4599fe8202db462296957ec692f19c5.jpg


下载完成后一路点击next 安装就可以, 安装成功就你就可以在你的电脑中看到你的Linux子系统了。


7b9502353001e743e8206e69784a330a.jpg


安装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


336818bc2b8b430d516deab77d948c6d.jpg

常见问题


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...


  1. 1. 复制并访问地址https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package


  1. 2. 下载并安装 wsl 2 的升级软件


  1. 1. Linux 内核更新包会安装最新版本的 WSL 2 Linux 内核[17],以便在 Windows 操作系统映像中运行 WSL。(若 要运行 Microsoft Store 中的 WSL[18] 并更频繁地推送更新,请使用 wsl.exe --installwsl.exe --update。)
  2. 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

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
1天前
|
Ubuntu 安全 Linux
|
2月前
|
Linux 数据安全/隐私保护 Windows
Linux共享Windows目录
Linux共享Windows目录
|
17天前
|
存储 Linux 编译器
cmake的单目录和多目录的使用(Linux和Windows)
本文介绍了在Windows和Linux平台上使用CMake构建单目录和多目录项目的步骤,包括如何配置CMakeLists.txt文件以及如何生成和使用可执行文件、库文件。
14 2
|
11天前
|
关系型数据库 MySQL Linux
Navicat 连接 Windows、Linux系统下的MySQL 各种错误,修改密码。
使用Navicat连接Windows和Linux系统下的MySQL时可能遇到的四种错误及其解决方法,包括错误代码2003、1045和2013,以及如何修改MySQL密码。
96 0
|
2月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
110 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
2月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
|
2月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
110 3
|
2月前
|
Ubuntu Linux 虚拟化
安装Windows Linux 子系统的方法:适用于windows 11 版本
本文提供了在Windows 11系统上安装Linux子系统(WSL)的详细步骤,包括启用子系统和虚拟化功能、从Microsoft Store安装Linux发行版、设置WSL默认版本、安装WSL2补丁,以及完成Ubuntu的首次安装设置。
390 2
|
2月前
|
Linux Windows
【Linux】grub命令行引导进入windows系统
【8月更文挑战第20天】在Linux中通过GRUB命令行引导Windows的方法包括:1) 进入GRUB命令行模式,启动时按`c`键;2) 使用`ls`查找含Windows引导文件的分区,如`bootmgr`或`ntldr`;3) 设置根设备`root=(hd0,msdos3)`与链加载器`chainloader +1`;4) 输入`boot`命令启动Windows。请注意实际步骤可能因系统配置而异。
231 2
|
1月前
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
33 0