1 概述
WSL 是適用于 Linux 的 Windows 子系統(tǒng),可讓開發(fā)人員按原樣運(yùn)行 GNU/Linux 環(huán)境 - 包括大多數(shù)命令行工具、實(shí)用工具和應(yīng)用程序 - 且不會(huì)產(chǎn)生傳統(tǒng)虛擬機(jī)或雙啟動(dòng)設(shè)置開銷。
WSL 分為兩個(gè)版本,一個(gè)是 WSL1,一個(gè)是 WSL2,WSL2 是 WSL1 的升級(jí)版,主要優(yōu)勢(shì)是:
- 提高文件系統(tǒng)性能。
- 支持完全的系統(tǒng)調(diào)用兼容性。
- 托管 VM。
- 完整的 Linux 內(nèi)核。
- 完全的系統(tǒng)調(diào)用兼容性。
WSL2 建議不要跨操作系統(tǒng)使用文件,若想獲得最快的性能速度,請(qǐng)將文件存儲(chǔ)在 WSL 文件系統(tǒng)中,在存儲(chǔ)時(shí),使用 Linux 文件系統(tǒng)根目錄:\\wsl$\Ubuntu-20.04\home\<user name>\Project。
訪問 WSL2 文件系統(tǒng),可以運(yùn)行命令 WIN+R 或在文件資源管理器地址欄中鍵入 \\wsl$,以查找相應(yīng)的分發(fā)名稱并訪問其根文件系統(tǒng)。
大多數(shù)情況下我們會(huì)使用 WSL2,但在以下情況,請(qǐng)考慮使用 WSL1:
- 你的項(xiàng)目文件必須存儲(chǔ)在 Windows 文件系統(tǒng)中。
- 一個(gè)項(xiàng)目要求對(duì)相同的文件使用 Windows 和 Linux 工具進(jìn)行交叉編譯。
- 你的項(xiàng)目需要訪問串行端口或 USB 設(shè)備,WSL2 不支持訪問串行端口。
- 長(zhǎng)時(shí)間運(yùn)行的 WSL 會(huì)話或訪問非常大量的文件。
2 常用命令
2.1 啟動(dòng)與停止
# 啟動(dòng)默認(rèn) Linux 分發(fā)版
wsl
# 以指定用戶身份運(yùn)行 Linux 分發(fā)版
wsl -u <username>
# 運(yùn)行指定的 Linux 分發(fā)版
wsl -d <Linux分發(fā)版名稱>
# 退出 Linux 分發(fā)版
exit
# 終止指定的分發(fā)
wsl -t <Linux分發(fā)版名稱>
# 終止所有運(yùn)行的分發(fā)及 WSL 輕型工具虛擬機(jī)
wsl --shutdown
2.2 查看
# 列出已安裝且可供使用的 Linux 分發(fā)版
wsl -l
# 列出所有分發(fā),包括當(dāng)前不可用的分發(fā)
wsl -l --all
# 僅列出當(dāng)前正在運(yùn)行的分發(fā)
wsl -l --running
# 僅顯示分發(fā)名稱
wsl -l -q
# 顯示所有分發(fā)的詳細(xì)信息
wsl -l -v
2.3 安裝與卸載
# 列出可安裝 Linux 分發(fā)版
wsl -l -o
# 安裝指定 Linux 分發(fā)版
wsl --install -d <Linux分發(fā)版名稱>
# 卸載 Linux 分發(fā)版,卸載后可以重新安裝
wsl --unregister <Linux分發(fā)版名稱>
2.4 導(dǎo)入與導(dǎo)出
# 導(dǎo)入 Linux 分發(fā)版, 可加 --version 指定要用于新分發(fā)的版本
wsl --import <Linux分發(fā)版名稱> <安裝位置> <文件名>
# 導(dǎo)出 Linux 分發(fā)版,后綴名請(qǐng)以 tar 結(jié)尾
wsl --export <Linux分發(fā)版名稱> <路徑>
2.5 其它
# 設(shè)置默認(rèn) Linux 分發(fā)版
wsl -s <Linux分發(fā)版名稱>
# 在不使用默認(rèn) Linux Shell 的情況下執(zhí)行指定的命令
wsl -e <命令行>
# 更改新分發(fā)的默認(rèn)安裝版本
wsl --set-default-version <版本>
# 更新 WSL2 內(nèi)核到最新版本
wsl --update
# 還原到 WSL2 內(nèi)核的先前版本
wsl --update --rollback
# 更改指定分發(fā)的版本
wsl --set-version <Linux分發(fā)版名稱> <版本>
3 常用操作
3.1 從 Windows 訪問 Linux 網(wǎng)絡(luò)應(yīng)用
可以使用 localhost 從 Windows 上訪問 Linux 分發(fā)版中的應(yīng)用。
3.2 從 Linux訪問 Windows 網(wǎng)絡(luò)應(yīng)用
如果要從 Linux 分發(fā)版訪問 Windows 上運(yùn)行的網(wǎng)絡(luò)應(yīng)用,則需要使用主機(jī)的 IP 地址。 你可以執(zhí)行以下步驟來使其可行。
- 通過在 Linux 分發(fā)版中運(yùn)行以下命令來獲取主機(jī)的 IP 地址:
cat /etc/resolv.conf。 - 復(fù)制
nameserver后面的 IP 地址可用于訪問 Windows 上運(yùn)行的網(wǎng)絡(luò)應(yīng)用。
3.3 通過遠(yuǎn)程 IP 地址進(jìn)行連接
當(dāng)使用遠(yuǎn)程 IP 地址連接到應(yīng)用程序時(shí),它們將被視為來自局域網(wǎng) (LAN) 的連接。 這意味著你需要確保你的應(yīng)用程序可以接受 LAN 連接。例如,你可能需要將應(yīng)用程序綁定到 0.0.0.0 而非 127.0.0.1。
3.4 從局域網(wǎng) (LAN) 訪問 WSL 2 分發(fā)版
當(dāng)使用 WSL 1 分發(fā)版時(shí),如果計(jì)算機(jī)設(shè)置為可供 LAN 訪問,那么在 WSL 中運(yùn)行的應(yīng)用程序也可供在 LAN 中訪問。
這不是 WSL 2 中的默認(rèn)情況,WSL 2 有一個(gè)帶有其自己獨(dú)一無二的 IP 地址的虛擬化以太網(wǎng)適配器。 目前,若要啟用此工作流,你需要執(zhí)行與常規(guī)虛擬機(jī)相同的步驟。下面是一個(gè)示例 PowerShell 命令,用于添加偵聽主機(jī)上的端口 4000 的端口代理并將其連接到端口 4000,并使用 IP 地址 192.168.101.100 連接到 WSL 2 VM。
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100
3.5 運(yùn)行 Linux 命令
使用 wsl <Linux命令> 可以在 CMD 或 PowerShell 運(yùn)行 Linux 命令,示例:
wsl ls -la
以這種方式運(yùn)行的命令使用的是同一個(gè)工作目錄,并且以 WSL 默認(rèn)用戶的身份運(yùn)行,擁有與調(diào)用方進(jìn)程和終端相同的 Windows 管理權(quán)限。
3.6 混合運(yùn)行 Linux 和 Windows 命令
# 組合 Linux 的 ls 命令 和 powershell 的 findstr 命令
wsl ls -la | findstr "git"
# 組合 powershell 的 dir 命令和 Linux 的 grep 命令
dir | wsl grep git
# 組合 Linux 的 ls 命令 和 powershell 的 > 命令
組合 Linux 的 ls 命令 和 powershell 的 findstr 命令
# 使用 Linux 命令 列出 Linux 文件
wsl ls -la /proc/cpuinfo
# 使用 Linux 命令 列出 Windows 文件
wsl ls -la "/mnt/c/Program Files"
3.7 從 Linux 運(yùn)行 Windows 工具
WSL 可以使用 [tool-name].exe 直接從 WSL 命令行運(yùn)行 Windows 工具。 例如,notepad.exe。
以這種方式運(yùn)行的應(yīng)用程序具有相同的工作目錄,擁有與 WSL 進(jìn)程相同的權(quán)限,以活動(dòng) Windows 用戶的身份運(yùn)行,顯示在 Windows 任務(wù)管理器中。
4 總結(jié)
WSL 還有一些高級(jí)用法,比如更改磁盤大小,文件權(quán)限,環(huán)境變量等,具體配置可以參考官方文檔。