# 在 Win 10 下使用 WSL(Windows Subsystem for Linux)
---
###### tags: `Infra` `工作相關` `環境建立` `2024/09/19`
## 前言
如果所有專案都塞在 C 槽下肯定會很炸的, 因此需要 備份 或是 建立版本 的話, 可以將 虛擬機(Ubuntu) 以 類似映像檔案掛載的玩法, 在分別導出或導入的前提下來使用機器
## 建立環境
### 使用 管理員身分 開啟 powershell
```
Win + R -> PowerShell
cmd 下輸入:
start-process PowerShell -verb runas
或是
搜尋 PowerShell 後右鍵以 "管理員身分執行"
```
---
### 使用 管理員身分 開啟 powershell 後, 安裝 WSL
```
wsl --install
```
-- 他會一直安裝直到 Ubuntu 完成安裝
---
### 安裝好後可以用指令來看 Ubuntu 安裝的狀況
```
wsl -l
wsl --list
```
會看到訊息:
> Windows 子系統 Linux 版發佈:
> Ubuntu (預設值)
透過指令安裝的話, 會看到 WSL 發行版下只有Ubuntu (預設值)(2024/09/19), 這時候可以匯出 Ubuntu 到 D 槽
---
### 匯出 Ubuntu 到 D 槽
可以把多個專案以 "備份" 或是建立 版本" 的方式留下來
==格式以及參數==
```
wsl --export <DistroName> <ExportPath><ExportFileName.tar>
```
1. DistroName: 發行的 Ubuntu 版本名稱, 如果用指令安裝可能會是沒有帶版本號碼的
2. ExportPath: 匯出路徑, 例如我選擇 D槽的 Project
3. ExportFileName.tar: 可自行命名檔案名稱, 但副檔名須為.tar
因此:
```
wsl --export Ubuntu D:\Project\wcc-ubuntu-20.04-(專案名稱)-wsl.tar
```
---
### 匯入 Ubuntu 並同時掛載於 WSL 上
==格式以及參數==
```
wsl --import <NewDistroName> <ImportPath> <ExportFilePath>
```
1. NewDistroName: 為這個新的發行版本命名
2. ImportPath 匯入地點, 可以自定義, 例如 ``D:/``
3. ExportFilePath, 匯入檔案的路徑
因此:
```
wsl --import ubuntu-20.04-(專案名稱) D:\Project D:\Project\wcc-ubuntu-20.04-(專案名稱)-wsl.tar
```
成功後會在 `D:\Project\` 下找到 `ext4.vhdx` 的發行版本檔案
---
### 檢查是否新增 Ubuntu 成功
```
wsl -l
```
會看到
```
Windows 子系統 Linux 版發佈:
ubuntu-20.04-(專案名稱) (預設)
Ubuntu
```
有多出來的發行版本, 因此可以取消他的註冊
---
### 取消用不到的 Ubuntu 註冊
可輸入指令:
```
wsl --unregister Ubuntu
```
接著會看到訊息
>取消註冊中。
>操作順利完成。
解除註冊後一樣輸入指令 `wsl -l`, 這時訊息應為:
```
Windows 子系統 Linux 版發佈:
ubuntu-20.04-(專案名稱) (預設)
```
---
### 可以看機器狀態的指令
`wsl -l -v `
```
NAME STATE VERSION
* ubuntu-20.04-(專案名稱) Stopped 2
```
---
### 註冊好後進入機器
```
wsl -d ubuntu-20.04-(專案名稱) -u (使用者名稱)
```
---
記得更新機器的相關依存
```
sudo apt update && sudo apt upgrade
```
更新後可以看到硬體映像檔案會暴增 size

---
### 離開機器指令
`exit`
----
---
### 更改預設的發行版本
```
wsl --setdefault <DistroName>
```
> DistroName: 發行的 Ubuntu 版本名稱
---
---
- 參考文章:
https://hackmd.io/@Kuihao/wsl
https://learn.microsoft.com/zh-tw/training/modules/developing-in-wsl/3-setting-up-windows-subsystem-linux
https://blog.miniasp.com/post/2019/02/01/Useful-tool-WSL-Windows-Subsystem-for-Linux
https://serverfault.com/questions/73084/what-characters-should-i-use-or-not-use-in-usernames-on-linux?newreg=cb5f142d706c4c32bc7e9435d65f9250