1. WSL2概述
WSL是Windows Subsystem for Linux的缩写,允许利用CPU的虚拟化技术在Windows系统下使用Linux系统。目前最新版本是WSL2。
2. 安装WSL2的软硬件条件
安装WSL2必须满足如下几个条件:
(1)必须是Windows10或Windows11系统,如果是Windows10,版本必须是2004或以上版本,对应的内部版本号是19041或更高版本;
查看Windows版本号和内部版本号的方法:按Windows 徽标键 + R键打开运行窗口,输入winver命令,会弹出如下图所示的窗口,在该窗口中显示版本号和内部版本号。
(2)CPU必须支持虚拟化,而且要在BIOS中打开虚拟化支持;
读者可以打开Windows的任务管理器,在“性能”页面右下角,如果找到如下图所示的“虚拟化:已启用”,说明虚拟化已经开启。
3. 在线安装WSL2
安装WSL2相当简单,直接在PowerShell中执行下面的命令即可安装。
- wsl --install
执行这行命令后,会启用所需的可选组件,下载最新的 Linux 内核,将 WSL 2 设置为默认值,并安装 Linux 发行版(默认安装 Ubuntu)。
如果想改变默认安装的Linux(安装其他Linux发行版),可以使用下面的命令:
- wsl --install -d
其中表示Linux发行版的名称,可以使用下面的命令查看WSL2目前支持哪些Linux发行版。
- wsl --list --online 或 wsl -l -o
执行完命令后,会看到如下图的Linux发行版列表。例如,要安装Debian Linux,可以执行wsl --install -d Debian命令。
如果查询本地已经安装了哪些Linux发行版,可以使用wsl --list 或 wsl -l 。
4. 离线安装WSL2
尽管在线安装Linux发行版非常容易,但有一个问题,就是不能选择安装路径。默认,Linux发行版的所有文件会都安装在C盘。如果C盘不大,很容易被占满。所以我们期望将Linux发行版安装在其他盘。
网上有很多改变默认安装路径的方式,其实有更容易的方式实现,就是直接下载离线版本的Linux发行版,只需直接解压运行即可。你在哪个盘解压,以后的所有文件就都会放到这个盘里。
读者可以到下面页面的最后下载相应的Linux发行版:
https://docs.microsoft.com/zh-cn/windows/wsl/install-manual
PS:如果读者使用的Windows版本比较低,无法使用在线安装方式,也可以按着上面的页面采用手动的安装方式。
下载的Linux发行版是appx文件(或其他扩展名),它们都是压缩文件,只需要将扩展名改成zip,然后解压即可。
假设大家下的是Ubuntu20.04,解压后,里面有一个ubuntu2004.exe文件,直接运行即可。第一次运行,会要求输入一个用户名,还有对应的密码。以后直接运行,即可进入Ubuntu的终端,如下图所示。
PS:同一个Linux发行版可以启动多个实例,共享其中的文件。另外,WSL中的Ubuntu,安装程序的方式与正常安装的Ubuntu是完全一样的,使用sudo apt install即可在线安装任何程序。
5. 提权到root用户
在默认情况下登录WSL的是普通用户,如果想切换到root用户,一开始是不行的,因为root用户的密码没有设置,所以首先需要使用下面的命令设置root用户的密码。
- sudo passwd root
设置完密码后,可以使用su命令提权。每次重新启动WSL,仍然是普通用户,都需要用su命令切换到root用户。
6. Windows访问WSL
WSL与VMWare不同,WSL属于Windows的子系统,不是虚拟机,所以执行效率要比VMWare快很多。
不过不管是WSL、还是VMware,都会涉及到与宿主机(Windows)交互的问题。首先来看看Windows如何访问WSL中的目录。
由于WSL是Windows的子系统,都是一个体系的好办事,所以可以直接用下面的地址就可以访问:
- \\wsl$\Ubuntu-20.04
其中\\wsl$是前缀,后面的Ubuntu-20.04就是在PowerShell中使用wsl -l命令列出的本地Linux发行版的名称。如果只使用\\wsl$,那么会显示所有的Linux发行版,双击即可进入某个发行版,看到的目录结构如下图所示。
这些都是Ubuntu下的文件和目录。不过随便点击某个目录,发现有的目录根本无法进入(无权访问),即使有权进入,也无法创建文件或目录。所以需要在WSL中执行下面的命令将要访问的目录的权限设置为有权访问这些目录的用户,如root。
- sudo chown -R root /home/mydir
- sudo chmod 777 /home/mydir
如果要递归设置某一个目录的权限,可以使用-R命令行参数,如下:
- sudo chmod -R 777 /home/mydir
现在就可以在Windows下愉快地访问WSL中的/home/mydir目录了。
PS:为了方便与WSL交互,可以通过\\wsl$列出所有的Linux发行版,然后通过右键菜单将某个Linux发行版映射成逻辑盘符。
7. 通过WSL访问Windows
在WSL中访问Windows就更简单了,可以在WSL中进入/mnt目录,WSL会自动挂载Windows中的所有盘符,都是可读写的,如下图所示。读者只要进入相应的盘符完成相应操作即可。
8. 在Windows中直接执行Linux的程序
WSL与Windows已经完全打通,在Windows的PowerShell可以执行Linux中的命令,例如,进入PowerShell(推荐用Windows Terminal,可以显示多个Windows PowerShell),直接输入ls,可以以Linux的风格列出Windows中的目录和文件,如下图所示。
也可以使用wsl命令执行任何Linux命令,如wsl gcc a.c -o a
这行命令使用gcc将a.c编译成可执行文件a。然后使用wsl a可以运行a。
9. 在Linux中执行Windows命令
在Linux中同样也可以执行Windows的exe文件,例如,在Linux中进入/mnt/c/windows中,执行write.exe命令,就会在Windows中启动写字板程序。要注意,尽管这里是在Linux中运行,但由于运行的是Windows的exe程序,所以并不区分大小写。其实本质上,并不是在Linux中运行Windows程序,而是在WSL中向Windows发送要运行的程序的消息(如exe文件的具体的路径),最后还是由Windows执行exe文件。
所以执行write.exe和WRITE.exe的效果是一样的。
10. VSCode远程调试VSCode
如果想利用WSL调试程序,可以在Windows中安装VSCode,然后再安装Remote-WSL插件,如下图所示。
该插件允许在Windows版的VSCode中连接WSL环境,可以直接在VSCode的终端中输入Linux命令。
安装完这个插件,会在VSCode左侧工具栏多一个图标,点击该图标,就会进入REMOTE EXPLORER页面,会列出当前机器上安装了多少WSL Linux实例,下图是我安装的WSL Linux实例。点击一个Linux实例,可以直接打开该实例中的目录,然后就可以正常开发了。如果发现无法创建目录或文件,请使用chmod命令设置目录的权限。
11. 修改虚拟硬盘文件的默认路径
ext4.vhdx文件是WSL中的虚拟硬盘文件,如果不幸该文件安装在了C盘,想将其移动到其他硬盘,那么可以用下面的方法:
(1)输入wsl -l --all -v命令,会得到WSL安装的所有Linux发行版以及状态和版本号;
(2)使用下面的命令将ext4.vhdx文件导出为wsl-ubuntu20.04.tar文件,该文件放到D盘根目录,读者可以将其修改成任何路径。
- wsl --export Ubuntu-20.04 d:\wsl-ubuntu20.04.tar
(3)使用下面的命令注销Linux发行版
- wsl --unregister Ubuntu-20.04
(4)使用下面的命令导入ext4.vhdx文件
- wsl --import Ubuntu-20.04 d:\wsl-ubuntu20.04 d:\wsl-ubuntu20.04.tar --version 2
(5)重新注册Ubuntu
12. 将WSL发行版迁移到另外一台机器上
其实用上面的方法也可以进行迁移,不过这里介绍另外一种比较简单的方法。
(1)将要迁移的WSL Linux发行版中的ext4.vhdx文件直接复制到另外一台机器
(2)另外一台机器按正常步骤安装同样的WSL Linux发行版
(3)使用wsl --shutdown命令关闭这台机器中所有的WSL Linux发行版
(4)将ext4.vhdx文件直接覆盖新安装的WSL Linux发行版中同名文件
(5)使用wsl -d Ubuntu-20.04重新开启WSL Linux发行版
哦了,现在就完全迁移过来了
另外,注意将上面步骤中的Ubuntu-20.04替换成自己机器上的WSL Linux发行版的名字。
本文转载自微信公众号「极客起源」,可以通过以下二维码关注。转载本文请联系极客起源公众号。