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

一般

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

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

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

WSL 適用於誰?

這主要是適用于開發人員的工具,特別是 網頁程式開發人員,也就是使用開放原始碼專案或部署至 Linux 伺服器環境的開發人員。 WSL 適用于喜歡使用 Bash、通用 Linux 工具 (、等等的任何人 sedawk ) 以及 Linux 優先的架構 (Ruby、Python 等 ) 但也享受使用 Windows 生產力工具

我可以使用 WSL 來做什麼?

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

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

您也可以從 Linux Bash shell 記憶體取本機電腦的檔案系統,您可以在資料夾下找到您的本機磁片磁碟機 /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 散發版本以及 macOS 中的預設命令介面。 使用者在命令介面中輸入命令來執行指令碼及/或執行命令和工具,以完成許多工作。

這是如何運作的?

請參閱 Windows 命令列 blog 的這篇文章:深入瞭解 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 權限?)

請參閱教學課程:開始在 Windows 子系統 Linux 版上使用 Git,這項功能是在 Windows 認證管理員中設定 Git 認證管理員和儲存驗證權杖的一節。

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

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

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

使用掛接的磁片磁碟機,您可以在中編輯程式碼(例如, C:\dev\myproj\ 使用C:\dev\myproj\ /或VS Code),並透過存取相同的檔案,在 Linux 中建立/測試該程式碼

深入瞭解如何跨 Windows 和 Linux 檔案系統的檔案系統文章。

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

  1. Linux 根 (的檔案 / ,也就是) 是由與 Linux 行為相符的 WSL 所控制,包括但不限於:

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

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

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

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

此外,您可以在電腦上卸載 Linux 發行版本應用程式,就像任何其他存放區應用程式一樣。

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

如何執行 OpenSSH 伺服器?

OpenSSH 隨附 Windows 作為選擇性功能。 請參閱安裝 OpenSSH檔。需要 Windows 中的系統管理員許可權,才能在 WSL 中執行 OpenSSH。 若要執行 OpenSSH 伺服器,請以系統管理員身分執行 WSL 散發 (ie Ubuntu) 或 Windows 終端機。 有幾個資源涵蓋 SSH 案例與 WSL。 查看 Scott Hanselman 的 blog 文章:如何透過 ssh 連線到 Linux 或 Windows 或任何地方的 Windows 10 機如何透過 ssh 連線至外部電腦 Windows 10 上的 WSL2、如何透過 ssh 連線到外部電腦 Windows 10 上的 Bash 和 WSL2,以及如何使用 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-安全

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

如何從 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 2

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

WSL 2 適用于所有可使用 WSL 的桌面 sku,包括 Windows 10 家用版。

最新版本的 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 相容。

查看 WSL 問題存放庫以取得更多有關 VirtualBox 6.1 的 WSL 2 問題的背景和討論。

* 如果您要尋找 Windows 10 的虛擬機器、VMWare、hyper-v、VirtualBox 和平行的 VM 下載,可在 Windows 開發人員中心上取得。

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

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

WSL 2 是否能夠使用網路應用程式?

是,因為我們具有完整系統呼叫相容性,所以在一般的網路應用程式中可以更快速且更有效率。 不過,新的架構會使用虛擬化網路元件。 這表示在初始預覽組建中,WSL 2 的行為會更類似虛擬機器,例如:WSL 2 將會有不同於主機電腦的 IP 位址。 我們致力於讓 WSL 2 的風格與 WSL 1 相同,包含改善我們的網路功能案例。

我可以在虛擬機器中執行 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 中的設定選項。 若要深入瞭解如何支援掛接磁片磁碟機、磁片、裝置或虛擬硬碟 (Vhd,請參閱 WSL 2 的掛接 Linux 磁片一 文中的) 。

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

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

  • 搜尋現有的問題 ,以查看是否有任何與您遇到的問題相關聯的問題。 請注意,在搜尋列中,您可以移除「是:開啟」以包含已在搜尋中解決的問題。 請考慮對您想要表達的任何未解決問題進行批註,或提供最新的問題。
  • 提出新的問題。 如果您發現 WSL 有問題,而且似乎沒有現有的問題,您可以選取 [綠色 新問題 ] 按鈕,然後選擇 [ WSL-Bug 報告]。 您將需要包含問題的標題、您的 Windows 組建編號 (執行 cmd.exe /c ver 以查看目前的組建 # ) 、您執行的是 WSL 1 或2、目前的 Linux 核心版本 # (執行 wsl.exe --statuscat /proc/version) 、您散發套件的版本號碼 (執行 lsb_release -r) 、任何其他相關軟體版本、所需的行為、實際行為、 以及診斷記錄(如果有的話)。 如需詳細資訊,請參閱 參與 WSL
  • 選取 [綠色新問題] 按鈕,然後選取 [功能要求],以提出功能要求。 您將需要解決一些描述要求的問題。

您也可以:

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