WSL: Linux on Windows Explained
摘要
WSL: Linux on Windows Explained
文档:https://learn.microsoft.com/en-us/windows/wsl/
极速搭建开发环境: 直接在 Windows 上运行 Python、C++、Rust、Go、Node.js 等 Linux 版本的开发工具链,避免环境配置带来的繁琐。
使用强大的 Shell 工具: 可以在 Windows 下原生使用 grep、sed、awk 等文本处理神手,以及高效的 zsh 或 fish。
容器化开发: 与 Docker Desktop 深度集成,利用 WSL 2 的 Linux 内核运行 Docker 容器,性能远超传统的 Hyper-V 模式。
跨系统文件互操作: 你可以在 Linux 终端里编辑 Windows 磁盘上的代码文件,也可以在 Windows 资源管理器里像访问 U 盘一样访问 Linux 的文件系统。
运行 Linux 图形应用: 现在的 WSL 2 支持原生 Linux GUI 程序(如编辑器、浏览器甚至是简单的游戏)。
基础使用
安装
安装wsl
安装分发
1 | # 列出可用的分发 |
列出已安装
1 | wsl -l |
启动。这个系统名称不能缩写(但是大小写不敏感)
1 | wsl.exe -d Ubuntu-22.04 |
退出
exit
切换默认用户
1 | # 格式:<系统分发版命令> config --default-user <你的用户名> |
删除分发
1 | wsl --unregister Ubuntu-22.04 |
导出+导入(路径迁移)
建议操作顺序:
1 | 导出: wsl --export Ubuntu D:\backup.tar |
查看所有已安装系统的路径
1 | Get-ChildItem -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" | ForEach-Object { Get-ItemProperty -Path $_.PSPath } | Select-Object DistributionName, BasePath |
这里系统名称可以指定,用什么名以后就叫什么名了,注意一下。另外这个系统名称不能和已有的重复
1 | # 格式:wsl --export <系统名称> <备份文件路径> |
配置
网络
dns
1 | sudo vim /etc/resolv.conf |
改成
1 | nameserver 8.8.8.8 |
wsl默认会在每次 WSL 启动(或网络变化)时重新生成 /etc/resolv.conf,所以重启后会丢失。持久化:
重启后(因为这个文件是符号链接,设置了不自动生成后就会移除)编辑/etc/wsl.conf,添加:
1 | [network] |
告诉 WSL:不要再自动生成 /etc/resolv.conf
访问本机代理
代理软件需要设置允许LAN/局域网连接,或者把监听地址从127.0.0.1改为0.0.0.0
先查询主机ip
1 | ip route | grep default |
临时方案:
代理的ip设成主机ip,端口是你的代理软件的端口
1 | export http_proxy=http://172.17.192.1:7890 |
这个方案是暂时的,后面再做持久化现在不管了。不行VSCode需要网我又回来了
永久方案:
编辑~/.bashrc,添加:
1 | # ===== proxy for WSL ===== |
然后
1 | source ~/.bashrc |
但是据说因为ip可能会变这个也不稳定但是先这样吧
测试wsl中是否能访问代理
1 | nc -zv 172.17.192.1 7890 |
如果wsl还是没法访问代理,可能是防火墙原因。可以给代理软件加个放行规则
1 | New-NetFirewallRule -DisplayName "Allow Clash 7890" ` |
文件系统访问
wsl访问本地
在wsl中本机的文献系统会被挂载到/mnt目录下,可以直接访问
本地访问wsl
1 | \\wsl.localhost\<DistroName>\home\<user>\... |
路径转换命令(在wsl中执行):
1 | wslpath -w ~/dir |
会输出在本地访问wsl的路径
Windows Terminal
添加了分发之后terminal中会自动添加对应的系统(但是可能反应略慢)
也可以自己定义配置。下拉设置选择添加新的配置文件,命令行类似于
1 | C:\Windows\system32\wsl.exe --distribution-id {29eeb622-1951-4f80-951c-3a78abac5649} |
应该也可以用 wsl -d ubuntu-22.04这种
VSCode插件
安装扩展WSL
在wsl终端中进入工作目录,运行命令
1 | code . |
会自动下载VSCode server,完成后就会将目录通过wsl添加到VSCode中
其他
Docker daemon代理
在 WSL 中运行 Docker,需要为 Docker daemon 配置代理。
创建 Docker daemon 的配置目录/etc/systemd/system/docker.service.d
写入配置
1 | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF |
重载systemd,重启docker
1 | sudo systemctl daemon-reload |
验证配置
1 | sudo systemctl show --property=Environment docker |
重置用户密码
可以从Windows直接进wsl的root:
1 | wsl -d Ubuntu(发行版名称) -u root |
进去之后就是root权限,可以使用passwd更改用户密码
1 | passwd user |