WSL (Windows Subsystem for Linux) 經過多年的發展,已經到達了相當穩定的階段,微軟在 2022/11/22 推出 1.0 正式版本,如果你還沒用過,那你真的要考慮試試。今天這篇文章我從如何安裝開始講起,並介紹新版本帶來了哪些新功能。
關於版本
我其實是在很多天前就從這則推文得知 WSL 1.0 即將發佈的消息,但我看到的第一個感覺就是:「咦?WSL 即將推出 1.0 版?現在不是 WSL 2 了嗎?怎麼重複推出一個 WSL 1.0 這玩意?!」我從推文整理了以下資訊,我用 Q&A 的方式你可以比較好理解!XD
微軟:WSL 即將推出 1.0 版!
用戶:等等,現在不是 WSL 2 了嗎?
微軟:我們 WSL 1 還在支援週期內
用戶:那 WSL 1.0 等於 WSL 2 嗎
微軟:也不是,WSL 1.0 是 Microsoft Store 上面的版本,所以 WSL 1 與 WSL 2 都支援
用戶:你版本搞這麼複雜幹嘛啦!🤬
微軟:你不用管這麼多,以後到 Microsoft Store 安裝或更新 WSL 就好了!
總之,你只要這次可以成功利用 Microsoft Store 安裝 WSL 的話,未來就不用再擔心版本的問題了,因為 Microsoft Store 未來會自動幫你安裝更新版本!不過,前提是你要能真的順利安裝起來,請繼續看下去!😅
安裝步驟
我原本以為安裝 WSL 1.0 很簡單,畢竟台灣人都是不看說明書安裝的,我直接從 Microsoft Store 安裝 Windows Subsystem for Linux 最新版(1.0.0.0
),結果一啟動就告訴我以下錯誤:
Windows version 10.0.19045.2251
does not support the packaged version of Windows Subsystem for Linux. For information please visit https://aka.ms/wslinstall
我的 Windows 10 Pro 明明就已經裝到 22H2
最新版了,這樣還不能用,實在說不過去啊!不過,錯誤訊息至少很佛心的叫我到 https://aka.ms/wslinstall 查看資訊,我從頭看到尾,裡面完全沒提到「成功安裝」的關鍵知識,還說了只要 Windows 10 version 2004 and higher (Build 19041 and higher) 就可以裝,但我的 Windows 10 已經是 20H2 且版本號為 10.0.19045.2251
了耶,這理論上應該可以成功安裝吧!😩
最後,我是從 Windows Command Line 官方部落格的 The Windows Subsystem for Linux in the Microsoft Store is now generally available on Windows 10 and 11 文章,才得知原來 Windows 10 還要額外安裝 KB5020030 才行,這才是成功安裝的關鍵啊!🔥
如果你是 Windows 11 的話,要安裝 KB5019157 才行!
既然得知要先安裝 KB5020030 才能使用 WSL 1.0 版,我在開啟 KB 網頁後,發現這頁長篇大論寫一堆,看了一下如何取得更新,他又說可以直接從 Windows Update 看到 KB5020030
更新,但我的電腦就是看不到,我去 Twitter 問了這個問題,他說剛推出的更新,通常要等 3 週左右才會看到,所以這問題應該是短期的現象,只能手動下載了!最後,我是直接從 Microsoft Update Catalog 網站,查找 KB5020030
關鍵字,才找到可以下載的檔案,請依據你的 CPU 架構進行下載,如下圖示:
下載後直接執行安裝,重開機之後,就可以正常使用 WSL 1.0 了!這個新版的 WSL 1.0 多了一個全新的 --version
參數,你可以藉此得知自己有沒有安裝成功:
wsl --version
我重新整理一下上述的安裝步驟,其實就兩個步驟而已:
-
先透過 Windows Update 安裝 KB5020030
更新
若找不到就到 Microsoft Update Catalog 手動下載安裝,安裝後會需要重開機。
-
若要安裝全新 WSL 版本,可以透過 wsl --install
命令直接安裝
wsl --install
若你無法從 Microsoft Store 安裝,那就只能透過 Windows 內建的選用元件來安裝,你只要加上 --inbox
參數即可,例如:
wsl --install --inbox
本文稍後還會介紹更多「安裝」相關的命令參數。
-
若要升級現有的 WSL 版本,可以透過 wsl --update
命令直接原地升級
wsl --update
注意:在安裝 KB5020030
更新之前,使用 wsl --update
是沒有效果的!
只要套用 KB5020030
更新之後,使用 wsl --update
就可以自動升級了!
這個步驟會自動從 Microsoft Store 安裝 Windows Subsystem for Linux 最新版 (目前最新版為 1.0.0.0
),你也可以透過 wsl --version
或 wsl uname -r
得知 WSL 的 Kernel 版本!如
使用方式
在我兩年前的使用 WSL 2 打造優質的多重 Linux 開發環境文章中,已經有了鉅細靡遺的說明,這些內容至今都還有效,沒用過的人可以跳過去看文章。這篇文章我就來介紹 WSL 1.0 全新的功能有哪些!🔥
-
查看 WSL 版本
以前因為 WSL 一直在發展中,所以對版本沒有很好的管理,也很難查看目前的 WSL 版本為何。而新版 WSL 1.0 支援了 --version
參數,可以很方便查看這項版本資訊:
wsl --version
-
更新 WSL 版本
由於 WSL 已經被標示為「穩定狀態」,所以未來升級版本變的相當容易,預設用以下指令就可以升級,他會從 Microsoft Store 自動下載最新版回來!
wsl --update
如果有公司無法連接微軟的更新伺服器,那麼加上 --web-download
參數則可以改從 GitHub 下載相關檔案!
wsl --update --web-download
-
支援 Linux 常見的 Systemd 服務管理員
有了 systemd
之後,可以說大部分 Linux 應用程式就可以跑在 WSL 底下了,像是 snap, microk8s, systemctl 就都可以用了! 👍
以下是啟用 systemd
的步驟說明:
-
先在 WSL Linux 中編輯 /etc/wsl.conf
檔案
sudo vi /etc/wsl.conf
放入以下兩行內容:
[boot]
systemd=true
-
退出 WSL 並將 WSL 關機
wsl.exe --shutdown
-
列出所有透過 systemd 管理的服務
wsl systemctl list-unit-files --type=service
詳見 Systemd support is now available in WSL! 說明!
-
更強大的 wsl.exe --install
命令
你可以列出目前 WSL 所有支援的 Distro 有哪些:
wsl.exe --list --online
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
SLES-12 SUSE Linux Enterprise Server v12
SLES-15 SUSE Linux Enterprise Server v15
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9
以下命令是快速安裝 Kali Linux 的命令:
wsl.exe --install kali-linux
新版 WSL 1.0 安裝時,你可以透過 --no-launch
參數要求不要在安裝後啟動 Shell 執行,也可透過 --web-download
改從 GitHub 下載 Distro 相關檔案(預設會從 Microsoft Store 下載)。不過,這兩個參數只有在特殊情境下才會使用,我個人覺得應該不常用。
wsl.exe --install kali-linux --web-download --no-launch
-
掛載虛擬磁碟 (VHD/VHDX)
如果你想在 Windows 底下掛載一個 Linux 才支援的磁碟分割格式,如 ext4
,那麼你就有可能會需要用到這個功能。除此之外,使用情境應該不多才對,但理論上,你要在 WSL 底下管理磁碟或透過 usbipd-win 掛載 USB 隨身碟也都是可行的,只是步驟會再稍微複雜一點。
掛載一個 ext4
檔案系統的虛擬硬碟:
wsl -d Ubuntu-20.04 --mount --vhd $env:USERPROFILE\Ubuntu-18.04.vhdx --name U1804
他會跟你講把磁碟掛在到哪個路徑下 (/mnt/wsl/U1804
),而且會提供你磁碟卸載(--unmount
)的命令!👍
The disk was successfully mounted as '/mnt/wsl/U1804'.
Note: The location will be different if you have modified the automount.root setting in /etc/wsl.conf.
To unmount and detach the disk, run 'wsl.exe --unmount \\?\C:\Users\user\Ubuntu-18.04.vhdx'.
卸載磁碟
wsl.exe --unmount \\?\$env:USERPROFILE\Ubuntu-18.04.vhdx
目前直接掛載 USB 磁碟還有點問題(#6011),未來應該會直接支援。
你可以參考 Mount a Linux disk in WSL 2 與 Connect USB devices 獲得詳細的操作步驟。
如果你想利用 WSL 來管理磁碟,可以參考 WSL2 How-to: Prepare and Attach Virtual Drives (VHD) 這篇文章,不過我照著文章是做不出來的,但基本精神差不多,有興趣的人可以研究看看。
-
可直接將整個 WSL Distro 匯出/匯入 *.vhdx
檔案
先前的 WSL 匯出功能,只能將整個 WSL 匯出成 *.tar
檔,現在可以直接匯出成 *.vhdx
虛擬硬碟,相當方便! 👍
匯出現有的 Distro
wsl --export Ubuntu-18.04 --vhd 'G:\Ubuntu-18.04.vhdx'
刪除現有的 Distro (此命令會直接刪除 *.vhdx
檔,而且無法復原喔!)
wsl --unregister Ubuntu-18.04
將匯出的 *.vhdx
匯入到指定目錄
wsl --import 'Ubuntu-18.04' 'G:\Ubuntu-18.04' 'G:\Ubuntu-18.04.vhdx' --vhd
上述命令會建立一個新的 G:\Ubuntu-18.04\ext4.vhdx
虛擬硬碟!
原地將現成的 *.vhdx
變成 Distro 的虛擬硬碟
wsl --import-in-place 'Ubuntu-18.04' 'G:\Ubuntu-18.04.vhdx'
相關連結