在Windows中使用Linux子系统WSL2

WSL和WSL2的区别

和WSL相比,WSL更接近于一个独立的Linux系统,可以运行Docker,而且性能更好(以前就是因为WSL运行laravel速度慢放弃了)。但是WSL2读写Windows挂载盘的速度比WSL更慢,所以不能把代码放在Windows系统下,然后在WSL2中运行。不过微软给了解决方案,就是使用vscode的Remote-WSL扩展,可以在vscode中直接编辑WSL2环境下的代码。

还有一点是每次重启电脑,或者重启WSL2,WSL2的本地IP都会变,这就导致每次重启hosts、SFTP、MySQL的IP都要修改,一个变通的方法是,既然固定不了wsl2的ip地址,那么就在启动wsl2后主动给它设置一个ip地址。或者编辑win10的hosts文件自定义个域名(如 wsl.test),在Navicat、FTP客户端使用wsl.test作为URL地址,然后每次重启后更新hosts中的域名ip。(注:win10浏览器中也可以直接使用localhost访问wsl的网站,但是不能用来连接FTP)

在WSL2中使用clash代理翻墙

前提:
1.在clash中勾选了Allow LAN
2.需要在Win10防火墙中允许V2ray进行公用和专用网络的访问,或者直接关闭windows防火墙

~/.bashrc中添加如下代码,设置别名setss ,今后只需要在输入setss 即可在wsl2中使用代理

1
2
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
alias setss='export https_proxy="http://${hostip}:7890";export http_proxy="http://${hostip}:7890";export all_proxy="socks5://${hostip}:7891";'

第一句是获取ip,注意这个hostip是在WSL2中Win10的ip,而不是子系统的本地IP
第二句是为终端设置代理

在Win10环境下打开WSL2中的文件

在vscode的Remote-WSL模式里右击WSL2中的文件,选择【在文件资源管理器中显示】,就可以看到WSL2中的文件在资源管理器中的路径了。也可以在资源管理器中右击,选择【添加一个网络位置】,把这个路径作为快捷方式添加到资源管理器界面。

WSL2迁移

1.终止正在运行的子系统:
wsl --shutdown

2.把需要迁移的子系统导出(我安装的版本是Ubuntu-20.04,使用wsl -l查看):
wsl --export Ubuntu-20.04 D:\wsl-Ubuntu-20.04

3、卸载分发版或虚拟机(如果是要重装系统或换机器安装,这一步可以省略,但是要将上一步导出的文件保存好。如果是要还原系统,这一步必须,否则执行第四步的时候报错:已存在具有提供的名称的分发。)
wsl --unregister Ubuntu-20.04

4.导入子系统:
wsl --import Ubuntu-20.04 C:\wsl\Ubuntu2004 D:\wsl-Ubuntu-20.04 --version 2
最后的选项--version 2可以省略,则采用默认版本导入。如果导出的是WSL2,而这里设置的是--version 1,还可以将其版本降为WSL1,这样就实现了子系统的迁移 ,注意文件存放的路径一定不能错。

扩展阅读:
如何在 Windows 10 中安装 WSL2 的 Linux 子系统
WSL2迁移方法