一般
什麼是適用於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 Shell 中執行 Linux,並可選擇您偏好的發行版(Ubuntu、Debian、OpenSUSE、Kali、Alpine 等)。 使用 Bash,您可以執行命令行 Linux 工具和應用程式。 例如,輸入 lsb_release -a 並按 Enter 鍵,您會看到目前執行的 Linux 發行版詳細數據:
您也可以在 Linux Bash 殼層中存取本機的檔案系統。您會發現本機磁碟機掛載在 /mnt 資料夾下。 例如,您的 C: 磁碟機掛載於 /mnt/c 下:
您可以描述包含 WSL 的一般開發工作流程嗎?
WSL 以開發人員為目標對象,旨在作為開發內迴圈的一部分使用。 假設 Sam 正在建立 CI/CD 管線(持續整合和持續傳遞),並想要先在本機電腦(膝上型電腦)上進行測試,再將其部署至雲端。 Sam 可以啟用 WSL(以及可提升速度和效能的 WSL 2),然後在本機(筆記型電腦上)使用原生的 Ubuntu Linux 環境,並使用他們偏好的 Bash 命令和工具。 在本機驗證開發管線之後,Sam 就可以將 CI/CD 管線推送至雲端(亦即 Azure),方法是將其放入 Docker 容器,並將容器推送至在生產就緒的 Ubuntu VM 上執行的雲端實例。
Bash 是什麼?
Bash 是廣受歡迎的文字介面 shell 和命令語言。 這是 Ubuntu 和其他 Linux 發行版中內建的預設 Shell。 使用者在 shell 中輸入命令,以執行指令碼和/或執行指令與工具,完成各種工作。
這如何運作?
請參閱 Windows 命令行部落格上的這篇文章: 深入探討 WSL 如何讓 Windows 存取 Linux 檔案 ,以深入瞭解基礎技術的詳細數據。
為什麼我會在 VM 中使用 WSL 而不是 Linux?
WSL 所需的資源(CPU、記憶體和儲存空間)比完整的虛擬機器更少。 WSL 也可讓您在 Windows 命令行、桌面和市集應用程式旁邊執行 Linux 命令行工具和應用程式,以及從 Linux 存取 Windows 檔案。 這可讓您視需要在同一組檔案上使用 Windows 應用程式和 Linux 命令行工具。
為什麼我會在Linux上使用Ruby而不是在 Windows 上使用?
假設其執行所在的環境與Linux類似,建置了一些跨平臺工具。 例如,某些工具假設他們能夠存取很長的檔案路徑,或特定檔案/資料夾存在。 這經常會在 Windows 上造成問題,因為 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 團隊部落格上的更多內容 -- Windows 版 Bash:為什麼它如此出色,以及這對 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 會將您電腦上的固定磁碟掛載到您的 Linux 發行版中的 /mnt/<drive> 資料夾下。 例如,您的 C: 磁碟驅動器會掛接在 下 /mnt/c/。
使用已掛接的磁碟機,您可以在例如 C:\dev\myproj\ 中使用 Visual Studio 或 VS Code 編輯程式碼,並在 Linux 中透過 /mnt/c/dev/myproj 存取相同的檔案來建置/測試該程式碼。
若要深入瞭解 ,請參閱跨 Windows 和 Linux 文件系統工作 一文。
Linux 磁碟驅動器中的檔案是否與所掛接的 Windows 磁碟驅動器不同?
Linux 根目錄下的檔案是由
/WSL 所控制,其與 Linux 行為一致,包括但不限於:- 包含無效 Windows 檔名字符的檔案
- 為非系統管理員使用者建立的符號連結
- 透過
chmod和chown變更檔案屬性 - 檔案/資料夾區分大小寫
掛接的磁碟驅動器中的檔案由 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 中封鎖因特網存取的問題。 報告的防火牆如下:
- 卡巴斯基
- AVG
- Avast
- 賽門鐵克端點保護
- F-安全
在某些情況下,關閉防火牆允許存取。 在某些情況下,只要安裝防火牆,就會封鎖存取。
如何在 Windows 中存取 WSL 的連接埠?
WSL 會在 Windows 上執行時共用 Windows 的 IP 位址。 因此,您可以在localhost上存取任何埠,例如,如果您在埠1234上有Web內容,則可以 https://localhost:1234 進入Windows 瀏覽器。 如需詳細資訊,請參閱 存取網路應用程式。
如何備份我的 WSL 發行版?
備份或移動發行版的最佳方式,是透過 Windows 1809 版及更新版本提供的 export/ 和 import 命令。 您可以使用 wsl --export 命令將整個發行版匯出為 tar 封存檔。 接著,您可以使用 wsl --import 命令將此發行版匯入回 WSL,並可為匯入作業指定新的磁碟機位置,讓您能夠備份、儲存狀態,或移動您的 WSL 發行版。 若要進一步了解如何移動您的 WSL 發行版,請參閱 如何將 WSL 檔案從一台電腦傳輸到另一台電腦?。
在 AppData 資料夾中備份檔的傳統備份服務(例如 Windows 備份)不會損毀您的 Linux 檔案。
我可以在生產案例中使用 WSL 嗎?
是的! 我們建議使用 WSL 容器 API 來打造使用 Linux runtimnes 的生產應用程式。 你也可以使用 WSL,但 WSL 是設計並打造來配合內圈開發工作流程使用的。 WSL 中有一些設計功能,使其非常適合此用途,但相較於其他產品,可能會使生產相關案例更具挑戰性。 我們的目標是清楚 WSL 與一般 VM 環境有何不同,因此您可以決定它是否符合您的業務需求。
WSL 與傳統生產環境的主要差異如下:
- WSL 具有輕量型公用程式 VM,可自動啟動、停止及管理資源。
- 如果您沒有任何連至 Windows 處理程序的開啟檔案控制代碼,WSL 虛擬機器就會自動關閉。 這表示如果您使用它作為網頁伺服器,請透過 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.conf 值設為 user.default=<name>來設定預設使用者帳戶
女子超級聯賽2
WSL 2 是否可在 Windows 10 家用版和 Windows 11 家用版上使用?
是的。 WSL 2 可在所有提供 WSL 的桌面版 SKU 上使用,包括 Windows 10 家用版和 Windows 11 家用版。
具體而言,WSL2 需要啟用兩個功能:
- “虛擬機平臺”(Hyper-V子集)
- “適用於 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 Workstation Tech Preview 20H1 — Hyper-V/主機 VBS 支援
哪裡可以提供意見反應?
WSL 產品存放庫問題 能夠讓您:
- 搜尋現有問題,以查看是否有與您遇到的問題相關聯。 請注意,在搜尋列中,您可以移除 「is:open」,以包含已在搜尋中解決的問題。 請考慮在任何您希望優先推進的公開問題上發表評論或按讚,以表達您的興趣。
-
提出新問題。 如果您發現 WSL 存在問題,且似乎沒有已知的相關問題,您可以選取綠色按鈕 [新增問題],然後選擇 [WSL - 錯誤報告]。 您需要包括問題標題、您的 Windows 組建號(執行
cmd.exe /c ver以查看目前的組建號)、您正在執行的 WSL 版本(1 或 2)、您目前的 Linux 核心版本號(執行wsl.exe --status或cat /proc/version)、發行版的版本號(執行lsb_release -r)、任何其他涉及的軟體版本、重現步驟、預期行為、實際行為,以及診斷記錄(如果可用且適當)。 如需詳細資訊,請參閱 參與 WSL。 - 選取綠色 [新增問題] 按鈕,然後選取 [功能要求,以 提出功能要求。 您需要回答幾個描述您的要求的問題。
您也可以:
- 使用 WSL 檔存放庫來提出文件問題。 若要為 WSL 文件做出貢獻,請參閱 Microsoft Docs 參與者指南。
- 如果您的問題與 Windows 終端機、Windows 控制台或命令行 UI 相關,請使用 Windows 終端機產品存放庫提出 Windows 終端機問題。
如果您想要隨時掌握最新的 WSL 新聞,您可以使用:
- 我們的 命令行小組部落格
- X. 請遵循 X 上的@craigaloewen 以瞭解新聞、更新等資訊。
如何解決「錯誤:0x800704ec此程式遭到組策略封鎖。 如需詳細資訊,請連絡您的系統管理員。'?
此錯誤是由封鎖 WSL 的組策略所造成。 若要解決,請先執行 命令 wsl --update 以更新至最新的市集版本。 如果這無法解決問題,請連絡您的系統管理員。 深入瞭解收件匣 WSL 與 WSL 的市集版本之間的差異: Microsoft 市集中的 WSL。
LxssManager 是否已由 WSLService 取代?
是,當 WSL 從收件匣元件轉換至 Microsoft Store 服務時,LxssManager 已由 WSLService 取代。