###### tags: `WSL` `Linux` # 建立可攜式的 WSL Windows 上的 WSL 是很棒的功能, 不過如果你從 Windows Store 安裝 WSL 的發行版, 它會安裝在系統磁碟, 如果你想安裝在別的地方, 就可以採用本文介紹的方法。 ## 啟用 WSL 功能 在『**控制台/應用程式/選用功能/更多 Windows 功能**』中勾選 **Windows 子系統 Linux 版**以及**虛擬機器平台**兩項: ![](https://i.imgur.com/KUCyp48.png) 可能會需要重新起動電腦。 ## 下載 WSL 發行版檔案 你可以在微軟的網站上下載你偏好的[發行版檔案](https://docs.microsoft.com/en-us/windows/wsl/install-manual#downloading-distributions), 以下我以 [Ubuntu-20.04](https://aka.ms/wslubuntu2004) 為例。 ## 解開發行版檔案 下載回來的檔案是 .appx 格式, 實際上就是一個 zip 檔, 你可以更改副檔名為 .zip 後使用任何解壓縮工具解開到你期望的資料夾下。這裡以 PowerShell 的 `Expand-Archive` 為解壓縮工具: ``` ❯ ren .\Ubuntu_2004.2020.424.0_x64.appx .\Ubuntu_2004.2020.424.0_x64.zip ❯ Expand-Archive .\Ubuntu_2004.2020.424.0_x64.zip ubunt ``` ## 註冊發行版 只要進到解開的資料夾, 執行其中的檔案, 就可以向 WSL 註冊這個發行版: ``` D:\wsl2 ❯ cd .\ubuntu\ D:\wsl2\ubuntu ❯ .\ubuntu2004.exe Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: meebox New password: Retype new password: passwd: password updated successfully Installation successful! ``` Ubuntu 會詢問你要使用的使用者名稱以及密碼, 完成後就會進入 Shell: ``` meebox@mee:~$ ``` 只要按 <kbd>Ctrl</kbd>+<kbd>D</kbd> 就可以離開。 ## WSL 管理指令 WSL 提供有 [`wsl`](https://docs.microsoft.com/zh-tw/windows/wsl/reference) 指令管理發行版, 以下列出重要的功能。 ### 列出已註冊的發行版 ``` ❯ wsl --list Windows 子系統 Linux 版發佈: Debian (預設值) Ubuntu-20.04 Alpine ``` 可以看到我的系統上已經註冊有 3 種發行版。 :::info 如果你有安裝 Windows Terminal, 已註冊的發行版也會出現在可用清單中: ![](https://i.imgur.com/StOuha2.png) ::: :::info [Alpine](https://wiki.alpinelinux.org/wiki/Main_Page) 是一個輕量級的 Linux 發行版, 不過如果要下載發行版檔案, 必須到[這裡](https://github.com/yuk7/AlpineWSL)下載。由於它很輕量, 很適合拿來安裝 Docker。 ::: ### 執行特定的發行版 ``` ❯ wsl -d Alpine root at mee in /mnt/d/wsl2/ubuntu $ ``` 指定發行版名稱時請參考 `--list` 列出的名稱。 ### 匯出發行版 如果你想要使用同一種發行版但建立多個不同的執行環境, 或是想把目前設定好的發行版帶到其他電腦使用, 可以將發行版匯出成為 tar 格式檔案: ``` ❯ wsl --export Alpine Alpine.tar ``` ### 從 tar 檔案匯入複製發行版 你也可以匯入之前匯出的 tar 檔: ``` ❯ wsl --import Alpine2 ./Alpine2 Alpine.tar ``` 第一個參數是你想幫匯入的發行版取的名字, 第二個參數是要將發行版匯入到哪個路徑。完成後如果列出已註冊的發行版, 就會看到匯入時指定的 Alpine2 了: ``` ❯ wsl --list Windows 子系統 Linux 版發佈: Debian (預設值) Ubuntu-20.04 Alpine2 Alpine ``` 如果你執行 Alpine2 發行版, 就會進入跟 Alpine 一模一樣但獨立的環境。 ## 刪除已經註冊的發行版 如果不再需要使用特定的發行版, 可以先取消註冊, 再移除整個資料夾即可。以下以刪除剛剛複匯入的 Alpine2 為例: ``` ❯ wsl --unregister Alpine2 取消註冊中... ``` 這時再列出已註冊的發行版, 就會發現 Alpine2 已經不見了: ``` ❯ wsl --list Windows 子系統 Linux 版發佈: Debian (預設值) Ubuntu-20.04 Alpine ``` 取消註冊後, 就可以刪除它所佔用的資料夾了: ``` ❯ rm -r -Force .\Alpine2\ ``` 這樣就可以完整刪除該發行版。 ## 移難排除 Symantec Endpoint Protection 會檔 WSL 的網路, 請記得開啟『**Network and Host Exploit Mitigation Settings/Unmatched IP Traffic sections/Allow IP traffic**』選項: ![](https://hackmd.io/_uploads/BydD9cbya.png)