前言
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 環境。