適用於 Linux 的 Windows 子系統(英語:Windows Subsystem for Linux,簡稱WSL)是一個爲在Windows 10和Windows Server 2019上能夠原生執行Linux二進制可執行檔案(ELF格式)的相容層,可讓開發人員按原樣執行 GNU/Linux 環境 - 包括大多數命令列工具、實用工具和應用程式 - 且不會產生傳統虛擬機器或雙啓動設定開銷。
WSL 2 是適用於 Linux 的 Windows 子系統體系結構的一個新版本,它支援適用於 Linux 的 Windows 子系統在 Windows 上執行 ELF64 Linux 二進制檔案。 它的主要目標是提高檔案系統效能,以及新增完全的系統呼叫相容性。
這一新的體系結構改變了這些 Linux 二進制檔案與Windows 和計算機硬體進行互動的方式,但仍然提供與 WSL 1(當前廣泛可用的版本)中相同的使用者體驗。
單個 Linux 分發版可以在 WSL 1 或 WSL 2 體系結構中執行。 每個分發版可隨時升級或降級,並且你可以並行執行 WSL 1 和 WSL 2 分發版。 WSL 2 使用全新的體系結構,該體系結構受益於執行真正的 Linux 內核。
只有 Windows 10 版本 2004 的內部版本 19041 或更高版本中才提供 WSL 2
WSL 是主要面向開發人員的工具 – 尤其是 Web 開發人員,以及處理和使用開源專案的開發人員。 想要/需要使用 Bash、常用 Linux 工具(sed、awk 等)和許多 Linux 優先工具(Ruby、Python 等)的使用者可以通過 WSL 在 Windows 上使用其工具鏈。
WSL 支援 x64 和 ARM CPU。
不是! WSL 工具的目的是使使用者能夠視需要在 Windows 上執行 Bash 和核心 Linux 命令列工具。
WSL 並不旨在支援 GUI 桌面或應用程式(例如 Gnome、KDE 等)。
此外,儘管你可以執行許多流行的伺服器應用程式(例如 Redis),但我們不建議使用 WSL 來託管生產服務 – Microsoft 提供多種解決方案用於在 Azure、Hyper-V 和 Docker 中執行生產 Linux 工作負荷。
功能 | WSL 1 | WSL 2 |
---|---|---|
Windows 和 Linux 之間的整合 | ✅ | ✅ |
啓動時間短 | ✅ | ✅ |
佔用的資源量少 | ✅ | ✅ |
可以與當前版本的 VMWare 和 VirtualBox 一起執行 | ✅ | ✅ |
託管 VM | ❌ | ✅ |
完整的 Linux 內核 | ❌ | ✅ |
完全的系統呼叫相容性 | ❌ | ✅ |
跨 OS 檔案系統的效能 | ✅ | ❌ |
傳統的 VM 體驗可能啓動速度慢,是獨立的,消耗大量資源,需要你花費時間進行管理。 WSL 2 沒有這些屬性。
WSL 2 有 WSL 1 的優點,包括 Windows 和 Linux 之間的無縫整合,啓動時間短,資源佔用量少,並且無需 VM 設定或管理。 雖然 WSL 2 確實使用 VM,但 VM 是在幕後管理和執行的,因此你將具有與 WSL 1 相同的使用者體驗。
WSL 2 中的 Linux 內核是 Microsoft 根據最新的穩定版分支(基於 kernel.org 上提供的原始碼)構建的。此內核已專門針對 WSL 2 進行了調整,針對大小和效能進行了優化,以便在 Windows 上提供良好的 Linux 體驗。 內核將由 Windows 更新提供服務,這意味着你將獲得最新的安全修補程式和內核改進功能,而無需自行管理它。
WSL 2 Linux 內核是開源的
如果使用 WSL 2,檔案密集型操作(如 git 克隆、npm 安裝、apt 更新、apt 升級等)的速度都明顯更快。
實際的速度提升將取決於你執行的應用以及它與檔案系統的互動方式。 在對壓縮的 tarball 進行解包時,WSL 2 的初始版本的執行速度比 WSL 1 快達 20 倍,在各種專案上使用 git 克隆、npm 安裝和 cmake 時,大約快 2-5 倍。
WSL 2 在實際 Linux 內核上使用輕量級實用工具 VM,記憶體佔用量很小。 該實用工具將在啓動時分配虛擬地址支援的記憶體。 它已經過設定,在啓動時使用的記憶體佔比小於 WSL 1 所需的記憶體佔比。
進入Windows store 選擇需要的版本進行下載
進入Windows 應用設定,啓動WSL功能
重新啓動電腦後,進入Windows 10啓動選單,找到Ubuntu雙擊開啓。第一次執行時會等待一會兒設定環境,第一次執行Ubuntu會提示設定使用者和密碼。如果想使用root許可權,可以輸入sudo passwd root
,輸入之前設定的使用者的密碼,再爲root設定密碼。