適用於 Linux 的 Windows 子系統常見問題集

一般

什麼是適用於 Linux 的 Windows 子系統 (WSL)?

Windows 子系統 Linux 版 (WSL) 是 Windows 作業系統的功能,可讓您執行 Linux 檔案系統,以及直接在 Windows 上執行 Linux 命令列工具和 GUI 應用程式,以及傳統的 Windows 桌面和應用程式。

如需詳細資訊,請參閱關於頁面

WSL 適用於誰?

這主要是適用于開發人員的工具,特別是 Web 開發人員、處理開放原始碼專案或部署至 Linux 伺服器環境的工具。 WSL 適用于喜歡使用 Bash、一般 Linux 工具 (、 awk 等、) 和 Linux 優先架構的 sed 任何人, (Ruby、Python 等等 ) ,但也喜歡使用 Windows 生產力工具

我可以使用 WSL 來做什麼?

WSL 可讓您在 Bash 殼層中,選擇散發套件 (Ubuntu、Debian、OpenSUSE、Alpine、Alpine 等) 。 使用 Bash,您可以執行命令列 Linux 工具和應用程式。 例如,輸入 lsb_release -a 並按下 Enter 鍵,您會看到目前正在執行 Linux 散發版本的詳細資料:

散發版本詳細資料的螢幕擷取畫面

您也可以從 Linux Bash 殼層記憶體取本機電腦的檔案系統 – 您會在資料夾下找到掛接的 /mnt 本機磁片磁碟機。 例如,您的 C: 磁碟機掛接在 /mnt/c 底下:

掛接 C 磁碟機的螢幕擷取畫面

您是否可以描述併入 WSL 的一般開發工作流程?

WSL 是以開發人員對象為目標,旨在將開發人員做為內部開發迴圈的一部分。 假設 Sam 正在建立 CI/CD 管線 (持續整合 & 持續傳遞) ,並想要先在本機電腦上測試它, (膝上型電腦) ,再將其部署至雲端。 Sam 可以啟用 WSL (& WSL 2 來改善速度與效能) ,然後在膝上型電腦上 (使用正版 Linux Ubuntu 實例,) 其偏好的任何 Bash 命令和工具。 在本機驗證開發管線之後,Sam 就可以將該 CI/CD 管線推送至雲端 (例如 Azure),方法是使其成為 Docker 容器,然後將該容器推送至雲端執行個體,該執行個體會在生產環境就緒的 Ubuntu VM 上執行。

Bash 是什麼?

Bash 是常用的文字型命令介面和命令語言。 這是包含在 Ubuntu 和其他 Linux 發行版本中的預設殼層。 使用者在命令介面中輸入命令來執行指令碼及/或執行命令和工具,以完成許多工作。

運作方式為何?

請參閱 Windows 命令列部落格上的這篇文章: 深入探討 WSL 如何讓 Windows 存取 Linux 檔案 ,以深入瞭解基礎技術的詳細資料。

為什麼我會在 VM 中使用 WSL 而不是 Linux?

WSL 所需的資源 (CPU、記憶體和儲存體) 比完整虛擬機器少。 WSL 也可讓您同時執行 Linux 命令列工具和應用程式,以及 Windows 命令列、桌面和 Microsoft Store 應用程式,以及從 Linux 存取您的 Windows 檔案。 這可讓您視需要在相同的檔案集合上使用 Windows 應用程式和 Linux 命令列工具。

為什麼我會使用 Linux 上的 Ruby,而不是 Windows 上的?

某些跨平台工具的建立方式,是假設它們執行的環境與 Linux 類似。 例如,某些工具會假設它們能夠存取非常長的檔案路徑,或特定檔案/資料夾存在。 這通常會導致 Windows 上的問題,其行為通常與在 Linux 上不同。

許多語言,例如 Ruby 和 Node.js,通常會移植到 Windows 上並執行得不錯。 不過,並非所有 Ruby Gem 或節點/NPM 程式庫擁有者都會移植其程式庫以支援 Windows,而且許多都有 Linux 特定的相依性。 這通常會導致使用這類工具和程式庫所建立的系統,在 Windows 上建置時遇到問題,有時發生執行階段錯誤或不需要的行為。

這些只是部分導致許多人要求 Microsoft 改進 Windows 命令列工具的問題,讓我們與 Canonical 合作,使原生 Bash 和 Linux 命令列工具可以在 Windows 上執行。

這對 PowerShell 有何意義?

使用 OSS 專案時,在許多情況下,從 PowerShell 提示字元進入 Bash 非常有用。 Bash 支援是互補的,可強化 Windows 上的命令列價值,讓 PowerShell 和 PowerShell 社群得以運用其他熱門技術。

在 PowerShell 小組部落格深入了解:適用於 Windows 的 Bash:為什麼它非常棒,而對 PowerShell 的意義是什麼

WSL 支援哪些處理器?

WSL 支援 x64 和 Arm CPU。

如何存取我的 C: 磁碟機?

本機電腦上的硬碟掛接點會自動建立,並可讓您輕鬆存取 Windows 檔案系統。

/mnt/ < 磁碟機號 > /

範例用法是使用 cd /mnt/c 來存取 c:\

如何設定 Git 認證管理員? (如何在 WSL 中使用我的 Windows Git 權限?)

請參閱開始使用Git on Windows 子系統 Linux 版教學課程,其功能一節說明如何設定 Git 認證管理員,並將驗證權杖儲存在 Windows 認證管理員中。

如何搭配 Linux 應用程式使用 Windows 檔案?

WSL 的其中一項優點是能夠透過 Windows 和 Linux 應用程式或工具存取您的檔案。

WSL 會將您電腦的固定磁碟機掛接在 Linux 散發版本的 /mnt/<drive> 資料夾底下。 例如,您的 C: 磁碟機掛接在 /mnt/c/ 底下

使用您掛接的磁碟機,您可以在其中編輯程式碼,例如 C:\dev\myproj\,使用 Visual Studio / 或 VS Code,然後透過 /mnt/c/dev/myproj 存取相同的檔案,在 Linux 中建立/測試該程式碼。

若要深入瞭解 ,請參閱跨 Windows 和 Linux 檔案系統工作 一文。

Linux 磁碟機中與掛接的 Windows 磁碟機中的檔案有何不同?

  1. Linux 根目錄 (下的檔案,也就是 /) 是由 WSL 控制,其符合 Linux 行為,包括但不限於:

    • 包含無效 Windows 檔案名稱字元的檔案
    • 為非系統管理員使用者建立的符號連結
    • 透過 chmod 和 chown 變更檔案屬性
    • 檔案/資料夾區分大小寫
  2. 掛接磁碟機中的檔案是由 Windows 所控制,並具有下列行為:

    • 支援區分大小寫
    • 所有權限都設定為最佳反映 Windows 權限

如何解除安裝 WSL 散發套件?

若要從 WSL 移除散發套件,並 刪除與該 Linux 散發套件相關聯的所有資料,請執行 wsl --unregister <distroName> where <distroName> 是 Linux 散發版本的名稱,可從命令中的 wsl -l 清單中看到。

此外,您可以接著卸載電腦上的 Linux 散發版本應用程式,就像任何其他市集應用程式一樣。

若要深入瞭解 wsl 命令,請參閱 WSL 的基本命令一文。

如何執行 OpenSSH 伺服器?

OpenSSH 隨附于 Windows 作為選擇性功能。 請參閱 安裝 OpenSSH 檔。Windows 中的系統管理員許可權必須在 WSL 中執行 OpenSSH。 若要執行 OpenSSH 伺服器,請以系統管理員身分執行 WSL 散發套件 (Ubuntu) 或 Windows 終端機。 有數個資源涵蓋 WSL 的 SSH 案例。 查看 Scott Hanselman 的部落格文章:如何從 Linux 或 Windows 或任何地方透過 SSH 連線到Windows 10電腦如何從外部電腦連線到 WSL2、從外部電腦透過簡單方式如何在外部電腦上透過 Bash 和 WSL Windows 10 2 連線到 Windows 10,以及如何使用 Windows 10的內建 OpenSSH,可自動透過 SSH 連線到遠端 Linux 電腦

如何變更 WSL 的顯示語言?

WSL 安裝會嘗試自動變更 Ubuntu 地區設定,以符合 Windows 安裝的地區設定。 如果您不想要此行為,您可以執行此命令,以在安裝完成後變更 Ubuntu 地區設定。 您必須重新開機 WSL 散發套件,此變更才會生效。

下列範例會將地區設定變更為 en-US:

sudo update-locale LANG=en_US.UTF8

為什麼我無法從 WSL 存取網際網路?

某些使用者回報了特定防火牆應用程式在 WSL 中封鎖網際網路存取的問題。 回報的防火牆如下:

  1. Kaspersky
  2. AVG
  3. Avast
  4. Symantec Endpoint Protection
  5. F-Secure

在某些情況下,關閉防火牆可讓您存取。 在某些情況下,只是安裝防火牆似乎會封鎖存取。

如何從 Windows 中的 WSL 存取連接埠?

WSL 會共用 Windows 的 IP 位址,因為它是在 Windows 上執行。 如此一來,您就可以存取 localhost 上的任何連接埠,例如,如果您在連接埠 1234 上有 web 內容,您可以透過 https://localhost:1234 進入 Windows 瀏覽器。 如需詳細資訊,請參閱 存取網路應用程式

如何備份我的 WSL 散發套件,或將它們從一個磁片磁碟機移至另一個磁片磁碟機?

備份或移動散發套件的最佳方式是透過 Windows 1809 版和更新版本中提供的 匯出/匯入命令 。 您可以使用 wsl --export 命令,將整個散發套件匯出至 tarball。 接著,您可以使用 命令將此散發匯入回 WSL wsl --import ,以命名匯入的新磁片磁碟機位置,讓您備份和儲存 (狀態,或移動 WSL 散發套件) 狀態。

請注意,在 AppData 資料夾中備份檔案的傳統備份服務 (,例如 Windows 備份) 不會損毀您的 Linux 檔案。

我可以在生產案例中使用 WSL 嗎?

WSL 已設計並建置成與內部迴圈開發工作流程搭配使用。 WSL 中有一些設計功能適合此用途,但相較于其他產品,生產相關案例可能會變得很困難。 我們的目標是清楚 WSL 與一般 VM 環境有何不同,因此您可以決定它是否符合您的業務需求。

WSL 與傳統生產環境之間的主要差異包括:

  • WSL 具有輕量型公用程式 VM,可自動啟動、停止和管理資源。
  • 如果您沒有開啟 Windows 進程的檔案控制碼,系統會自動關閉 WSL VM。 這表示如果您使用它做為網頁伺服器,透過 SSH 連線到該伺服器以執行您的伺服器,然後結束,VM 可能會關閉,因為它偵測到使用者已完成使用,而且會清除其資源。
  • WSL 使用者可完整存取其 Linux 實例。 VM 的存留期、已註冊的 WSL 散發套件等都是由使用者存取,而且可由使用者修改。
  • WSL 會自動提供 Windows 檔案的檔案存取權。
  • Windows 路徑預設會附加至您的路徑,相較于傳統的 Linux 環境,某些 Linux 應用程式可能會造成非預期的行為。
  • WSL 可以從 Linux 執行 Windows 可執行檔,這也可能會導致不同于傳統 Linux VM 的環境。
  • WSL 所使用的 Linux 核心會自動更新。
  • WSL 中的 GPU 存取會透過 /dev/dxg 將 GPU 呼叫路由傳送至 Windows GPU 的裝置進行。 此設定與傳統 Linux 設定不同。
  • 相較于裸機 Linux,還有其他較小的差異,未來預期會發生更多差異,因為內部迴圈開發工作流程的優先順序會優先。

如何將 WSL 檔案從一部電腦傳輸到另一部電腦?

有幾種方式可以完成這項工作:

  • 最簡單的方式是使用 wsl --export --vhd 命令將 WSL 散發套件匯出至 VHD 檔案。 然後,您可以將此檔案複製到另一部電腦,然後使用 匯入。 wsl --import --vhd 如需詳細資訊,請參閱 命令檔
  • 上述實作需要大量的磁碟空間。 如果您沒有大量的磁碟空間,您可以使用 Linux 技術將檔案移至下列位置:
    • 用來 tar -czf <tarballName> <directory> 建立檔案的 tarball。 然後,您可以將這些特定檔案複製到新的電腦,然後執行 tar -xzf <tarballName> 以擷取這些檔案。
    • 您也可以透過 apt 下列命令匯出已安裝的套件清單: dpkg --get-selections | grep -v deinstall | awk '{print $1}' > package_list.txt ,然後在另一部電腦上安裝相同的套件,如同在傳輸檔案之後一樣 sudo apt install -y $(cat package_list.txt)

WSL 2

WSL 2 是否使用 Hyper-V? 是否可以在Windows 10 家用版和Windows 11 家用版上使用?

WSL 2 適用于所有桌面 SKU,其中 WSL 可供使用,包括Windows 10 家用版和Windows 11 家用版。

最新版本的 WSL 會使用 Hyper-V 架構來啟用其虛擬化。 此架構將在「虛擬機器平台」選用元件中提供。 此選用元件將會在所有 SKU 上提供。 當我們更接近 WSL 2 版本時,您可以預期很快就會看到更多關於此體驗的詳細資料。

WSL 1 會發生什麼事? 它會被放棄嗎?

我們目前沒有淘汰 WSL 1 的計劃。 您可以並存執行 WSL 1 和 WSL 2 散發版本,並且可以隨時將任何散發版本升級和降級。 將 WSL 2 新增為新的架構,可提供更好的平台,讓 WSL 小組能夠提供功能,使 WSL 成為在 Windows 中執行 Linux 環境的絕佳方式。

我是否能夠執行 WSL 2 和其他第三方虛擬化工具,例如 VMware 或 VirtualBox?

當 Hyper-V 在使用中時,有些第三方應用程式無法運作,這表示它們在 WSL 2 啟用時將無法執行,例如 VMware 和 VirtualBox。 不過,最近 VirtualBox 和 VMware 都已發行支援 Hyper-V 和 WSL2 的版本。 在這裡深入了解 VirtualBox 的變更VMware 的變更。 如需疑難排解問題,請參閱 GitHub上 WSL 存放庫中的 VirtualBox 問題討論

我們一直在打造可支援 Hyper-V 第三方整合的解決方案。 例如,我們公開一組稱為 Hypervisor 平台的 API,第三方虛擬化提供者可用來使其軟體與 Hyper-V 相容。 這可讓應用程式使用 Hyper-V 架構進行模擬,例如 Google Android 模擬器以及 VirtualBox 6 和更新版本,兩者現在都與 Hyper-V 相容。

如需 有關 VirtualBox 6.1 之 WSL 2 問題的詳細資訊和討論,請參閱 WSL 問題存放庫。

*如果您要尋找 Windows 虛擬機器、VMWare、Hyper-V、VirtualBox 和 Parallels VM 下載,請參閱 Windows 開發人員中心

我可以在 WSL 2 中存取 GPU 嗎? 是否有計劃增加硬體支援?

我們已發行在 WSL 2 散發套件記憶體取 GPU 的支援! 這表示當牽涉到大型資料集時,您現在可以更輕鬆地在機器學習、人工智慧和資料科學案例中使用 WSL。 查看開始使用 GPU 支援教學課程。 從現在開始,WSL 2 不包含序列支援或 USB 裝置支援。 我們正在調查新增這些功能的最佳方式。 不過,USB 支援現在可透過 USBIPD-WIN 專案取得。 如需設定 USB 裝置支援的步驟,請參閱 連線 USB 裝置

WSL 2 是否可以使用網路應用程式?

是,在一般網路應用程式中,WSL 2 會更妥善且更快速,因為它提供完整的系統呼叫相容性。 不過,WSL 2 架構使用虛擬化網路元件,這表示 WSL 2 的行為與虛擬機器類似-- WSL 2 散發套件的 IP 位址會與主機電腦不同, (Windows OS) 。 如需詳細資訊,請參閱 使用 WSL 存取網路應用程式

我可以在虛擬機器中執行 WSL 2 嗎?

是的! 您必須確定虛擬機器已啟用巢狀虛擬化。 在具有系統管理員權限的 PowerShell 視窗中執行下列命令,即可在您的父系 Hyper-V 主機中啟用此功能:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

請務必以您的虛擬機器名稱取代 '<VMName>'。

我可以在 WSL 2 中使用 wsl.conf 嗎?

WSL 2 支援 WSL 1 所使用的相同 wsl.conf 檔案。 這表示您在 WSL 1 散發版本中設定的任何設定選項 (例如自動掛接 Windows 磁碟機、啟用或停用 interop、變更 Windows 磁碟機掛接的目錄等),在 WSL 2 內都能運作。 您可以在 [ 散發管理 ] 頁面中深入瞭解 WSL 中的組態選項。 在 WSL 2 中掛接 Linux 磁片 一文中,深入瞭解掛接磁片磁碟機、磁片、裝置或虛擬硬碟 (VHD) 的支援。

我可以在哪裡提供意見反應?

WSL 產品存放庫問題可讓您:

  • 搜尋現有的問題 ,以查看是否有任何與您擁有的問題相關聯。 請注意,在搜尋列中,您可以移除 「is:open」,以包含已在搜尋中解決的問題。 請考慮批註或提供經驗,以取得您想要表達您有興趣繼續作為優先順序的任何已開啟問題。
  • 提出新問題。 如果您發現 WSL 有問題,而且似乎沒有現有問題,您可以選取綠色的 [ 新增問題 ] 按鈕,然後選擇 [WSL - 錯誤報表]。 您必須包含問題的標題、Windows 組建編號 (執行 cmd.exe /c ver 以查看您目前的組建 #) 、無論您是執行 WSL 1 或 2、目前的 Linux 核心版本 # (執行 wsl.exe --statuscat /proc/version) 、發行版本的版本 # (執行 lsb_release -r) 、涉及的任何其他軟體版本、重現步驟、預期的行為 如果可用且適當,則為實際行為和診斷記錄。 如需詳細資訊,請參閱 參與 WSL
  • 選取綠色的 [新增問題] 按鈕,然後選取 [功能要求] 來提出功能要求。 您必須解決一些描述您要求的問題。

您也可以:

如果想要隨時掌握最新的 WSL 消息,請透過下列方式: