Windows 子系统(WSL)教程

WSL 是 Windows 下的 Linux 子系统,可以代替虚拟机来运行 Linux 系统,占用资源少,使用方便。

WSL 迁移

对于 WSL 来说,默认安装位置是 C 盘,如果你想将其迁移到其他磁盘中,可以按照如下步骤执行:

  1. 终止正在运行的分发或虚拟机

wsl --shutdown
  1. 将需要迁移的分发或虚拟机导出(如 Ubuntu-22.04)

wsl --export Ubuntu-22.04 D:\wsl-Ubuntu-22.04

此命令执行后 Ubuntu-22.04 会导出为 D 盘中的 wsl-Ubuntu-22.04

  1. 卸载分发版或虚拟机

wsl --unregister Ubuntu-22.04
  1. 导入新的分发版或虚拟机

wsl --import Ubuntu-22.04 D:\wsl\Ubuntu2004 D:\wsl-Ubuntu-22.04 --version 2

其中第二个参数代表 Ubuntu-22.04 的迁入位置

Note

当 WSL 中除了 Ubuntu 还有 docker 时,卸载 Ubuntu 后,docker 会成为 WSL 的默认分发(即执行 wsl -l -v 时左侧有星号),重新导入迁移后的 Ubuntu 并不会自动成为 WSL 的默认分发,这时候需要设置 WSL 为默认分发,即执行命令:wsl --setdefault Ubuntu-22.04,参考这里

XShell 连接 WSL2

  1. 重新安装 ssh

sudo apt-get remove --purge openssh-server ## 先删 ssh
sudo apt-get install openssh-server ## 在安装 ssh
sudo rm /etc/ssh/ssh_config ## 删配置文件,让 ssh 服务自己想办法链接
sudo service ssh --full-restart
  1. 修改配置文件

sudo vim /etc/ssh/sshd_config

修改如下(取消注释):

Port 22
ListenAddress 0.0.0.0
PasswordAuthentication yes
  1. 重启 ssh(每次重启 wsl 都要执行该语句)

sudo service ssh --full-restart
  1. 重新生成 host key

sudo dpkg-reconfigure openssh-serve
  1. 设置 XSell 中主机地址(127.0.0.1)、用户名和密码等

设置开机启动 WSL 的 SSH 服务

  1. 新建一个 powershell 脚本(AutoStartSSH.ps1),内容为:

wsl -u root service ssh start
  1. 选择此电脑-管理-任务计划程序-创建基本任务,将该脚本添加到计划任务中,步骤如下(不要直接将脚本路径写在 powershell.exe 后面):

../_images/wsl1.png ../_images/wsl2.png ../_images/wsl3.png ../_images/wsl4.png ../_images/wsl5.png
  1. 使用最高权限运行脚本,之后就大功告成了。

../_images/wsl6.png

参考