早在大三上系统级程序设计课程的时候,就通过老师的演示了解到 Windows 的新产品—— Windows Subsystem for Linux(WSL), 可以在 Windows 系统下运行 Linux 系统的程序或命令。不过当时我的旧电脑上装了 Ubuntu 的双系统,所以一直没有尝试。现在换了新电脑之后,一直没有装回 Linux 系统,一是怕麻烦不太想折腾,二是不太想划分硬盘空间。于是干脆就装一个 WSL 吧,尽管现在还没实际使用 Linux 系统的需要,不过就暂时当一个玩具吧。
优点
WSL 还是挺爽的,还没用就感觉优点满满:
- 安装简单。简直是傻瓜式的操作,就在系统设置中开启一下,在商店中搜索下载即可,跟在应用商店下个 app 差别不大,而且 Windows Store 的下载速度惊人,非常快就能装好。另外,也不需要考虑任何的驱动兼容问题,少了很多奇奇怪怪的问题。
- 空间友好。我下的 Ubuntu 系统才 200+MB, 相比于普通的带 GUI 的 Linux 操作系统,可谓是不占空间一样。另外最关键的一点是,WSL 系统的所有文件都是放在系统盘中,不需要自己另行划分磁盘空间来放置系统。这个点我觉得太赞了,之前装 Linux 双系统最为麻烦的一点就是要专门划分空间,从原有的磁盘中分出空闲空间来专门服务于 Linux 系统,怎么分,分多少,都需要一番思考和设置。分得多吧又感觉浪费,分得少又会不够,到时加空间比较麻烦。
- 协同方便。因为 WSL 系统在 Windows 当中,两系统当中的文件都能够轻易地传输使用。之前的话,Linux确实可以通过挂载的方式访问 Windows 的文件,但反过来却不行,而且操作还有风险。当时有访问跨系统文件的需要时,还需要专门重启一下切换系统,又或者通过网页微信传输文件到手机作为中转。
安装
安装还是挺简单的,只要本机的 Windows 版本支持 WSL功能即可。
打开“启用或关闭 Windows 功能”,开启适用于 Linux 的 WIndows 子系统。这个可以通过在开始菜单搜索启用(qiyong)的拼音就出现了。
打开 Microsoft Store,搜索 WSL 则可以看到支持的所有 Linux 版本。选择其中一个,获取安装即可。安装后可以在开始菜单找到并打开,会自动开启该系统下的 bash 命令行界面。
配置
一个完美的开发运行系统,最关键的还是各种的软件或系统的配置,参考了网上的各种各样的文章,主要有下面的方面需要配置。我使用的是 Ubuntu 系统,不同的系统可能配置的具体方式会有出入。
软件源更新
Ubuntu 软件安装/更新源均在国外,下载速度感人,所以可以将所有软件源更换为国内的镜像。这里选择的是阿里云的源。首先将原来的源文件备份,然后更改源文件,将内容换成阿里云的源链接。
|
|
通过 vim 修改源文件,将文件内容更改为下面内容
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
保存后更新
|
|
Nodejs
安装方法可以参考这里。Linux 上面有三个方法,一是直接下载编译后的包来使用,下载后建立链接;二是通过下载源代码来编译构建;三则是使用 apt-get 命令直接安装。我当然是选择了最简单的 apt-get 命令安装大法。两行命令搞定。
|
|
安装后可以通过查看版本号测试是否成功
|
|
我的 node 的确成功安装并测试,但是 npm 却没有,输入命令时提示如下,似乎是命令调用错误,通过 which 命令查看时发现调用的是在 Windows 系统的 npm,着实奇怪。
|
|
网上搜索了一下也很多人有类似的问题,GitHub 上面也很多人提了 issue,尝试无果,最终选择换了个方式重新安装,随后解决。
GitHub issue :这里提到的方法主要是修改环境变量的顺序,确保先查找 WSL 安装的 npm 先被搜索到,尝试了一下没有用,which 命令测试也没有变化。
StackOverflow 上的重装大法 :将旧的移除后,用新建源的方法重新使用 apt-get 来安装。重新安装后测试成功
1 2 3 4 5
sudo apt-get --purge remove nodejs curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt-get install -y nodejs sudo apt-get install -y build-essential
zsh and oh-my-zsh
之前各种的 Linux 系统,无论是服务器还是桌面系统,都是使用自带的 bash,但是大家都说别的 shell 终端更好,于是就干脆试试大家都在推荐的 zsh。
- 可以通过命令
cat /etc/shells
查看本机是否有 zsh,有的话可以直接跳到 3 - 如果没有的话,使用 apt-get 安装即可
sudo apt-get install zsh
chsh -s /usr/bin/zsh
通过命令切换到 zsh,重启终端即可- 初次进入 zsh 会提示你需要进行配置文件的创建与配置,我们这里使用 oh-my-zsh 来提供配置
获取 oh-my-zsh 的方法则比较简单,通过 curl 或者 wget 的方式获取 shell 脚本后执行即可。
|
|
但这里我怎么也搞不下来,两种方式都不能建立链接,获取不到这个脚本,自然无法进行后续的安装处理。原因似乎是国内的网络环境因为你懂的原因无法访问这个网址 ,估计走代理的话应该可以解决。所以我采用的方法是在 WIndows 系统下好这个 shell 脚本,然后在 WSL 里面运行,问题解决。之后就可以通过在配置文件 ~/.zshrc
里面设置主题里,可选的主题及效果可以点此选择。
我选的是 ys,这里要吐槽一句,不知道为什么网上看到的预览图片,跟我实际使用的效果相差太大了,有些甚至对使用造成了影响,例如主题 agnoster ,显示的实际颜色与下面的样例图出入太大了,在 WSL 里面打开就是目录显示的是深蓝色,深到看不清楚里面的字那种,尽管我挺喜欢这种风格的,但因为影响到实际使用了,只能放弃。
官方网站以及大多数经验分享文章中的 agnoster 主题效果
这是我用主题 agnoster 的效果图。
这是我最终选择的主题 ys 的效果
发现了为啥我的颜色跟网上看到的不一致,原来是需要设置额外的配色,将某些颜色映射为其它色号。我用的是 Windows Terminal,设置配色比较简单,只要在配置文件的 schemes
属性中添加配色主题,再在想要设置配色的终端设置 color-scheme
即可。配色主题可以到这个 GitHub repo 上面挑选。
|
|
oh-my-zsh插件
自带的插件只需要在配置文件中添加即可,我这里添加了:
- z:路径自动推测跳转
z dir
- extract:解压所有类型文件
x file
- git:简化了 git 的常用命令
- npm:npm 命令的自动补全
额外下载的插件则需要下载源代码到 ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins
目录下面
- zsh-syntax-highlighting:自动语法高亮
- zsh-autosuggestions:自动补全建议
- git-open:打开 git remote
代理
Simple
因为我国的独特网络环境,在访问某些网站的时候速度比较感人,有些时候甚至还不能访问,因而需要一些比较科学的方法来访问互联网,这里设置的代理,本质还是让网络请求通过本机(Windows 系统)的工具进行网络请求。在 zsh 的配置脚本~/.zshrc
中添加下面别名即可,里面的端口和协议根据自己的工具具体设置。设置后添加别名 proxy 开启,通过 unproxy 关闭。
|
|
添加后通过source ~/.zshrc
激活,输入 proxy 后即可打开某些不可访问的网站测试一下。
zsh-proxy
在实际使用中发现,上面这样的简单的方式在某些地方虽然可行,但是有些地方在实际使用上面却会有问题,例如我在使用 wget 获取网络资源时会提示 socks5 识别不了,说是 wget 并不支持 socks 协议。另外,一些需要频繁访问网络的命令,如 git,npm 等似乎有着自己独特的代理设置方式。没办法,一个 wget 就逼着不得不改变。搜了几个方法之后,最终选择了一个 zsh 插件zsh-proxy来实现代理功能。
使用方法很简单
将插件脚本 clone 到本地
1
git clone https://github.com/sukkaw/zsh-proxy.git ~/.oh-my-zsh/custom/plugins/zsh-proxy
在配置文件
~/.zshrc
的插件项中添加插件 zsh-proxy激活配置文件
1
source ~/.zshrc
通过命令
init_proxy
进行初始化配置,按照提示输入自己的 http 代理和 socks5 代理即可配置完成后通过命令操作即可
- proxy: 开启
- noproxy: 关闭
- myip: 查看代理的 ip
走代理的速度还是挺爽的,我用 wget 下载 Miniconda,虽然才 80 多兆,但不走代理才 30-40Kb 每秒,开启代理每秒 3M 多,半分钟不到就下完。
Python
以前的人都说,Python 在 Linux 环境不需要折腾这么多官方,而我在 Windows 下面进行 Python 项目的开发也确实或多或少地遇到一些小问题,尤其是 package 的安装和管理,使用 pip 的时候莫名其妙地就失败。不过这些问题在开始的时候折腾过后一般就不再发生,尤其是我使用 conda 进行包管理之后,基本很少发生。
除了可能有奇奇怪怪的的错误之外,使用 Linux 系统开发的好处就是能够接近实际的部署生产环境。因为现在使用的服务器大多都是使用 Linux系统,在相似的环境下开发,部署起来更加方便。
我也试过跑到 Linux 下面进行 Python 的软件开发,有着 Pycharm 的支持,开发效率也还不错。不过主要的问题是,非开发工具的效率和便利性确实不行。~~就像是简单地从别人那接收一个 QQ 发过来的文件,我需要从手机 QQ 中接收保存下来,再通过微信发送给在 Linux 系统中登录的网页微信。一两次都还好,经常这样的话简直灾难,尤其是某些应用的网页端 app 简直是残废。~~有些沟通交互实在麻烦,而且开发过程中的休息与娱乐也比较困难,使我难以坚持下来。
WSL 似乎就能完美解决这个问题(当然确实云服务器也可以,但就我能负担的云服务器的硬件配置加网络,可能性能还不如虚拟机),双系统完美交互。确实可以考虑把一些 Python 项目的开发和运行丢到这里。
说了一堆废话,下面看看安装。机器本身就自带 Python2 和 Python3,不过我现在比较偏向于使用 conda 作包管理和虚拟环境管理,就打算重新下一个 Anoconda。不过完整的 Anoconda 体积庞大,包含了很多不必要的科学计算库,这里选的是 Miniconda。安装也是傻瓜式。
获取安装脚本。建议开启代理,不然速度感人,又或者你在 WIndows 系统下好再在 WSL 里面执行也可以
1
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
赋予执行权限。
1
sudo chmod 777 Miniconda3-latest-Linux-x86_64.sh # 直接全给权限了
执行安装脚本。安装过程中会出现若干的配置提示信息,包括安装路径等。
1
./Miniconda3-latest-Linux-x86_64.sh
添加环境变量。将
export PATH=/home/YOURNAME/miniconda3/bin/conda:$PATH
放到你的 bash 配置文件中。我放到了 zsh 的配置文件~/.zshrc
中。添加后重新启动,或者激活配置文件即可
待填坑
- ✅ Python。
Ubuntu18 自带了 Python2 和 Python3。我已经不再使用 Python2 了,而 Python2 把 Python和 pip 的命令默认调用都占用了,考虑移除 Python2,或者搞一个 Anoconda 来做环境管理。 - ❌ C/C++ 环境。
想好好学习一下 C++,之前因为 Windows 环境的原因,不得不装了个巨占空间的 Visual Studio,然后到现在还没写过一行 C++ 代码。有点想把它删了,在这里搞个 LLVM/clang 编译器。
命令与快捷键
记录一下一些较为常用和实用的命令和快捷键这里
命令
x file
:解压任意类型文件(需要添加 extract 插件z dir
:根据给出的目录进行跳转- 不一定是完整的,可能只是最后一级
- 效果感觉一般,感觉需要吃历史记录的,很多新目录访问都完成不了
- 看了一些分析,说是要经过过往的 cd 跳转来获取经验的
快捷键
好像是仅适用于 zsh
- ctrl + u:清空当前行命令
- ctrl + a:跳到行首
- ctrl + e:跳到行尾
- ctrl + k:删除光标到行尾内容