最近因为沉迷游戏,长期在游戏本上出生入死,手里那台用来聊天的 Mac 就晾在边上好久没掀开过了。想着手里几个小项目换电脑搞来搞去也挺麻烦的,所以决定在 windows 本上还原一下在 Mac 上的工作环境。
在 Mac 上或者远程服务器上,我们的开发、部署环境基本都是类 Unix 的,所以接下来我们需要把 WSL2
安装上,并且给系统安装一个不太拉胯的终端,以及配置 wsl 中系统的使用环境。
选择在 wsl 中开发,还有一个重要的原因,就是 windows 和 Unix 的换行符是不一样的,可能会带来一些编码方面的问题,比如 git 冲突。
安装 WSL
微软把 WSL
叫做 适用于 Linux 的 Windows 子系统
,我们只要知道这是一个跨操作系统的 linux 环境就好了,详细的说法还是看 wsl 的文档。从 windows 10 开始,系统提供了 WSL 集成,发展到现在的 windows 版本,已经有了 WSL 2 ,推荐升级到 WSL 2,现在能与系统更好的结合工作并且提供了完整的 Linux 内核,docker desktop 现在也与 WSL2 高度适配。
安装 WSL 2 需要满足 windows 10 的系统版本要求,X64 系统需要版本 1903 或更高版本,采用 内部版本 18362.1049 或更高版本
。
为了避免一些麻烦,以下命令均在管理员身份的 PowerShell 中运行。
检查系统是否符合 WSL 2 运行要求
先确定一下系统版本是否符合要求。
1 | # 回车运行后,会弹出一个窗口,只要显示的内部版本号大于上文所说的要求即可 |
如果系统版本不符合要求,请先升级到较新的版本再执行以下的操作。
启用 WSL
如果系统符合要求,请接着往下。
1 | # 这条命令会开启系统的 wsl 功能,和你在控制面板里手动勾选是一样的 |
启用 虚拟化功能
由于 WSL 2 需要虚拟化功能才可以运行,所以需要先启用 虚拟平台
功能。
1 | # 启用 `虚拟平台` |
至此,先重启系统以完成 WSL 的安装并升级到 WSL 2。
更新 WSL 2 Linux 内核
重启完成后,系统就已经把 WSL 安装好了,在切换到 WSL 2 之前,建议先更新系统的 WSL 2 Linux 内核,以免 WSL 切换到 WSL 2 时报错:
将 WSL 2 设置为默认版本
现在需要把 WSL 2 设置为默认的 WSL 版本:
1 | wsl --set-default-version 2 |
安装你喜欢的 Linux 发行版
现在一切准备就绪,就差一个 Linux 了。到 Microsoft Store 找一个发行版安装。在搜索里输入 WSL
就会列出所有可用的 Linux 发行版,我安装的是 Ubuntu 20.04 LTS
,所以 安装 WSL 这节之后的内容,不特指的话都是在 Ubuntu 20.04 LTS 中执行的。
安装好后,第一次启动,会开始初始化系统,并需要你为这个 Linux 创建用户和密码,这个密码就是以后你在 wsl 中输入 sudo
命令后,需要输入的密码。
WSL 进阶
网络
WSL 2 的网络不和 windows 直接互通。在 windows 中访问 WSL 2 里的服务,可以直接使用 http://localhost:8000
这种方式,但是 WSL 2 里就不能直接访问 windows 里的 web 服务了,新版本的 WSL 2 要拿 windows 的 IP 比较麻烦,目前网上的各种方法,几乎没作用。
文件互访
在 WSL 2 里访问 windows 的目录和文件还是比较方便的。windows 的分区会全部挂载到 /mnt/
下,比如要访问 D:\
,可以使用 cd /mnt/d
。而在 windows 里,也可以直接在资源管理器的地址栏中输入 \\wsl$
访问所有已经安装的 WSL。
而更加方便的是,可以直接在 WSL 的 shell 环境中直接执行 windows 中的程序,类似于 Mac 下的 open
,例如:
1 | # 使用 vs code 打开指定的目录或者文件 |
使用 Docker
docker desktop 现在也已经针对 WSL 2做出了优化,可以直接安装 docker desktop。
一些遗憾
systemctl
启动选项无法使用,虽然可以借助第三方方法达成目的
WSL 2 一些可能会用到的命令
使用 help
来了解全部可用的命令:
1 | wsl --help |
如果要查看已经安装的 Linux 子系统所使用的 WSL 版本:
1 | # 列出已经安装的 linux 子系统,version 一列指的是 wsl 的版本 |
子系统默认安装在 C:\
,如果你觉得占用的空间太多,需要迁移到别的位置,使用以下命令解决:
1 | # 停止 wsl 运行 |
Hyper-V 动态端口占用过多的问题
如果有使用到 Hyper-V 的朋友,要提前考虑一下 windows 动态端口占用过多的问题。可以在安装 Hyper-V之前,先指定动态端口的范围,以避免端口占用过多,已经安装的程序或者项目跑不起来。
1 | # 以管理员模式打开 powershell |
安装 Terminal
说到还原工作环境,写代码的应该不会只有我一个人是从终端开始的吧?
Mac 上习惯使用的终端是 iTerm2,刚好微软也搞了个评价不错的终端,还是个开源的,再也不用一直看着电脑上那个 cmd 和 powershell了。
安装 Windows Terminal 非常简单,打开 Microsoft Store,搜索 windows terminal,找到那个名字不带 preview 的,直接安装就行了。
有了 Windows Terminal 就有了一个好开端。运行 Windows Terminal 后,默认打开的可能是 PowerShell,在 PowerShell 中直接输入 bash
可以直接进入 wsl 的 shell 环境。
在顶部标签栏的右侧,有个下拉箭头,里面可以选择要打开的 shell 也可以对终端进行配置。如果你安装了新的 shell 环境或者新的 wsl 发行版,而终端没有找到,可以自己添加或者直接编辑配置文件。如果手动新增 shell 列表,可以需要填写 guid
,可以使用 GUID / UUID generator 生成一个。
另外,你可能对 Windows Terminal 深度配置或者美化感兴趣,也可以看看 Windows Terminal美化,优雅的办公带来超高的效率 。
最后,顺便推荐下微软的 PowerToys ,可以一定程度还原在 Mac 上空格预览、Alfread 等便利操作。
Shell
我在 Mac 上使用的 shell 是 zsh
,所以进入 WSL 后,随即就把 shell 切换为 zsh。
1 | # 查看系统中有哪些 shell |
切换为 zsh 后,为了让 zsh 更丝滑,接着安装 oh-my-zsh
1 | # install oh-my-zsh via curl |
最后,oh-my-zsh 的配置,从 Mac 上原样搬过来就可以用了。
特别的一点,如果要在 WSL 中打开 windows 的一些软件,每次都要输入 softwareName.exe
这样的一长串,非常烦。好在可以直接在 .zshrc
中设置别名来使用。
1 | export PATH=$PATH:'/mnt/c/Program Files/Typora' |
Package management
在 Mac 上是我是用惯了 homebrew,所以我选择在 WSL 里也装上一份。
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
如果安装后发现 brew
命令不能正常使用,先确认当前 shell 的配置里是否有导出 homebrew 的路径。由于 homebrew 在 WSL 中的安装路由在 /home/linuxbrew/.linuxbrew
,但是这部分不会出现在 path
里,所以我们要先在 .profile
里导出:
1 | export BREW_HOME="/home/linuxbrew/.linuxbrew/bin" |
重载配置后应该能解决问题:
1 | source ~/.zshrc |
windows 上的包管理,其实还是有好几个的,不过之前都是第三方的包管理,现在微软自己弄了一 winget
,虽然上面的软件现在还不多,不过还是能满足我的需求的。
安装方法就不多说了,直接看官方文档 使用 winget 工具安装和管理应用程序 。
Source Code Editor & Plugins
因为我用的是 vs code
其他的 IDE 我也不清楚是什么情况,就不多说。
vs code 装好后,记得把 Remote - WSL
这个插件装上,它可以让你直接在宿主机上编辑 WSL 中的文件。
另外,强烈建议不要直接在 windows 里
git clone
任何远程项目,为了保持各方面的字符编码统一,请在 WSL 里git clone
远程项目,新项目也建议你在 WSL 里建立。
What’s next?
为了避免再继续写一些冗长无意义的内容,我决定就此打住。相信按上面的指引,应该可以帮助到避免一些从 Mac 转到 Windows 的麻烦,节省你的时间。
如果我在 WSL 上的工作环境有任何有意义的变化,我也会继续更新本文,以保证内容可以跟上变化。
评论