位元詩人 [Windows] 程式設計教學:Windows Subsystem for Linux

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

Windows Subsystem for Linux (WSL),是 Windows 10 的新功能,在 Windows 中提供 Ubuntu、Debian、openSUSE 等 Linux 子系統。

雖然沒辦法替代原生的 GNU/Linux,WSL 提供許多 Linux 系統常見的命令列工具,對於類 Unix 系統使用者來說,可以減少學習 Windows-only 方案的負擔。

進入 WSL 不用啟動龐大的虛擬機器軟體,只要打行指令就可以快速進入該子系統,可說是非常方便。

安裝 WSL

WSL 的專用指令是 wsl。使用以下指令安裝 Linux 子系統:

> wsl --install

GNU/Linux 有許多發行版。WSL 預設安裝最新穩定版本的 Ubuntu。

安裝需要花一點時間,而且中間要重開機一次。重開機後,WSL 會請使用者建立一組一般使用者帳號及密碼。

不加任何參數的話,即進入 WSL 子系統:

> wsl

在 WSL 內操作方式如同 Ubuntu。限於篇幅,這裡不詳說 WSL 的使用方式。

最後要離開子系統時,輸入以下指令:

$ exit

然後會回到原生 Windows 命令列環境。

安裝其他 Linux 子系統

除了預設的 Ubuntu 外,WSL 提供其他子系統。輸入以下指令來看可安裝的子系統:

> wsl -l -o
以下是可安裝的有效發佈的清單。
使用 'wsl.exe --install <Distro>' 安裝。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-Server-15-SP5    SUSE Linux Enterprise Server 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

隨著時間,WSL 提供的子系統會改變。你看到的可能跟這裡列出來的不同。

假若要安裝 openSUSE Leap,輸入以下指令:

> wsl --install -d openSUSE-Leap-15.5

接著,輸入以下指令來進入這個子系統:

> wsl -d openSUSE-Leap-15.5

進入這個子系統後,和 openSUSE 的使用方式雷同。限於篇幅,此處不說明使用方式。

若想更改預設的子系統,使用 wsl -s 指令:

> wsl -s openSUSE-Leap-15.5

套件管理程式

如同 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 移植自 Ubuntu,命令列工具的參數也符合 Linux 的習慣,不太需要重新學習另一套操作方式。

文字檔案

由於可以和 Windows 系統上的文字檔案直接互動,類 Unix系統上常見的文字處理工具也可以用在這些文字檔案上,相當地方便。

然而,這些文字檔案也會受到不同系統間的差異所影響,主要在兩方面:(1) 編碼 (encoding),(2) 行尾 (end of line)。

在 Linux 或是 macOS 等 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 下時常水土不服,也可以在這個子系統試試。

小結

由於 Microsoft 將 WSL 視為開發工具,使用者不應預期可以完美地移植 Linux 環境到 Windows 上,而比較像是 Cygwin 般,視為在 Windows 內的一個次系統。以筆者的觀點來看,應該將這個子系統視為開發時的輔助工具,不宜直接用來取代 Linux 環境。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。