Windows 求生手冊:Bash on Windows

Bash on Windows,或稱為 Windows Subsystem for Linux (WSL),是 Windows 10 的新功能,提供 Ubuntu 子系統在 Windows 10 環境中,雖然沒辦法替代原生的 GNU/Linux,Bash on Windows 提供許多 Linux 系統常見的命令列工具,對於類 Unix 系統使用者來說,可以減少學習 Windows-only 方案的負擔。這個子系統目前還是 beta 狀態,希望 Microsoft 日後能持續維護這個專案,讓 Windows 的終端機環境更好用。

Disclaimer:筆者尚入深入了解這個子系統,日後會再逐一更新相關內容。

安裝 Bash on Windows

Bash on Windows 預設不會直接打開,要使用的話,有以下步驟:

  1. 開啟 developer mode
  2. 下載相關的 Windows 更新
  3. 開啟相關的 optional feature

之後,開啟一個 DOS 環境,輸入 bash 指令,第一次開啟時,會詢問使用者是否要下載 Ubuntu 子系統,依照系統指示安裝即可。首次使用時,系統會提示使用者建立一個帳號及設立密碼,由於這只是用於 Ubuntu 子系統的使用者名稱,不需要設立太複雜的名稱。日後要使用 WSL 時,也是開啟終端機後輸入 bash 即可進入這個子系統。

套件管理程式

如同 Ubuntu,WSL 也是使用 APT 來管理套件,使用者可依喜好自行選用 apt-get 或是 aptitude 來管理套件。由於 Ubuntu 預設沒有 root 帳號,需要更新軟體時,使用 sudo 即可切換至 root 權限。使用的方式就和原本的 Ubuntu 的 APT 相似。

檔案架構

這個子系統可以和原來的 Windows 系統上的檔案互動,例如,C: 磁碟位於 /mnt/c,另外會有獨立的家目錄,如 /home/user 等。如果要和 Windows 原生程式互動的檔案,建議放在 /mnt 之中。家目錄內的設定檔,最好不要用 Windows 原生軟體開啟,以免造成檔案損壞。

殼程式

WSL 預設提供 Bash,使用起來也和 Linux 或 Mac 上的 Bash 大抵上雷同,設定環境的方式也相同。如果讀者想要用其他的 shell 環境,也可以自行更換,像筆者較偏好 Zsh + Oh My Zsh 的組合,就可以自行更換。但是要進入 WSL 時,仍然要先輸入 bash,進入 WSL 後才手動切換到 Zsh。由於 WSL 移植自 Ubuntu,命令列工具的參數也符合 Linux 的習慣,不太需要重新學習另一套操作方式。

文字檔案

由於可以和 Windows 系統上的文字檔案直接互動,Unix-like 系統上常見的文字處理工具也可以用在這些文字檔案上,相當地方便。然而,這些文字檔案也會受到不同系統間的差異所 影響,主要在兩方面:(1) 編碼 (encoding) (2) 行尾 (end of line)。 在 Linux 或是 Mac 等類 Unix 系統上,系統的編碼主要是用 UTF8,在 Windows 原生環境下則是依照語系而有所不同。在 WSL 中,可以用 iconv 來轉換文字編碼。

另外一個問題是行尾,不同系統使用的行尾不同。可用 dos2unix 這個小工具去轉換檔案行尾。

以下指令將檔案結尾轉為 UNIX 格式:

$ dos2unix path/to/file.txt

以下指令將檔案結尾轉為 DOS 格式:

$ unix2dos path/to/file.txt

由於系統的差異性,筆者傾向在 Windows 原生環境中處理文字檔案,而程式碼多以英文字元撰寫,較少受到編碼的影響,則可以在 WSL 下處理。

腳本語言

筆者目前尚未深入實測各個腳本語言的使用情形,理論上,沒有用到 C/C++,只以腳本語言實作的程式,應該不會有什麼大問題才是。

編譯軟體

經筆者實測,WSL 系統所編譯的執行檔僅能在該子系統內使用,而非原生的機械碼。對於內部使用的程式來說,是不是原生機械碼其實不是那麼重要,只要程式能順利執行即可。但若是要對外發佈的程式,就不適合在這個子系統內編譯,仍然要回歸原生的 Windows 環境。

對於使用到 C/C++ 的高階語言的延伸模組,也是可以在這個子系統中編譯和安裝,像是 某些 Perl、Ruby、Node.js 等語言的延伸模組,在 Windows 下時常水土不服,也可以在這個子系統試試。不過,即使能夠安裝,也不代表就完全沒問題,筆者拿 Rails 5 在 WSL 中測試,光是 Hello World 等級的 app 就有一些小問題了。由於模組眾多,筆者也無法一一實測,要請各位讀者多加嘗試。

小結

Bash on Windows 算是 Microsoft 對開發者釋放的一項利多。然而,這項計畫還在早期階段,功能並不完善。由於 Microsoft 將 Bash on Windows 視為開發工具,使用者不應預期可以完美地移植 Linux 環境到 Windows 上,而比較像是 Cygwin 般,視為在 Windows 內的一個次系統。以筆者的觀點來看,應該將這個子系統視為開發時的輔助工具,不宜直接用來取代 Linux 環境。

comments powered by Disqus