Windows Subsystem for Linux(簡稱WSL)是一個很棒的解決方案,讓開發人員可以在Windows 10版本的桌面上直接使用Linux。
如果你花了太多時間將硬碟分割成多個Linux系統並與Windows一起安裝,那麼這篇文章對你來說很幸運。
微軟的仙女代碼母決定給你另一個選擇:Windows Subsystem for Linux(WSL)。WSL使得在Windows旁邊運行Linux系統變得更加容易和靈活。
在本教程中,你將學習如何開始使用WSL。你將學習如何使用一些巧妙的工具,使得WSL比單獨使用bash或PowerShell更加多功能。
通過自助密碼重置解決方案,減少服務台呼叫和更新遠程用戶的緩存憑據,即使在VPN之外。 獲取Specops uReset的演示!
WSL是什麼?
WSL或者C:\Windows\System32\wsl.exe是一個Windows工具,允許你將Linux發行版作為應用程序從Windows商店安裝。
由於WSL是一個簡單的Windows可執行文件,你可以從命令提示符或PowerShell終端中調用它。我們稍後會更深入地探討這個主題。目前,重要的是要更多地了解WSL在底層正在做些什麼。

如何啟用WSL
設置並啟用WSL需要在Windows 10旁邊安裝Linux發行版,以使這兩個不同的操作系統能夠相互交互。
先決條件
如果您是一位IT專業人士,在Active Directory中面臨太多密碼重置請求的困擾,請查看Specops uReset,這是一個安全的SSPR解決方案。
要在Windows上安裝WSL,您需要滿足一個要求:您必須擁有一台安裝了Windows 10 64位版本Build 18917或更高版本的計算機。
您可以通過運行winver工具來查找您的Windows 10版本號。

啟用WSL Windows功能
啟用WSL非常簡單,無需下載。它只是一個Windows功能。
要啟用WSL,以系統管理員身份打開PowerShell,然後運行以下命令:
完成後,重新啟動計算機,您就完成了!
下載WSL的Linux發行版
WSL本身不會安裝任何Linux發行版,您需要自行安裝一個。在Windows 10重新啟動後,開始設置您選擇的Linux發行版。
首先,打開 Microsoft Store,然後 搜索 ‘WSL’。很快你應該會看到一個列出 Linux 發行版的列表顯示出來。

接下來,選擇你喜歡的發行版並安裝它。本教程將使用 Ubuntu 18.04。在撰寫本文時,還有其他幾個可用的發行版,例如:
- Ubuntu 16.04 LTS
- Ubuntu 18.04 LTS
- OpenSUSE Leap 15
- OpenSUSE Leap 42
- SUSE Linux Enterprise Server 12
- SUSE Linux Enterprise Server 15
- Kali Linux
- Debian GNU/Linux
- Fedora Remix for WSL
- Pengwin
- Alpine WSL
設置 WSL 版本
你可能需要啟用 Linux 以便與 WSL 版本 2 一起工作。如果需要的話,你可以按照以下步驟進行操作。
在 PowerShell 控制台中:
- 運行
wsl -l
或wsl --list
命令列出你安裝的 Linux 版本。 - 一旦你得到列表,複製你想要在 WSL2 中運行的發行版名稱,然後運行
wsl --set-version <Distro> 2
命令,將 <Distro> 替換為你之前複製的名稱。 - 運行
wsl -l -v
或wsl --list --verbose
命令確認命令是否成功。該命令將返回完整的 WSL 發行版列表以及每個發行版使用的版本。

您還可以通過運行
wsl --set-default-version 2
將未來安裝的任何發行版的默認WSL版本設置為WSL2
啟動WSL
要開始使用WSL,打開PowerShell終端並輸入wsl
。如果已正確設置WSL,您將進入選擇的WSL發行版上運行的bash終端。從這裡,您可以運行任何Linux命令。
下面是啟動wsl.exe時提供的所有選項的參考。
Command | Explanation | Example |
---|---|---|
exec, -e | Will run command using without using default shell | wsl -e curl google.com |
— | Passes anything after this parameter to default shell. Leaving the operator out will also work. | wsl — curl google.com, wsl curl google.com |
distribution, -d |
Opens a terminal in the specified distribution’s shell | wsl -d Ubuntu-18.04 |
user, -u |
Runs WSL command as the specified user as long as user exists on that distro | wsl -d Ubuntu-18.04 -u tux_user |
export |
Exports the specified distribution to a tar file on your local system. | wsl –export Ubuntu ./Test-Ubuntu.tar |
import |
Imports a tar file as a new WSL distribution. Can specify WSL version with the –version option | wsl –import Test-Ubuntu C:\data\Test-Ubuntu .\Test-Ubuntu.tar |
list, -l [Options] | wsl –list | |
all | List all installed WSL distributions | wsl -l –all |
running | List only WSL distributions that are currently running | wsl -l –running |
quiet, -q | Only show WSL distribution names | wsl -l -q |
verbose, -v | Show detailed information about all WSL distributions | wsl -l -v |
set-default, -s |
Sets the specified WSL distribution as the default distribution for WSL commands. | wsl -s Test-Ubuntu |
set-default-version |
Changes the default WSL version for all new distributions installed to that system | wsl –set-default-version 2 |
set-version |
Changes the WSL version of the specified distribution | wsl –set-version Test-Ubuntu 2 |
shutdown | Immediately terminates all running WSL distributions | wsl –shutdown |
terminate, -t |
Terminates the specified WSL distribution | wsl -t Test-Ubuntu |
unregister |
Unregisters the specified WSL distribution | wsl –unregister Test-Ubuntu |
help | Display information about using WSL | wsl –help |
一旦您熟悉這些開關,您會發現通過WSL運行和管理應用程序比自己管理Linux虛擬機更容易。
快速提示:運行
wsl --help
以發現WSL的所有標誌和參數。
完成後,輸入exit
返回PowerShell終端。
通過WSL共享Windows/Linux資源
WSL的最大優點之一是它可以無縫共享Windows和Linux資源。目前,您可以共享文件系統、環境變量、網絡資源和命令行工具(如cmd和PowerShell)。
本節中的所有示例都是使用WSL Ubuntu Linux發行版。如果您選擇下載不同的發行版,可能會有所不同。
共享文件系統
文件系統是與WSL共享最有用的東西之一。WSL允許您將兩個文件系統視為一個來處理。
Windows 10的文件系统在Linux中被挂载为一个目录,而你的Linux文件系统将被挂载为Windows中的一个文件夹。
从Windows中使用环境变量找到Linux文件系统
当你安装一个带有WSL的Linux发行版时,有时会添加一个Windows环境变量。在WSL Ubuntu Linux发行版中,它会创建一个名为UBUNTU_HOME的环境变量。这个环境变量指向Linux中的/home/ubuntu目录,可以从Windows和WSL Ubuntu中访问。
可以使用UBUNTU_HOME中定义的路径来运行跨它们使用资源的脚本,或者设置Windows终端的默认位置(稍后介绍)。

其他发行版可能会定义类似的环境变量。在安装新的Linux发行版后,使用PowerShell命令Get-ChildItem -Path $Env:\
来检查Windows环境变量,看是否添加了任何环境变量。
如果你想把所有东西放在/home/ubuntu目录中,这个环境变量快捷方式很方便。但是让我们深入了解它是如何出现的,以及如何以其他方式访问它。
通过Microsoft Store包文件夹从Windows中找到Linux文件系统
并不是每个WSL发行版都有一个简单的方法来引用它。重要的是,你要学会如何以另一种方式找到Linux文件系统。
由於大多數的WSL Linux發行版是從Microsoft商店安裝的,您可以在與其他Windows商店應用程式相同的位置尋找Linux檔案系統。導航到%USERPROFILE%\AppData\Local\Packages\以找到Windows商店應用程式的目錄。然後控制該資料夾,因為這通常是預設受保護的。
您將在Packages資料夾中看到許多子資料夾,其中可能包含您的Linux發行版檔案系統。例如,對於我來說,WSL Ubuntu發行版位於CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc資料夾中。
如果您進入Package資料夾,您將找到Linux檔案系統。對於WSL Ubuntu來說,它位於LocalState\rootfs資料夾中。這是您的Linux發行版的根目錄。

從Linux尋找Windows檔案系統
要從Linux尋找Windows 10檔案系統,請在Windows中打開WSL。 WSL將會啟動一個bash終端機。這個bash終端機預設會在您的UBUNTU_HOME目錄中啟動。
您還可以找到Windows儲存區的根目錄。您的每個Windows卷標(C、D、E等)都被視為從WSL Linux檔案系統掛載的磁碟機。只要您具有根權限,您將在/mnt/c、/mnt/d等處找到每個已掛載的卷標。

Get-ChildItem C:\Windows\System32 | Select-Object -First 5
running on WSLWSL2檔案系統
導航WSL文件系統相當簡單。對於不熟悉Linux文件系統結構的人來說,能夠使用Windows Explorer進行導航是一件令人欣慰的事情。但如果你想切換到WSL2,將會變得更加複雜。
WSL2在共享文件系統的底層工作方式上進行了更改。首先,文件系統現在是一個虛擬硬碟,而不是一個目錄。
你可以在WSL Ubuntu發行版中的%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState找到vhdx文件。
你會發現VHDX文件可以在Windows中使用磁碟管理器工具掛載。但是,在WSL發行版註冊時無法掛載虛擬磁碟。
共享環境變量
環境變量是任何操作系統的重要組成部分,可以輕鬆引用應用程序中的二進制文件和可執行文件。
在Windows 10版本17063之前,Windows 10和WSL Linux之間僅共享PATH變量。從那時起,可以使用WSLENV環境變量來共享環境變量。
使用WSLENV環境變量共享其他環境變量可能會有點特殊。為了在不同平台之間共享環境變量,你實際上需要在另一個環境變量中設置環境變量。
概述
分享環境變數的過程如下。在Windows/Linux之間共享的唯一主要差異是使用的開關參數(完整參考如下):
- 在Windows中定義環境變數或在Linux中定義環境變數。
- 將WSLENV環境變數設置為先前定義的環境變數,後跟開關參數(用於路徑轉換)。
- 在Windows或Linux中讀取環境變數。
共享選項
您可以通過使用開關(下表所示)在四種不同的方式上使變量可用,具體取決於您希望環境變數出現在哪個平台上。
- 僅從Windows文件系統可用
- 僅從WSL文件系統可用
- WSL文件系統在WSL Linux和Windows上都可用
- Windows文件系統在WSL Linux和Windows上都可用
Flag | Explanation |
---|---|
/p | Single path. A variable set with this will be translated between the Windows and WSL Linux and made available to both. |
/l | List of paths. Similar to /p , except it can accept more than one path. On Windows, this list will be delimited by semicolons while on WSL Linux it will be delimited by colons. |
/u | Unix path. A path set with this flag can only be accessed when invoking WSL Linux from Windows. Can be used with either the /p or /l flags |
/w | Windows path. A path set with this flag can only be accessed when invoking Windows from WSL Linux. Can be used with either the /p or /l flags |
路徑轉換
共享環境變數的主要原因是進行路徑轉換。正如您可能已經知道的那樣,Windows有用戶配置文件文件夾,而Linux有用戶配置文件目錄,例如。每個用戶都有一個預定義的“主文件夾”,如在Windows上的C:\Users\<username>和在Linux上的/home/<username>。
使用/p
和/l
開關,WSL將在平台之間轉換這些文件夾路徑。
使用Linux共享和翻譯Windows路徑
您可以使用/p
和/l
開關一次共享單個路徑或多個路徑。
在Windows命令提示符下,並且在定義了一個名為DESKTOP的Windows環境變量的情況下,將DESKTOP/p
的值分配給WSLENV變量。這允許您從WSL Linux訪問它。您可以在下面看到一個示例。

使用/l
開關可以一次對多個路徑執行完全相同的過程。
共享和翻譯Linux路徑與Windows
與Windows共享和翻譯Linux路徑的過程相同,只是使用特定於Linux的命令來設置環境變量。
要深入了解共享環境變量,請參閱這篇Microsoft文章。
共享網絡資源
網絡組件是在Windows和WSL Linux之間進行共享的另一個方便資源。
實體與虛擬化網絡接口
在WSL2中,網絡接口被虛擬化。虛擬化網絡接口意味著WSL2網絡實例可以擁有不同的IP配置,而與其Windows 10對應部分不同。
在撰寫本文時,WSL2 Linux的IP地址使用網路位址轉換(NAT)來訪問Windows上的網路資源,不過微軟已提到移除NAT是他們待修復問題的首要事項之一。

客戶端DNS解析
WSL仍會生成/etc/resolv.conf和/etc/hosts檔案以便進行DNS解析。只要您不在/etc/wsl.conf中明確覆蓋這種行為,客戶端DNS解析將繼續按預期工作。
您將在本文的後面更多了解有關wsl.conf檔案的內容。
使用PowerShell和Bash一起
WSL最酷的功能之一是能夠無縫地在PowerShell和WSL上的Bash之間傳遞資訊。
PowerShell –> Bash
由於WSL可接受來自管線的輸入,您可以在PowerShell內部調用wsl.exe命令並接受stdin。這使您可以使用WSL將整個物件從PowerShell傳遞到WSL,然後在bash終端中處理。您可以在下面看到一個例子。

grep
Bash –> PowerShell/Cmd
您也可以輕鬆地將資訊從WSL的bash傳遞到PowerShell和cmd。下面的例子展示了執行Linux的ls命令並通過管線將輸出傳遞給PowerShell的Select-Object
cmdlet。

只要兩個命令都在系統路徑中,您還可以從WSL調用一些Windows的cmd實用工具並將輸出返回給Linux。
請記住,WSL 知道系統路徑在兩個系統中的位置,因為它預設可以訪問 Windows 的 PATH 變數。
如下所示,您可以在 WSL 中運行 Windows 命令 ipconfig,並將該輸出傳遞給 Linux 的 grep 命令。您還可以看到相反的操作,即調用 Linux 命令 which,並將輸出傳遞給 Windows 的 ipconfig 命令。

翻譯問題
在 bash 和 PowerShell 之間傳遞命令輸出時存在一些注意事項。
一個大問題是 PowerShell 和 bash 返回信息的方式不同。PowerShell 是一種面向對象的編程語言,而 bash 是一種字符串處理工具。任何傳遞到 bash 的 PowerShell 對象將被轉換為字符串。相反地,傳遞到 PowerShell 的 bash 輸出將被轉換為字符串對象。
您可以通過在 PowerShell 中將對象類型轉換或顯式轉換來解決這種行為,就像下面的示例中那樣。但是,如果您期望在 PowerShell 和 WSL 之間傳遞對象而不需要額外的工作,那您會感到失望。

通過將 bash 日期轉換為 PowerShell 中的 [datetime]
類,現在我們有一個有效的 PowerShell 對象,可以在腳本中使用。如果您正在編寫需要在 Windows 和 WSL 之間進行轉換的腳本,可以通過對代碼進行一些調整來實現。
安裝帶有 Xfce4 的 Windows 子系統 Linux GUI
當命令行工具不足以應付時,就該使用圖形用戶界面(GUI)。如果您需要在WSL上運行圖形工具,探索自定義發行版,或者您對bash不熟悉,您可以安裝Linux圖形用戶界面。
Xfce
Linux有許多可用的桌面環境。在WSL上設置最常見的一個叫做Xfce。在撰寫本文時,Xfce的版本為4。其他桌面環境也可用,但在本文中,您將學習如何設置Xfce4。
xRDP
當您設置了Linux桌面環境後,您需要一個能夠理解RDP協議的服務。在本文中,我們將重點介紹xRDP服務器。xRDP是一個用於Linux的開源RDP服務器,允許您使用RDP客戶端連接到Linux,就像連接Windows主機一樣。
設置
要從Windows訪問帶有Xfce4和xRDP的Linux圖形用戶界面,請按照以下說明進行操作。在WSL終端中:
- 下載並安裝Xfce4 – 使用命令
sudo apt-get -y install xfce4 && sudo apt-get -y install xubuntu-desktop
下載並安裝Xfce4。這需要一些時間。請稍候。 - 安裝xRDP服務器 – 通過運行
sudo apt-get -y install xrdp
下載並安裝xRDP。 - 為xfce4配置xRDP –
echo xfce4-session > ~/.xsession
- 重啟xRDP –
sudo service xrdp restart
- 查找WSL发行版的IP地址 –
ifconfig | grep inet
此时,您应该能够从Windows 10打开RDP会话。使用mstsc
打开远程桌面连接窗口,并提供步骤#5中找到的Linux IP地址。
如果一切顺利,您可以打开与运行在Windows操作系统上的Linux发行版的RDP连接,如下所示。

技巧和窍门
现在您已经了解了WSL的基础知识以及如何使用它,接下来呢?幸运的是,有很多工具专门为WSL构建或与其配合使用。
使用wsl.conf在启动时设置WSL配置项
A configuration file exists in the WSL at /etc/wsl.conf. This file contains configuration settings that run every time the WSL distro is started. When the wsl.conf file exists, WSL will ingest any setting in this file every time the Linux distro is started.
wsl.conf文件中有几个不同的部分可供配置。
- Automount – 在启动时从Windows挂载驱动器
- Network – 生成resolv.conf或hosts文件
- Interop – 启用或禁用与Windows的互操作
有关wsl.conf文件的更多详细信息,请查看Microsoft 设置WSL启动设置页面。
使用Visual Studio Code(VS Code)在WSL上进行开发
VS Code似乎与一切都集成,WSL也不例外。在VS Code内,您可以在WSL发行版上设置一个工作区,但完全使用Windows上的VS Code进行操作。您甚至不需要运行终端!
要在Windows上設置VS Code與WSL一起工作,首先需要安裝Windows版的VS Code。同時,確保已安裝了Remote – WSL VS Code擴展。
安裝完擴展後,您可以通過打開WSL終端並運行code <工作區>
來連接到它。 <工作區>
是您想要運行VS Code的目錄。VS Code將檢測到您在WSL發行版中,打開一個窗口並與工作區建立連接。
通過注意到VS Code左下角的WSL連接圖標,確認它是否成功。您應該看到它具有您的WSL發行版的名稱。

您甚至可以使用內置的終端直接與WSL工作區進行交互。無需為git bash命令運行單獨的窗口。
將Windows子系統用於Linux添加到Windows終端
WSL的另一個有用用例是將WSL控制台添加到Windows終端中。
在Windows終端中,您可以為每個WSL發行版添加一個單獨的標籤。您還可以自定義每個標籤的外觀,以免迷失方向。
如果您使用了設置用戶目錄的WSL發行版,例如UBUNTU_HOME,您還可以將其設置為終端的起始目錄。

如果您想要完整的視頻指南,以設置WSL與Windows Terminal一起使用,請查看下面的TechSnips how-to視頻。
結語
停止在Active Directory中苦於密碼重置和帳戶鎖定。 免費試用Specops uReset。
Microsoft發布了WSL,讓Linux開發人員能夠在Windows上進行開發。到目前為止,WSL已經是朝著正確方向邁出的一步。
看起來,WSL將成為Microsoft新的開源友好策略的關鍵組件。如果Microsoft要與蘋果競爭,成為開發人員編寫代碼的設備,將面臨一場艱鉅的戰鬥。但是WSL是一張強大的牌。
WSL為開發人員帶來了許多受歡迎的好處,例如:
- 比本地運行的Linux虛擬機輕很多
- 消除了安裝和管理虛擬機的開銷
- 不再需要多分區硬盤
- 不再需要複雜的grub啟動程序
WSL只需打開並運行,這樣我們就可以愉快地編碼了。
Source:
https://adamtheautomator.com/windows-subsystem-for-linux/