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 | export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*') |
第一句是获取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,这样就实现了子系统的迁移 ,注意文件存放的路径一定不能错。