====== Windows Subsystem for Linux(WSL)使用体验 ======
由于工作的原因,个人的主要开发环境是Unix/Linux,所以一直对Linux桌面系统抱有很大的期望。然而一晃多年,尽管Linux已经统治了服务器领域,但在桌面领域的表现依旧可怜,所以后来就转用Mac了。
不过,随着微软在Windows 10上推出Windows Subsystem for Linux(WSL),从而能够在Windows上直接运行Linux二进制代码,顿时眼前一亮:如果能将Windows桌面与Linux环境结合,各自取长补短,不也是一个很好的解决方案吗?
于是,就在一台Windows 10机器上操练起来了。
本文的素材写于2018年10月,随着时间推移,WSL也在不断进化,所以内容可能有过时的部分,仅供参考。
===== 安装 =====
安装过程可参考微软的官方文档:
* [[https://docs.microsoft.com/en-us/windows/wsl/install-win10|Windows Subsystem for Linux Installation Guide for Windows 10]]
* [[https://docs.microsoft.com/en-us/windows/wsl/initialize-distro|Initializing a newly installed distro]]
这里安装的版本是Ubuntu。
首次启动,需要创建一个用户名和密码,之后就如同在Linux下操作了。
===== 使用 =====
==== 更新系统 ====
使用过程中需要不时更新下系统,以便获得软件最新的版本和补丁:
$ sudo apt-get update
$ sudo apt-get upgrade
个人常用aptitude代替apt-get:
$ sudo apt-get install aptitude
$ sudo aptitude update
$ sudo aptitude upgrade
==== 操作Windows文件 ====
WSL缺省把磁盘分区挂载到/mnt/的相应目录下,比如C盘的目录是/mnt/c/,可以进入相关路径操作Windows系统上的文件。
如果要手动挂载其他分区,可使用mount命令,比如挂载E盘:
$ mount -t drvfs e: /mnt/e
==== 安装软件 ====
使用apt工具安装,比如安装一些网络工具:
$ sudo aptitude install traceroute
$ sudo aptitude install nmap
$ sudo aptitude install fping
$ sudo aptitude install httping
$ sudo aptitude install lynx
$ sudo aptitude install lftp
$ sudo aptitude install curl
$ sudo aptitude install whois
$ sudo aptitude install httpie
安装一些开发工具:
$ sudo aptitude install build-essential
$ sudo aptitude install flex
$ sudo aptitude install bison
$ sudo aptitude install autoconf
$ sudo aptitude install libtool
$ sudo aptitude install cvs
$ sudo aptitude install subversion
$ sudo aptitude install git git-doc git-svn git-email
$ sudo aptitude install mercurial
==== 运行服务器程序 ====
虽然WSL的主要目的是使用一些客户端工具,但运行服务器程序也是可以的。
比如安装redis服务:
$ sudo aptitude install redis-server
启动redis:
$ sudo service redis-server start
这时,你如果运行netstat命令,是看不到监听服务的,但实际服务已经在运行了。
运行redis-cli,可以看到服务是正常的:
$ redis-cli
127.0.0.1:6379> keys *
...
127.0.0.1:6379>
其实,在Windows的命令提示符运行netstat命令,是可以看到redis监听的6379端口的:
{{:computer:env:cmd.png}}
也就是说,WSL中的服务和Windows的服务之间是互通的。假设Windows下有一个http代理服务,监听在8118端口,我们可以在WSL下设置相应的环境变量来直接使用,而不需要在WSL中再单独安装类似的服务:
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
==== 运行图形界面程序 ====
WSL是字符界面,本身不能运行图形界面程序,是因为缺少Xwindow Server,但我们可以在Windows下启动一个Xwindow Server来解决。[[https://sourceforge.net/projects/vcxsrv/|VcXsrv]] 就是这么一个工具。
启动VcXsrv后,在终端设置环境变量:
$ export DISPLAY=localhost:0
之后,就可以运行图形应用了,比如运行gitk:
{{:computer:env:xserver.jpg}}
如果显示有乱码,那可能是缺少字体的缘故,安装相应字体就可以了。
===== 总结 =====
总体来说,WSL的表现还是不错的,大部分的工作都能完成。以前想在Windows下运行Linux,或者用虚拟机,或者是[[https://www.cygwin.com/|Cygwin]],比较起来,WSL有自己的优势,而且WSL还在不断迭代发展,值得尝试和期待。
{{tag>Windows}}