Windows Subsystem for Linux (WSL) 安裝教學 & 初體驗

八月二日時微軟釋出了 Windows 10 年度更新版(組建 14393),其中已經添加了流傳已久的 Bash for Windows(其實組建 14316 就有了)。小弟早就迫不及待想嘗試一下了,在這裡寫個教學記錄一下。

首先你要知道:這不是虛擬機器,也不是容器,也不是專門為 Windows 編譯的 Linux binary(像是 cygwin)。1

你可以想象它是 Wine 的相反——Ubuntu 的 binaries 在 Windows 上原生實作。Ubuntu 官方提到2

A team of sharp developers at Microsoft has been hard at work adapting some Microsoft research technology to basically perform real time translation of Linux syscalls into Windows OS syscalls.

Requirements3

Prepare

啓用開發人員模式

首先,請打開 Windows 的設定應用程式,你可以在開始選單的左下角第二個圖示找到它。

其次,請點選更新與安全性,然後點選左方選單的開發人員專用:

接著,點選開發人員模式,然後點選是:

啟用 Windows subsystem for Linux (Beta) 方法一

  1. 請按下 Win + X,然後選擇命令提示字元。接著鍵入 OptionalFeatures 並且按下 Enter。
  2. 將列表拉到最底部,將適用於 Linux 的 Windows 子系統 (搶先版 (Beta)) 的核取方塊打勾,並且點選確定。

  3. 待其處理完畢後,請儲存你的資料以及此網頁連結,然後重新開機。

啟用 Windows subsystem for Linux (Beta) 方法二

請按下 Win + X,然後選擇命令提示字元(系統管理員)。接著逐行執行以下指令4

powershell  
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux  

安裝 Windows subsystem for Linux (Beta)

  1. Windows 要求重新開機時,請重新開機,因為 Windows subsystem for Linux 的某些底層需求只有在 Windows 啟動時才能載入。5
  2. 重新開機完成之後,請按下 Win + X,然後打開命令提示字元。
  3. 如果你要使用預設的設定,請執行 lxrun /install /y,這會同意使用者條款、安裝子系統並且設定使用者名稱為 root,密碼為空。然後請跳到下一個部分繼續閱讀(推薦)
    如果你要手動設定,請執行 bash,閱讀條款之後輸入 y 以繼續。
  4. 資料處理完成之後,請設定 UNIX 使用者名稱及密碼,要注意這裡的使用者名稱及密碼跟 Windows 的那對完全沒有關係。6如果你選擇使用者名稱為 root,密碼就不需要設定。

技巧、注意事項

  1. 如果以後要打開 Ubuntu on Windows,執行 bash
  2. 可以我看到一開始進去的 path 是 /mnt/c/Users/Birkhoff Lee,也就是說 Windows 有把你的使用者目錄(C:/Users/使用者名稱)掛載進去。
    往上層目錄看,原來它是把所有硬碟的檔案系統直接以可讀可寫的權限掛載進去,所以請不要在裡面執行 rm -rf /mnt/C/* 之類的東西,不然會爆炸,以下誠招勇者嘗試
  3. root 使用者的檔案目錄可以在 Windows Explorer 下面找到,path: C:\Users\使用者名稱\AppData\Local\lxss\rootfs
  4. Docker 目前在上面跑不了,該 issue 討論串連結:https://github.com/Microsoft/BashOnWindows/issues/85
  5. 本篇教學安裝到的 Ubuntu 版本是 14.04.4 LTS。
  6. 這目前只是測試版,不是所有東西都能 work。
  7. 解除安裝:執行 lxrun /uninstall /full /y
  8. 請在 https://github.com/Microsoft/BashOnWindows/issues 回報問題
  9. 每個使用者的 Ubuntu on Windows 都是獨一的
  10. 在 Windows 下跑 bash -c "指令" 可以直接執行 bash 指令
  11. FAQ 連結:https://msdn.microsoft.com/zh-tw/commandline/wsl/faq

References