本文最初發表於華來四公衆號,請掃描以下二維碼關注。給盆盆發微信(微信號:markpah),即可要求加入Windows Docker微信羣、或者微軟混合雲微信羣。您還可以加入華來四QQ羣(423730487),以參加在線視頻講座。
Ubuntu on Windows 10已經出來了!
可以參考以下文檔,瞭解如何把這個逆天的玩意請回家!
https://msdn.microsoft.com/en-us/commandline/wsl/install_guide
部署方法
以下簡單描述一下辦法,首先我們必須升級到Windows 10版本14316,可能需要加入微軟的Windows Insider Program,並且把會員級別改爲“快”(Fast Ring)。
升級完成後,可以查看自己是否滿足要求,如附圖所示。
然後啓用“開發人員模式”,如附圖所示。
然後安裝Windows Subsystem for Linux,如附圖所示。
這裏有一個小問題,不少用戶是用Microsoft Account登錄Windows 10的,如果賬號暱稱是中文名字(例如盆盆),則用戶配置文件夾路徑中包含中文,會導致Ubuntu on Windows的用戶模式映像文件無法解壓縮。所以推薦創建一個英文的用戶賬戶。
提示 可能需要清空IE緩存(映像包文件會緩存在IE Cache中),然後重新運行Bash以觸發下載和解壓流程。
簡單分析
很快,Ubuntu就出現在我們眼前,可以在裏面跑大量的命令和工具!
安裝好以後,C盤根目錄會自動掛載到Ubuntu的文件系統裏。
Windows分區掛載的目錄位於以下路徑,可以在Bash下列Windows分區的目錄
%userprofile%\AppData\Local\lxss\mnt\c
在以下路徑我們可以看到Ubuntu用戶模式映像的文件系統:
%userprofile%\AppData\Local\lxss\rootfs
可以在Bash裏用apt-get安裝軟件,甚至部署redis等,方便用Windows 10開發Linux應用。
在Bash窗口裏隨便運行一些命令,用Process Monitor抓包,會發現有以下一些奇怪的進程,進程名稱是空的。
可以看到這些奇怪的"進程"都在訪問Ubuntu的映像文件夾。
查看堆棧信息,發現都是內核模式的調用,可以看到基本都是Lxcore.sys和Windows內核(ntoskrnl.exe)之間的交互。
在網上查到Ubuntu on Windows 10的核心驅動有兩個,一個就是上述的Lxcore.sys,還一個就是Lxss.sys。其關係可以用Dependency Walker檢查,如附圖所示。
以下是在官網上的視頻截圖,描述Bash on Ubuntu on Windows 10的系統架構。可以看到用戶模式的Linux組件是由Ubuntu官方提供的,所以和我們平時用的Ubuntu完全一樣。而到了內核模式,系統會將Linux的Syscall通過上述的Lxcore.sys轉成Windows內核的Syscall。
歷史淵源
其實早在Windows NT/Windows 2000年代,就有Posix子系統的概念,可以用來跑一些UNIX命令,方便開發人員編寫UNIX代碼。除了Posix子系統外,還有我們熟悉的Win32子系統,還有一個我們似曾相識的OS/2子系統。
到了Windows 7/Windows Server 2008 R2時代,這個Posix子系統變成了Subsystem for Unix-based Application(SUA)。
這是Windows 2008 R2裏安裝的SUA。
可以運行Korn Shell。
安裝好SUA以後,查看以下的註冊表鍵值,看到Posix子系統爲可選的子系統,該子系統爲psxss.exe。
不過Ubuntu on Windows 10並沒有這樣的註冊表鍵值。