今天又想起来了Bash for Windows, 就又试用了下,结果很惊喜。作为一个subsystem而不是虚拟机,它的性能在大多数情况下几乎可以达到原生Linux的水平,只在少数涉及到文件系统的测试中落后较多,毕竟是直接使用的NTFS系统。对于我来说,使用subsystem而不是虚拟机(哪怕是Hyper-V)的好处是:

  1. 当我不使用它的时候,是没有什么东西在运行的。(当然有后台进程除外例如MySQL和Redis。)而想要使用的时候,就直接cmder里运行bash就可以了。而虚拟机的话,得一直运行在那,占用我的内存。(当然虚拟机也可以不用的时候save起来,但save/resume还是需要点开虚拟机去操作,花去额外的时间);
  2. 不需要配置网卡IP, 因为它只是个subsystem, 可以直接访问网络,而网络上的其他机器也可以直接用Windows的IP和端口来访问其中的服务。这样对于开发是极其方便的,比如我之前用虚拟机的话,设置成桥接,在家和公司IP又会变化,由于网段不一样也不能设置成固定IP;设置成NAT呢每次新加服务又得加端口转发规则,着实很麻烦;
  3. Windows的分区是直接在/mnt/c下可用的,不用操心什么挂载之类的事情。用df可以看到rootfs就是Windows的分区,整个文件系统放在C:\Users\Jindi Wu\AppData\Local\lxss. (不过我直接在Windows修改其中的文件,subsystem里好像拿不到更改,是不是存在镜像或缓存之类的机制)?作为开发人员的话,可以直接把工作区用符号链接链到$HOME去。

当然,目前这个subsystem还在高速的演化中。GitHub上微软专门创建了一个项目于收集问题,现在有614个issues! 而微软的官方网站上的Release Notes里看到,最新的迭代又改进了subsystem和Windows的互操作性,例如可以直接在bash里调用Windows的程序,用Sublime Text之类的编辑器来编辑文件。

不过目前也还是有不少bug和缺陷,由于是subsystem而不是虚拟机,所以网络方面似乎支持的并不是很完整,ifconfig和ping都还没办法跑。(最新的新版说是可以无须管理员权限跑ping了)。但是就微软现在这态度,相信这些问题都能得到解决。我已经申请加入了Preview Insider, 希望能早点收到测试版更新。

当前的subsystem是用的Ubuntu 14.04 LFS, 官方源里的软件包都有些古老了,例如没有Redis 3.X, MySQL 5.7这些我需要的软件,需要手工添加apt repos. 最新的build里听说已经是16.04了。