WSL使用技巧 / 虚拟机对比
本文介绍了VMware和WSL的区别,并详细介绍了WSL的使用方法和技巧。
前言
本文介绍了VMware和WSL的区别,并详细介绍了WSL的使用方法和技巧。
虚拟机比较
VMware
比较灵活,拥有图形化界面,另外也可以访问USB设备,大部分VM软件的图形界面性能比Hyper-V好。
WSL 1
WSL 1用的是Windows内核模拟的各种系统接口。虽然可以运行大部分Linux应用,但还是有不少依赖于内核的应用是无法正常运行的——例如Docker。另外WSL 1和Windows共用文件系统、网络,有些时候会比较头疼。
WSL 2
WSL 2/Docker本质上都是Hyper-V。WSL 2是一个轻量级的Hyper-V VM;Docker for Windows如果要跑Linux镜像,会安装运行一台运行Linux的Hyper-V虚拟机。
总结
若不嫌安装软件和配置操作系统麻烦,则可以使用VMware;
若只想熟悉Linux命令,不使用Docker,可以使用WSL 1;
若想使用Docker,且不想安装VMware,可以使用WSL 2。
WSL占用内存很高,且无法自动回收,需要使用wsl --shutdown命令彻底关闭WSL才能释放内存。
VMware使用技巧
管理员权限
以管理员权限运行软件,右键VM快捷方式,在兼容性页面勾选以管理员身份运行
。
解决问题:Win11上VM默认运行在小核上导致速度很慢。
以管理员权限运行的VM默认运行在大核上。
隐藏托盘图标
若不想在托盘显示虚拟机状态,可隐藏托盘图标。
编辑 - 首选项 - 工作区
,显示托盘图标,选择从不
。
设置工作区
编辑 - 首选项 - 工作区
,可选择虚拟机的默认位置。
CPU设置
CPU数量尽量与物理机一致,一般设置为1个。
核心数不超过物理机上限,可自行设置,数量越多性能越好,一般设置4-16个。
内存设置
可根据需求设置,推荐设置4096M,即4G。
CD设置
选择使用物理驱动器 - 自动检测
。
网络设置
勾选启动时连接
,选择NAT模式
。
高级设置
勾选禁用内存页面修整
。
勾选禁用侧通道缓解
。
WSL使用技巧
官方文档
文档目录:https://learn.microsoft.com/zh-cn/windows/wsl/
安装步骤:https://learn.microsoft.com/zh-cn/windows/wsl/install
基本命令:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
工具
Windows Terminal
在Microsoft Store中安装Windows Terminal,如下图:
此终端软件可以打开多个选项卡,对Windows支持较好。可以使用此终端的PowerShell运行以下WSL命令。
安装WSL
# 获取发行版有效名称的列表
wsl --list --online
# 安装默认发行版
wsl --install
# 安装指定发行版
wsl --install [Distribution Name]
# or
wsl --install -d/--distribution [Distribution Name]
# 仅安装WSL,不安装发行版
wsl --install --no-distribution
# 示例:安装Ubuntu 20.04版本的WLS
wsl --install Ubuntu-20.04
# or
wsl --install -d Ubuntu-20.04
未安装 WSL 时,选项包括:
--inbox
:使用 Windows 组件(而不是 Microsoft Store)安装 WSL。 (WSL 更新将通过 Windows 更新接收,而不是通过 Microsoft Store 中推送的可用更新来接收)。
--enable-wsl1
:在安装 Microsoft Store 版本的 WSL 的过程中也启用“适用于 Linux 的 Windows 子系统”可选组件,从而启用 WSL 1。
--no-distribution
:安装 WSL 时不安装发行版。
安装后选项包括:
--distribution
:指定要安装的 Linux 发行版。 可以通过运行 wsl --list --online 来查找可用的发行版。
--no-launch
:安装 Linux 发行版,但不自动启动它。
--web-download
:通过联机渠道安装,而不是使用 Microsoft Store 安装。
基本命令
列出可用的 Linux 发行版
wsl --list --online
# or
wsl -l -o
可通过在线商店获得的 Linux 发行版列表,输出结果如下:
以下是可安装的有效分发的列表。
使用 'wsl.exe --install <Distro>' 安装。
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
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.5 openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed openSUSE Tumbleweed
其中,左侧的 NAME
即为发行版名称 [Distribution Name]
。
列出已安装的 Linux 发行版
wsl --list --verbose
# or
wsl -l -v
查看安装在 Windows 计算机上的 Linux 发行版列表,其中包括状态(发行版是正在运行还是已停止)和运行发行版的 WSL 版本(WSL 1 或 WSL 2)。可与 list 命令一起使用的其他选项包括:--all
(列出所有发行版)、--running
(仅列出当前正在运行的发行版)或 --quiet
(仅显示发行版名称)。
将 WSL 版本设置为 1 或 2
wsl --set-version <distribution name> <versionNumber>
若要指定运行 Linux 发行版的 WSL 版本(1 或 2),请将 替换为发行版的名称,并将 替换为 1 或 2。WSL 2 仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用。
设置默认 WSL 版本
wsl --set-default-version <Version>
若要将默认版本设置为 WSL 1 或 WSL 2,请将 替换为数字 1 或 2,表示对于安装新的 Linux 发行版,你希望默认使用哪个版本的 WSL。 例如,wsl --set-default-version 2
。 WSL 2 仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用。
设置默认 Linux 发行版
wsl --set-default <Distribution Name>
# or
wsl -s <Distribution Name>
若要设置 WSL 命令将用于运行的默认 Linux 发行版,请将 替换为你首选的 Linux 发行版的名称。
更新 WSL
wsl --update
将 WSL 版本更新到最新版本。 选项包括:
--web-download
:从 GitHub 而不是 Microsoft Store 下载最新更新。
检查 WSL 状态
wsl --status
查看有关 WSL 配置的常规信息,例如默认发行版类型、默认发行版和内核版本。
查看 WSL 版本
wsl --version
检查有关 WSL 及其组件的版本信息。
Help 命令
wsl --help
查看 WSL 中可用的选项和命令列表。
运行退出
运行默认的Linux发行版
# 启动默认Linux发行版,并进入当前目录,即wsl的mnt文件夹
wsl
# 启动默认Linux发行版,并进入用户主目录
wsl ~
# 在wsl中进入用户主目录
cd ~
运行指定的Linux发行版
运行指定的Linux发行版,并以指定用户登录
wsl --distribution <Distribution Name> --user <User Name>
# 简写
wsl -d <Distribution Name> -u <User Name>
# 进入Linux发行版后,若不知道当前用户名,可使用以下命令输出当前用户名
whoami
其中, 为 Linux 发行版的名称, 为用户名称。 若 Linux 发行版中不存在该用户,则会报错。
退出Linux发行版
exit
终端会提示 logout
。
关闭卸载
关闭WSL,关闭所有发行版,清空内存
wsl --shutdown
立即终止所有正在运行的发行版和 WSL 2 轻量级实用工具虚拟机。 在需要重启 WSL 2 虚拟机环境的情形下,例如更改内存使用限制或更改 .wslconfig 文件,可能必须使用此命令。
关闭指定发行版
wsl --terminate <Distribution Name>
# or
wsl -t <Distribution Name>
若要终止指定的发行版或阻止其运行,请将 替换为目标发行版的名称。
注销并卸载 WSL 发行版
wsl --unregister <DistributionName>
如果将 替换为目标 Linux 发行版的名称,则将从 WSL卸载该发行版,与该发行版关联的所有数据、设置和软件将永久丢失。 从 Store 重新安装会安装发行版的干净副本。
例如:wsl --unregister Ubuntu
将从可用于 WSL 的发行版中删除 Ubuntu。 运行 wsl --list
将会显示它不再列出。
还可以像卸载任何其他应用商店应用程序一样卸载 Windows 计算机上的 Linux 发行版应用。 若要重新安装,请在 Microsoft Store 中找到该发行版,然后选择“启动”。
磁盘管理
装载磁盘或设备
wsl --mount <DiskPath>
通过将 替换为物理磁盘所在的目录\文件路径,在所有 WSL2 发行版中附加和装载该磁盘。 请参阅在 WSL 2 中装载 Linux 磁盘。 选项包括:
--vhd
:指定 引用虚拟硬盘。
--name
:使用装入点的自定义名称装载磁盘
--bare
:将磁盘附加到 WSL2,但不进行装载。
--type <Filesystem>
:装载磁盘时使用的文件系统类型默认为 ext4(如果未指定)。 此命令也可输入为:wsl --mount -t <Filesystem>
。可以使用 blkid <BlockDevice>
命令检测文件系统类型,例如:blkid <dev/sdb1>
。
--partition <Partition Number>
:要装载的分区的索引号默认为整个磁盘(如果未指定)。
--options <MountOptions>
:装载磁盘时,可以包括一些特定于文件系统的选项。 例如,wsl --mount -o "data-ordered"
或 wsl --mount -o "data=writeback"
之类的 ext4 装载选项。 但是,目前仅支持特定于文件系统的选项。 不支持通用选项,例如 ro、rw 或 noatime。
卸载磁盘
wsl --unmount <DiskPath>
卸载磁盘路径中给定的磁盘,如果未提供磁盘路径,则此命令将卸载并分离所有已装载的磁盘。
导入导出
导入和导出发行版:
# 导入
wsl --import <Distribution Name> <InstallLocation> <FileName>
# 导出
wsl --export <Distribution Name> <FileName>
将指定 tar 文件导入和导出为新的发行版。 在标准输入中,文件名可以是 -。 选项包括:
--vhd
:指定导入/导出发行版应为 .vhdx 文件,而不是 tar 文件
--version
:(仅导入)指定将发行版导入为 WSL 1 还是 WSL 2 发行版
指定安装路径
可通过导出再导入的方式指定WSL的安装路径,步骤如下:
查看运行子系统:通过wsl -l --running
查看正在运行的子系统
终止运行:若有正在运行的子系统,则通过wsl -t <DistributionName>
来终止其运行
备份系统:利用wsl --export <DistributionName> <FileName>
来备份子系统,结果会得到一个tar归档文件。
假设有名为Ubuntu-20.04的子系统, 想要将结果文件保存为Ubuntu2004.tar
(同时指定其路径即为D:\wsl\Ubuntu2004.tar
),则调用的命令为
wsl --export Ubuntu-20.04 D:\wsl\Ubuntu2004.tar
恢复系统:然后利用wsl --import <DistributionName> <InstallLocation> <FileName>
来恢复子系统。
例如wsl --import Ubuntu D:\wsl\Ubuntu2004\ D:\wsl\Ubuntu2004.tar
(将新恢复的子系统命名为Ubuntu)
修改默认登录用户:Ubuntu config --default-user <UserName>
,若使用Ubuntu 20.04,则将Ubuntu替换为ubuntu2004。
注销原系统(可选):使用wsl --unregister Ubuntu-20.04
注销原始子系统。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)