值此 WSL2 即将到来之际,先记录一波 WSL 开发环境的配置,以便折腾,因为 WSL 真的很方便。

下载,安装,配置

下载

在 Microsoft Store 可以直接下载要安装的 Linux 发行版,这里以 Ubuntu 为例:

直接点击下载,下载完成之后直接启动就行了。想要删除系统只需要按一下“卸载”

安装

启用系统就会自动开始安装并且初始化:

需要创建一个用户,输入用户名和密码。

安装成功后,一般是将系统安装在类似这样的一个目录:
C:\Users\{user}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs 打开这个目录就可以看到bin, boot, home, root, 等等 Linux 系统根目录下的那些目录了。

默认用户

默认用户为一开始创建的用户,可以通过以下命令来修改 ubuntu 默认用户:

ubuntu1804 config --default-user root

这样下次启动就直接是用 root 用户了,不过我们这里就不这么做了,这不是个好习惯。

可以通过以下方式切换到 root 用户:

sudo -i

包管理

Microsoft Store 上的系统,据我观察,上线之后,似乎就不更新的,所以包的更新还是得靠自己。

更新软件包:

sudo apt-get update 

先安装一些必备的包:

apt-get install vim git curl ca-certificates gcc make

有些软件包在一些 Linux 发行版已经默认安装了,看情况安装升级就行。

Shell

安装 zsh

安装 zsh 也不是必须的,这个纯粹看个人习惯了。

echo $SHELL 可以查看当前使用的 shell:

gzp@goozp:~# echo $SHELL
/bin/bash

安装 zsh:

sudo apt-get install zsh

查看安装了哪些 shell:

gzp@goozp:~# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh

将默认 shell 设置为 zsh:

gzp@goozp:~# chsh -s /usr/bin/zsh

重启即可生效。

zsh 一开始会有一个配置需要初始化,这个就看个人了,看情况选择:

Bash 启动默认终端

虽然已经设置了默认终端是 zsh 了,但是如果是通过windows bash启动的话,仍然是 bash shell,这种情况也能处理。
可以修改 bash 默认为 zsh,创建.bash_profile(有则直接编辑):

# cd ~ # touch .bash_profile # vim .bash_profile

在.bash_profile末尾加上:

exec zsh
source .zshrc

保存。这样 zsh 就是我们的默认终端了。这个设置,其实不设置也行,因为不一定通过 bash 去启动,特别是现在有了 Windows Terminal。

安装 oh-my-zsh

执行脚本(需要git):

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

这是一个脚本,基本上什么也不用干了:

安装 oh-my-zsh 插件

本身默认集成的插件,在目录 ~/.oh-my-zsh/plugins 下,而需要自己下载的插件,可以下载到~/.oh-my-zsh/custom/plugins 下进行拓展。

下载完后在 ~/.zshrc 中激活:

# 将需要激活的插件名写在小括号中
plugins=(git)

举个例子:

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

可以直接从 github 上把插件拉下来,然后在 ~/.zshrc 中加入插件的名字 plugins=( zsh-autosuggestions zsh-syntax-highlighting)

插件有权限问题的话,会有警告,加入:

# 在引入 oh-my-zsh 之前加入
ZSH_DISABLE_COMPFIX="true"

oh-my-zsh 主题

oh-my-zsh 提供了很多默认的主题,这里是所有自带主题预览:
https://github.com/robbyrussell/oh-my-zsh/wiki/themes

目前我用的主题是:ys

代理 Proxy

~/.zshrc 中添加下面内容(如果是用 zsh 的话):

# proxy list alias proxy='export http_proxy=socks5://127.0.0.1:1080; export https_proxy=socks5://127.0.0.1:1080' alias unproxy='unset http_proxy; unset https_proxy'

然后就可以在终端输入命令 proxy 开启代理,通过 unproxy 关闭代理,当然端口什么的是由你自己搭建的代理决定的。


酸酸乳或者 v2ray 什么的运行在 Windows 中,Linux 子系统也可以共享到,完美。

语言环境

Golang

即是在 Linux 安装 Go 的步骤:

  1. 下载并解压
    wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz
    tar -C /usr/local -xzf go1.12.9.linux-amd64.tar.gz
    
  2. 设置环境变量
    添加 /usr/loacl/go/bin 目录到PATH变量中。添加到 /etc/profile$HOME/.profile 都可以:
    vim /etc/profile
    // 在最后一行添加
    export GOROOT=/usr/local/go
    export PATH=$PATH:$GOROOT/bin
    
    保存后退出,执行以下命令让其生效:
    source /etc/profile
    
  3. 编辑 ·~/.zshrc
    前两部已经完成安装了,但是如果要在 zsh 中使用,还需要在 .zshrc 中加上环境变量:export PATH=$PATH:/usr/local/go/bin

检查 go 的版本: go version

Python

目前很多Linux发行版已经自带了 Python 了,比如我们安装的 Ubuntu 18.04 就已经预装了 Python 3.6。

工具链

Docker

WSL1 目前不支持 Docker 的守护进程,所以还是需要搭配 Docker for Windows,配置 daemon 暴露出 2375 端口。然后在 Linux 中配置:

echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> ~/.zshrc
source ~/.zshrc

这样才能够正常使用Docker,不过这样跟直接使用 Docker for Windows 没区别了。 Docker for Windows 好是好,硬伤就是资源消耗太大,而且不大稳定。

所以,无视这波操作,等 WSL2 出,原生支持 Docker 吧。

Windows Terminal

目前在 Microsoft Store 上可以直接下载到 Windows Terminal 了,不过还是预览版。等 Windows Terminal 完善起来后,基本上终端,用它就够了,已经集成了CMD、PowerShell、WSL,而且颜值很高。

放个油管链接:The new Windows Terminal,反正我就是被这个视频吸引了。

Visual Studio Code

为什么提 VS Code 呢,因为我感觉 WSL2 + VS Code + Windows Terminal 未来将是 Windows 下做开发的大杀器,会成为标配

VS Code 本身就是微软的产物,现在有了一个插件。叫:Remote - WSL,谁用谁知道,可以直接连接 WSL 系统进行开发。

比如,我们打开一个开发目录:

我的 local 环境中并没有安装 Python,VS Code 也没检测到编译器。点击左下角的小按钮连接“远程”WSL开发环境,比如在远程 WSL 中打开当前目录:


就会发现,显示了当前的 Ubuntu WSL 环境,而且在 VS Code 的终端内都可以直接敲命令,体验非常好。

以后开发再也不用在本地折腾这环境那环境的了,在 WSL 的 Linux 中随取随用,不要了直接删,现在就等 WSL2 的 Docker 加持了。