共用方式為


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

一般

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

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

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

誰是 WSL?

這主要是適用於開發人員,特別是 Web 開發人員、那些在開放原始碼專案上工作,或部署到 Linux 伺服器環境的工具。 WSL 適用於任何喜歡使用Bash、通用Linux工具(等等sed)和Linux優先架構(awkRuby、Python等)但也喜歡使用Windows生產力工具的人。

我可以使用 WSL 做什麼?

WSL 可讓您在Bash殼層中使用您選擇的發行版執行Linux(Ubuntu、Debian、OpenSUSE、Kali、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 也可讓您在 Windows 命令行、桌面和市集應用程式旁邊執行 Linux 命令行工具和應用程式,以及從 Linux 存取 Windows 檔案。 這可讓您視需要在同一組檔案上使用 Windows 應用程式和 Linux 命令行工具。

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

假設其執行所在的環境與Linux類似,建置了一些跨平臺工具。 例如,某些工具假設他們能夠存取很長的檔案路徑,或特定檔案/資料夾存在。 這通常會導致 Windows 上通常的行為與 Linux 不同的問題。

Ruby 和 Node.js 等許多語言通常會移植到 Windows 上,並在 Windows 上執行得很棒。 不過,並非所有 Ruby Gem 或節點/NPM 連結庫擁有者都會移植其連結庫以支援 Windows,而且許多都有 Linux 特定的相依性。 這通常會導致使用這類工具和連結庫所建置的系統,有時在 Windows 上發生運行時錯誤或垃圾行為。

這隻是一些問題,導致許多人要求Microsoft改善 Windows 命令行工具,以及是什麼促使我們與 Canonical 合作,讓原生 Bash 和 Linux 命令行工具能夠在 Windows 上執行。

這對 PowerShell 有何意義?

使用 OSS 專案時,有許多案例,從 PowerShell 提示字元放入 Bash 非常實用。 Bash 支援是互補的,可強化 Windows 上的命令行價值,讓 PowerShell 和 PowerShell 社群利用其他熱門技術。

深入瞭解 PowerShell 小組部落格 -- Bash for Windows:為什麼它很棒,以及 PowerShell 的意義

WSL 支援哪些處理器?

WSL 支援 x64 和 Arm64 CPU。

如何存取我的 C: 磁碟驅動器?

本機電腦上的硬碟裝入點會自動建立,並提供輕鬆存取 Windows 檔案系統。

/mnt/<驅動器號>/

範例使用方式是 cd /mnt/c 存取 c:\

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

請參閱 開始在適用於Linux的Windows子系統上使用 Git 的教學課程,其功能是關於設定 Git 認證管理員並在 Windows 認證管理員中儲存驗證令牌一節。

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

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

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

使用掛接的磁碟驅動器,您可以透過 存取相同的檔案C:\dev\myproj\,在 中編輯程序代碼,例如,使用Visual Studio/mnt/c/dev/myproj,並在 Linux 中建置/測試該程式代碼。

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

Linux 磁碟驅動器中的檔案是否與所掛接的 Windows 磁碟驅動器不同?

  1. Linux 根目錄下的檔案是由 /WSL 所控制,其與 Linux 行為一致,包括但不限於:

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

    • 支援區分大小寫
    • 所有許可權都會設定為最能反映 Windows 許可權

如何卸載 WSL 散發套件?

若要從 WSL 移除散發套件,並 刪除與該 Linux 散發套件相關聯的所有數據,請執行 wsl --unregister <Distro> 其中 <Distro> 是 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 計算機、如何從外部電腦透過 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. 卡巴斯基
  2. AVG
  3. Avast
  4. Symantec Endpoint Protection
  5. F-安全

在某些情況下,關閉防火牆允許存取。 在某些情況下,只要安裝防火牆,就會封鎖存取。

如何從 Windows 中的 WSL 存取埠?

WSL 會在 Windows 上執行時共用 Windows 的 IP 位址。 因此,您可以在localhost上存取任何埠,例如,如果您在埠1234上有Web內容,則可以 https://localhost:1234 進入Windows 瀏覽器。 如需詳細資訊,請參閱 存取網路應用程式

如何備份 WSL 散發套件?

備份或移動散發套件的最佳方式是透過 Windows 版本 1809 和更新版本中提供的導出匯/入命令。 您可以使用 命令將整個散發匯出至 tarball wsl --export 。 接著,您可以使用 命令將此散發套件匯回 WSL wsl --import ,以命名匯入的新磁碟驅動器位置,讓您備份並儲存 WSL 散發套件的狀態。。 若要深入瞭解如何將 WSL 散發套件移動,請參閱 如何將 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 <Distro> <FileName> --format vhd 命令將 WSL 散發套件匯出至 VHD 檔案。 然後,您可以將此檔案複製到另一部計算機,然後使用 匯入 wsl --import <Distro> <InstallLocation> <FileName> --vhd它。 如需詳細資訊,請參閱 WSL 基本命令檔中的入和匯出命令。
  • 上述實作需要大量的磁碟空間。 如果您沒有大量的磁碟空間,您可以使用 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 散發套件移至不同的磁碟驅動器或位置?

您可以使用 PowerShell 來執行這項作。 以下是每個步驟的必要命令和說明。 請開啟 PowerShell 視窗,並調整標籤的 <> 值,以符合您的特定使用案例:

# Export your distro to that folder as a VHD
wsl --export <Distro, e.g: Ubuntu> <FileName, e.g: D:\WSLDistros\Ubuntu\ext4.vhdx> --format vhd

# Unregister your old distro
# Please note this will erase your existing distro's file contents, please ensure the backup file you created in the 2nd step is present at the location and that the export operation completed successfully.
# Please exercise caution when using this command, as it is destructive and could cause data loss.
wsl --unregister <Distro, e.g: Ubuntu>

# Import your VHD backup
wsl --import-in-place <Distro, e.g: Ubuntu> <FileName, e.g: D:\WSLDistros\Ubuntu\ext4.vhdx>

如何設定預設用戶帳戶

您可以藉由設定 wsl.confuser.default=<name>來設定預設用戶帳戶

WSL 2

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

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

具體而言,WSL2 需要啟用兩個功能:

  1. “虛擬機平臺”(Hyper-V子集)
  2. “適用於 Linux 的 Windows 子系統”

WSL 2 是否使用 Hyper-V?

最新版的 WSL 會使用 Hyper-V 架構的 子集 來啟用其虛擬化。 此子集是以名為「虛擬機平臺」的選擇性元件提供,可在所有桌面 SKU 上使用。

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 問題討論。 StackOverflow 也提供實用的秘訣: 如何讓 VirtualBox 6.0 和 WSL 同時運作

我們一直致力於支援 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 散發套件會有不同於主電腦 (Windows OS) 的 IP 位址。 如需詳細資訊,請參 閱使用 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) 的支援。

1:VirtualBox 6.0 2 的變更記錄:Hyper-V API3:Hyper-V Android 模擬器支援4:VMware 工作站 Tech Preview 20H1 — Hyper-V/主機 VBS 支援

哪裡可以提供意見反應?

WSL 產品存放庫問題 能夠讓您:

  • 搜尋現有問題,以查看是否有與您遇到的問題相關聯。 請注意,在搜尋列中,您可以移除 「is:open」,以包含已在搜尋中解決的問題。 請考慮在任何您希望優先推進的公開問題上發表評論或按讚,以表達您的興趣。
  • 提出新問題。 如果您發現 WSL 存在問題,且似乎沒有已知的相關問題,您可以選取綠色按鈕 [新增問題],然後選擇 [WSL - 錯誤報告]。 您需要包括問題標題、您的 Windows 組建號(執行 cmd.exe /c ver 以查看目前的組建號)、您正在執行的 WSL 版本(1 或 2)、您目前的 Linux 核心版本號(執行 wsl.exe --statuscat /proc/version)、發行版的版本號(執行 lsb_release -r)、任何其他涉及的軟體版本、重現步驟、預期行為、實際行為,以及診斷記錄(如果可用且適當)。 如需詳細資訊,請參閱 參與 WSL
  • 選取綠色 [新增問題] 按鈕,然後選取 [功能要求,以 提出功能要求。 您需要回答幾個描述您的要求的問題。

您也可以:

如果您想要隨時掌握最新的 WSL 新聞,您可以使用:

如何解決「錯誤:0x800704ec此程式遭到組策略封鎖。 如需詳細資訊,請連絡您的系統管理員。'?

此錯誤是由封鎖 WSL 的組策略所造成。 若要解決,請先執行 命令 wsl --update 以更新至最新的市集版本。 如果這無法解決問題,請連絡您的系統管理員。 深入瞭解收件匣 WSL 與 WSL 的市集版本之間的差異: Microsoft 市集中的 WSL

LxssManager 是否已由 WSLService 取代?

是,當 WSL 從收件匣元件轉換至 Microsoft Store 服務時,LxssManager 已由 WSLService 取代。