====== 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}}