本文最初发表于华来四公众号,请扫描以下二维码关注。给盆盆发微信(微信号:markpah),即可要求加入Windows Docker微信群、或者微软混合云微信群。您还可以加入华来四QQ群(423730487),以参加在线视频讲座。

逆天的Ubuntu on Windows 10_第1张图片


Ubuntu on Windows 10已经出来了!


可以参考以下文档,了解如何把这个逆天的玩意请回家!

https://msdn.microsoft.com/en-us/commandline/wsl/install_guide


部署方法


以下简单描述一下办法,首先我们必须升级到Windows 10版本14316,可能需要加入微软的Windows Insider Program,并且把会员级别改为“快”(Fast Ring)。


升级完成后,可以查看自己是否满足要求,如附图所示。

逆天的Ubuntu on Windows 10_第2张图片


然后启用“开发人员模式”,如附图所示。

逆天的Ubuntu on Windows 10_第3张图片


然后安装Windows Subsystem for Linux,如附图所示。

逆天的Ubuntu on Windows 10_第4张图片


这里有一个小问题,不少用户是用Microsoft Account登录Windows 10的,如果账号昵称是中文名字(例如盆盆),则用户配置文件夹路径中包含中文,会导致Ubuntu on Windows的用户模式映像文件无法解压缩。所以推荐创建一个英文的用户账户

逆天的Ubuntu on Windows 10_第5张图片


提示 可能需要清空IE缓存(映像包文件会缓存在IE Cache中),然后重新运行Bash以触发下载和解压流程。


简单分析


很快,Ubuntu就出现在我们眼前,可以在里面跑大量的命令和工具!

逆天的Ubuntu on Windows 10_第6张图片


安装好以后,C盘根目录会自动挂载到Ubuntu的文件系统里。


Windows分区挂载的目录位于以下路径,可以在Bash下列Windows分区的目录

%userprofile%\AppData\Local\lxss\mnt\c

逆天的Ubuntu on Windows 10_第7张图片


在以下路径我们可以看到Ubuntu用户模式映像的文件系统:

%userprofile%\AppData\Local\lxss\rootfs

逆天的Ubuntu on Windows 10_第8张图片


可以在Bash里用apt-get安装软件,甚至部署redis等,方便用Windows 10开发Linux应用。


在Bash窗口里随便运行一些命令,用Process Monitor抓包,会发现有以下一些奇怪的进程,进程名称是空的。

逆天的Ubuntu on Windows 10_第9张图片


可以看到这些奇怪的"进程"都在访问Ubuntu的映像文件夹。

逆天的Ubuntu on Windows 10_第10张图片


查看堆栈信息,发现都是内核模式的调用,可以看到基本都是Lxcore.sys和Windows内核(ntoskrnl.exe)之间的交互。

逆天的Ubuntu on Windows 10_第11张图片在网上查到Ubuntu on Windows 10的核心驱动有两个,一个就是上述的Lxcore.sys,还一个就是Lxss.sys。其关系可以用Dependency Walker检查,如附图所示。

逆天的Ubuntu on Windows 10_第12张图片


以下是在官网上的视频截图,描述Bash on Ubuntu on Windows 10的系统架构。可以看到用户模式的Linux组件是由Ubuntu官方提供的,所以和我们平时用的Ubuntu完全一样。而到了内核模式,系统会将Linux的Syscall通过上述的Lxcore.sys转成Windows内核的Syscall。

逆天的Ubuntu on Windows 10_第13张图片


历史渊源


其实早在Windows NT/Windows 2000年代,就有Posix子系统的概念,可以用来跑一些UNIX命令,方便开发人员编写UNIX代码。除了Posix子系统外,还有我们熟悉的Win32子系统,还有一个我们似曾相识的OS/2子系统。

逆天的Ubuntu on Windows 10_第14张图片


到了Windows 7/Windows Server 2008 R2时代,这个Posix子系统变成了Subsystem for Unix-based Application(SUA)。


这是Windows 2008 R2里安装的SUA。

逆天的Ubuntu on Windows 10_第15张图片


可以运行Korn Shell。

逆天的Ubuntu on Windows 10_第16张图片

安装好SUA以后,查看以下的注册表键值,看到Posix子系统为可选的子系统,该子系统为psxss.exe。

逆天的Ubuntu on Windows 10_第17张图片


不过Ubuntu on Windows 10并没有这样的注册表键值。