自Windows Terminal发布后一直用得很爽, 我也一直在关注着另一个’神器’wsl2的到来. Windows 2004 RTM版出来后我便立即重装了系统, 感受到了wsl2的强大. 本文的主要内容就是如何配置wsl2并解决它带来的一些问题

为什么需要wsl2

如果你是一个开发人员, 一定有以下几个痛点

  1. 安装软件麻烦, c++应该下哪个? python应该下哪个? vscode对应的配置怎么配?
  2. 残缺的Git bash, wget 命令去哪了? md5sum在哪?
  3. 巨慢的git clone, ssh怎么不走代理啊? 怎么配置?
  4. 乱码问题, 我使用UTF-8编码, 怎么运行到命令行就乱码?

Windows下还有很多问题就不一一列举了

wsl2能解决的问题

  1. 真实Linux内核, 带来了完整的Linux体验
  2. 优化后的IO速度, 读写速度快
  3. 内存回收技术, 避免占用过多内存不释放
  4. 自动挂载Windows磁盘, 无缝访问Windows文件

wsl2安装

具体安装请看官方文档

大致的步骤是

  1. 打开可选功能的适用于Linux的Windows子系统虚拟机平台
  2. 重启计算机
  3. Windows Store中下载Linux发行版, 如Ubuntu
  4. 启动Ubuntu, 设置用户名, 密码(此时默认是wsl而不是wsl2)
  5. powershell中根据文档切换成wsl2
  6. 若提示切换失败, 可能需要手动安装内核, 去官网下载安装

Windows Terminal配置

  1. 主题配置 这里贴一份我自己的配置, 有需要的可以下载修改
    windows-terminal
  2. 右键-在此文件夹中打开 这个功能需要添加注册表, 有需要可以下载, 运行

wsl2简单配置

  1. 使用zsh作为默认bash(可选, 这里不做过多介绍)

  2. 当使用Windows Search 打开Windows Terminal时, 默认进入用户目录~

    if [[ "$(pwd)" == *"Windows"* ]] ; then
    cd ~
    fi

    由于我使用了oh-my-zsh, 每次安装会覆盖原有的.zshrc, 所以我的所有关于bash配置都写在~/.profile下, 并在.zshrc中使用source .profile加载, 更多配置可以参考.profile文件

  3. 配置默认使用vim作为可视化编辑器

    export VISUAL=vim
    export EDITOR="$VISUAL"

wsl2代理设置

wsl2采用的网络模式是Nat模式, 在wsl2中如果想使用Windows下的代理会比较麻烦, 不能直接通过localhost访问

但Windows却可以使用localhost访问wsl2中的服务, 很便于程序的调试

首先需要安装proxychains4

sudo apt install proxychains4

复制一份配置文件到用户目录

sudo cp /etc/proxychains4.conf ~/.proxychains.conf

配置bash设置(.profile中)

# 找到windows ip
export WIN_IP=`cat /etc/resolv.conf | grep nameserver | awk '{print $2}'`
# 删除原有socks5配置
sed -i '/socks5/d' ~/.proxychains.conf
# 添加新的socks5配置
sed -i '$a socks5 '${WIN_IP}' 7891' ~/.proxychains.conf
alias pc='proxychains4 -q -f ~/.proxychains.conf'
# 在使用sudo时同时使用'pc' proxychains的alias
alias sudo='sudo '

这样每次启动都会寻找正确的ip地址, 并设置好给proxychains4

vscode设置

还是由于网络问题, remote server继承了主vscode的配置, 代理会默认被设为127.0.0.1:7890, 会出现无法下载插件, 或无法使用插件等问题

经过测试, 即使在wsl2设置了http_proxy环境变量也没办法生效(主配置已检测到代理), 需要手动设置才能生效
vscode-config

其他配置

大多数软件都能使用wsl2替代, 如git, c++, python, golang

但还是有些依赖图形化的软件只能在Windows下运行, 如IDEA, Android Studio

这些软件也依赖于git, 但又不想在Windows又装一个重量级的git bash, 于是我找到两种解决方案, 一种是git映射到wsl2中的git, 第二种是额外下载一个轻量级的gitMinGit

这里推荐第二种方法, 简单, 最小只有20M左右, 而且无需安装

wsl2唯一的缺点是无法自动缩进磁盘空间, 当突然下载大文件后又删除后, 虚拟机占用空间并不会减少, 只会持续扩张. 目前解决办法是磁盘分区, 后续官方应该有更好的解决方法

总结

总得来说, wsl2的体验很不错, 有种在Linux中使用Windows的感觉, 既可以享受Windows众多图形化软件带来的优势, 也可以方便快捷使用Linux做程序开发, 这点就比原生Linux强很多了, 和mac的差距也没那么大了

转载申请

知识共享许可协议

本文知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接