当前位置: 首页 > news >正文

【基础】Windows开发设置入门8:Windows 子系统 (WSL)操作入门

 前言

大家熟悉的docker、Python,但对于Windows上有一套开配合开发的相对底层的环境设置,包括powershell、winget、WSL、还有开发驱动器什么的,我准备系统学一下,不然地基不牢,也盖不起冲天高楼~

本节,介绍Windows 子系统(WSL,Windows Subsystem for Linux)的安装及使用,它通过将 Linux 系统调用转换为 Windows 系统调用,实现了Windows对 Linux 应用的支持。

往期参考

【基础】Windows开发设置入门1:各种终端比较-CSDN博客

【基础】Windows开发设置入门2:Windows 终端Windows Terminal-CSDN博客

【基础】Windows开发设置入门3:在 Windows 11 上设置开发驱动器,提升性能速度-CSDN博客

【基础】Windows开发设置入门4:Windows、Python、Linux和Node.js包管理器的作用和区别(AI整理)-CSDN博客  【基础】Windows开发设置入门5:WinGet开发者完全指南(AI整理)-CSDN博客

【基础】Windows开发设置入门6:Scoop开发者完全指南(AI整理)-CSDN博客

【基础】Windows开发设置入门7:PowerShell的相关概念和使用-CSDN博客 

本文对应官网文档

适用于 Linux 的 Windows 子系统文档 | Microsoft Learn


正文开始。。。。。。 

(一)Windows 子系统 (WSL) 介绍

Windows 子系统(WSL,Windows Subsystem for Linux)是微软推出的一项技术,旨在让 Windows 用户能够在不依赖虚拟机或双启动的情况下直接运行原生的 Linux 环境。WSL 的核心目标是提高开发者的生产力,同时为用户提供一个无缝集成的 Linux 开发环境。

基本概念:

WSL 是一个兼容层,允许在 Windows 上运行 Linux 的二进制可执行文件(ELF 格式)。它通过将 Linux 系统调用转换为 Windows 系统调用,实现了对 Linux 应用的支持。WSL 提供了与 Linux 兼容的内核接口,管理文件系统、网络和进程执行,并将 Linux 工具和实用程序无缝集成到 Windows 工作流中。WSL 的早期版本最初仅支持 Ubuntu,但随着技术的发展,现在支持多个 Linux 发行版,包括 Debian、Kali Linux、Fedora 等。

逻辑关系如同:

+------------------+       +------------------+       +------------------+
|                  |       |                  |       |                  |
|    Windows       | ----> |      WSL         | <---->| Linux 发行版     |
|                  |       |                  |       | (如Ubuntu)       |
|                  |       |                  |       |                  |
+------------------+       +------------------+       +------------------+

特点与优势:

  • 无需虚拟机或双启动:WSL 允许用户直接在 Windows 上运行 Linux 应用,减少了资源消耗和管理复杂性。
  • 高性能与兼容性:WSL 2 的引入大幅提升了性能,并支持更广泛的 Linux 应用程序。
  • 文件系统集成:WSL 支持将 Windows 文件系统挂载到 Linux 文件系统中,实现跨平台文件共享。
  • 开发效率:开发者可以在 Windows 和 Linux 环境之间无缝切换,使用熟悉的工具进行开发。

历史背景

WSL 的发展经历了两个主要版本:

  1. WSL 1:于 2016 年推出,通过在 Windows 内核上实现 Linux 系统调用的兼容层来运行 Linux 应用。WSL 1 的性能有限,但能够运行大多数常见的 Linux 工具和应用程序。
  2. WSL 2:于 2019 年推出,引入了基于轻量级虚拟机(VM)的架构,实现了对完整 Linux 内核的支持。这带来了显著的性能提升和更好的兼容性,使得 WSL 2 成为目前的默认版本

版本特性对比表

特性维度WSL1WSL2
内核架构转换层虚拟机
文件系统性能Windows文件快Linux文件快
网络能力共享主机IP独立IP地址
系统调用支持部分支持完整支持
GUI支持需第三方X Server可直通Wayland
服务持久化不支持systemd支持systemd
资源隔离

 (二)安装

通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需承担传统虚拟机或双启动设置的费用。

 系统要求

  • Windows 10 2004+ 或 Windows 11
  • 至少4GB RAM(建议8GB+)
  • BIOS启用虚拟化支持(Intel VT-x/AMD-V)
  • 2GB可用磁盘空间(建议预留20GB+)

硬件要求

  • 必须启用虚拟化技术(如 Hyper-V)。

安装及相关命令

启用虚拟化技术(如 Hyper-V)

安装WSL,必须必须启用虚拟化技术(如 Hyper-V)。

  •  检查虚拟化环境:检查系统是否支持并开启了虚拟化,可以参考之前发的另一篇文章

windows开启虚拟化设置(BIOS设置虚拟化)_bios里没有虚拟化开启的选项-CSDN博客

  • windows开启Hyper-V服务,Hyper-V是windows自带的服务(windows11设置麻烦些),具体请参考:

windows开启Hyper-V-CSDN博客

    安装默认版本 WSL
    • 打开 PowerShell(管理员)并运行以下命令:
         wsl --install
    

    --install 命令执行以下操作:

    • 启用可选的 WSL 和虚拟机平台组件
    • 下载并安装最新 Linux 内核
    • 将 WSL 2 设置为默认值
    • 下载并安装 Ubuntu Linux 发行版(可能需要重新启动)

    安装过程界面:

     

    安装完成界面:

    备注:

    手动启用 WSL 功能一般不需要,列出来,仅供参考了解: 

    • 打开 PowerShell 或命令提示符(以管理员身份运行)。
    • 运行以下命令启用 WSL 功能:
         dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
    • 启用虚拟机平台功能:
         dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    

      如果想安装其他版本,需要用到下面命令。 

      看可用的 Linux 发行版

      可以通过 wsl --list --online 查看可用的 Linux 发行版列表 。 

      # 查看可用发行版
      wsl --list --online
       安装其他 Linux 发行版
      • 使用以下命令安装其他发行版(例如 Debian):
           wsl --install -d <DistributionName>
      

       此命令,可用参数包括:

      • --distribution:指定要安装的 Linux 发行版。 可以通过运行 wsl --list --online 来查找可用的发行版。
      • --no-launch:安装 Linux 发行版,但不自动启动它。
      • --web-download:通过联机渠道安装,而不是使用 Microsoft Store 安装。
        设置默认 WSL 版本
        • 如果需要设置 WSL 2 为默认版本,运行以下命令:
             wsl --set-default-version 2
        
        • 默认情况下,WSL 安装后会自动设置为 WSL 2 。
         设置默认 Linux 发行版
        wsl --set-default <Distribution Name>
        

        若要设置 WSL 命令将用于运行的默认 Linux 发行版,请将 <Distribution Name> 替换为你首选的 Linux 发行版的名称。

        验证安装及运行状态
        • 安装完成后,可以通过以下命令检查 WSL 版本及运行:
        # 查看已安装发行版
        wsl --list --verbose# 简写格式
        wsl -l -v
        
        • 确认已安装的 Linux 发行版及其版本 。

        示例界面:

         

        总结:WSL 的安装需要满足特定的 Windows 版本和硬件要求,并通过 PowerShell 或命令提示符运行相关命令完成安装。安装过程中会自动下载 Linux 内核并配置虚拟机功能。

         (三)WSL使用

        启动

        WSL 安装后,使用“开始”菜单打开该发行版(如果是默认安装,则为 Ubuntu):

         也可以在PowerShell或CMD中通过命令启动。

        wsl -d Ubuntu
        

        另外,如果你有Windows终端的话,也会增加一个安装的发行版的配置,也可以从这里启动:

         

         创建用户

        启动WSL的发行版后,系统将要求你为 Linux 发行版创建“用户名”和“密码”。

        • 用户名密码特定于安装的每个单独的 Linux 分发版,与 Windows 用户名无关。

        • 请注意,输入密码时,屏幕上不会显示任何内容。 这称为盲人键入。 你不会看到你正在键入的内容,这是完全正常的。

        • 创建用户名密码后,该帐户将是分发版的默认用户,并将在启动时自动登录。

        • 此帐户将被视为 Linux 管理员,能够运行 sudo (Super User Do) 管理命令。

        • 在 WSL 上运行的每个 Linux 发行版都有其自己的 Linux 用户帐户和密码。 每当添加分发版、重新安装或重置时,都必须配置一个 Linux 用户帐户。

         启动及创建用户界面,注意root用户随发行版安装就创建了,新建的用户,用于发行版启动的默认用户:

        若要更改或重置密码,请打开 Linux 发行版并输入命令:passwd。 系统会要求你输入当前密码,然后要求输入新密码,之后再确认新密码。

        如果忘记了 Linux 分发版的密码:

        1. 请打开 PowerShell,并使用以下命令进入默认 WSL 分发版的根目录:wsl -u root

          如果需要在非默认的分发版中更新忘记的密码,请使用命令:wsl -d Debian -u root,并将 Debian 替换为目标分发版的名称。

        2. 在 PowerShell 内的根级别打开 WSL 发行版后,可使用此命令更新密码:passwd <username>,其中 <username> 是发行版中帐户的用户名,而你忘记了它的密码。

        3. 系统将提示你输入新的 UNIX 密码,然后确认该密码。 在您被告知密码已正确更新后,请在 PowerShell 内使用以下命令关闭 WSL:exit

        (四)基本命令

        启动与退出

        • 启动默认发行版:

          wsl
          

                通过:wsl --set-default <Distribution Name>,可以修改默认 Linux 发行版

        • 启动特定发行版

        wsl --distribution <Distribution Name>

                通过特定用户运行特定 Linux 发行版,<Distribution Name> 为 Linux 发行版的名称(例如 Debian)

                简单运行一个特定发行版的示例:

        wsl -d Ubuntu
        
        •  用特定用户启动特定发行版
        wsl --distribution <Distribution Name> --user <User Name>

                通过特定用户运行特定 Linux 发行版,<Distribution Name> 为 Linux 发行版的名称(例如 Debian), <User Name> 为所运行linux系统的用户名,如果 WSL 发行版中不存在该用户,你将会收到一个错误。

        • 启动 Linux 环境,并进入用户home目录:
        wsl ~

                ~是Linux中的特殊符号,代表当前用户的家目录路径(通常为/home/你的用户名/)。

        • 退出 Linux 环境:
        exit

        更新WSL 

        • 将 WSL 版本更新到最新版本
        wsl --update

        检查 WSL 状态

        wsl --status
        

        查看有关 WSL 配置的常规信息,例如默认发行版类型、默认发行版和内核版本。

        检查 WSL 版本

        wsl --version
        

        检查有关 WSL 及其组件的版本信息。

        Help 命令

        wsl --help
        

        查看 WSL 中可用的选项和命令列表。

        以特定用户的身份运行

        wsl --user <Username>
        

        若要以指定用户身份运行 WSL,请将 <Username> 替换为 WSL 发行版中存在的用户名。

        更改发行版的默认用户

        <DistributionName> config --default-user <Username>
        

        更改用于发行版登录的默认用户。 用户必须已经存在于发行版中才能成为默认用户。

        例如:ubuntu config --default-user johndoe 会将 Ubuntu 发行版的默认用户更改为“johndoe”用户。

         备注:如果在确定发行版名称时遇到问题,请使用命令 wsl -l

         警告⚠️

        此命令不适用于导入的发行版,因为这些发行版没有可执行启动器。 可以改为使用 /etc/wsl.conf 文件来更改导入的发行版的默认用户。 

        关闭/终止运行

        wsl --shutdown
        

        立即终止所有正在运行的发行版和 WSL 2 轻量级实用工具虚拟机。

        执行界面:

        关闭发行版后,已经进入发行版执行的窗口,会收到相应退出的信息:

         Terminate

        wsl --terminate <Distribution Name>
        

        若要终止指定的发行版或阻止其运行,请将 <Distribution Name> 替换为目标发行版的名称。

        注销或卸载 Linux 发行版

        注销并卸载 WSL 发行版:

        wsl --unregister <DistributionName>
        

        如果将 <DistributionName> 替换为目标 Linux 发行版的名称,则将从 WSL 取消注册该发行版,以便可以重新安装或清理它。 

        警告⚠️:取消注册后,与该分发版关联的所有数据、设置和软件将永久丢失。 重新安装会安装分发版的干净副本。 例如:wsl --unregister Ubuntu 将从可用于 WSL 的发行版中删除 Ubuntu。 运行 wsl --list 将会显示它不再列出。

        导出分发版

        wsl --export <Distribution Name> <FileName>
        

        将指定分发版的快照导出为新的分发文件。 默认为 tar 格式。 在标准输入中,文件名可以是 -。 选项包括:

        • --vhd:指定导出分发版应为 .vhdx 文件而不是 tar 文件(这仅在使用 WSL 2 的情况下受支持)

        导入分发版

        wsl --import <Distribution Name> <InstallLocation> <FileName>
        

        导入指定的 tar 文件作为新的分发版。 在标准输入中,文件名可以是 -。 选项包括:

        • --vhd:指定导入分发版应为 .vhdx 文件而不是 tar 文件(这仅在使用 WSL 2 的情况下受支持)
        • --version <1/2>:指定将分发版导入为 WSL 1 还是 WSL 2 分发版

        就地导入发行版

        wsl --import-in-place <Distribution Name> <FileName>
        

        将指定的 .vhdx 文件导入为新的发行版。 虚拟硬盘必须采用 ext4 文件系统类型格式。

        命令示例:

        命令作用
        wsl --export Ubuntu ubuntu.tar导出系统快照
        wsl --import NewUbuntu .\ ubuntu.tar导入已有发行版
        wsl --terminate Debian强制停止指定发行版

        (五)跨文件系统

        跨系统访问

        • 从 Linux 访问 Windows 文件

          cd /mnt/c/Users/YourName/Documents  # 进入 C 盘文档目录
          
        • 从 Windows 访问 Linux 文件
          在资源管理器地址栏输入 \\wsl$\Ubuntu\home\user(路径根据发行版名称调整)

        但是,想获得最快的性能速度,建议不要跨操作系统使用文件,也就是:在 Linux 命令行(Ubuntu、OpenSUSE 等)中,将文件存储在 WSL 文件系统中。 使用 Windows 命令行(PowerShell、命令提示符),请将文件存储在 Windows 文件系统中。

        例如,在存储 WSL 项目文件时:

        • 使用 Linux 文件系统根目录:/home/<user name>/Project
        • 而不使用 Windows 文件系统根目录:/mnt/c/Users/<user name>/Project$ 或 C:\Users\<user name>\Project

         在 Windows 文件资源管理器中查看当前目录

        在发行版中,可使用以下命令,打开当前路径在Windows系统对应的目录:

        explorer.exe .
        #或者
        powershell.exe /c start .

        运行示例:

        上面的命令在Windows 命令行(PowerShell、CMD) ,也可以用,打开的是所在的工作目录。

        在win+R,运行窗口,使用\\wsl$,回在 Windows 文件资源管理器中看到所有可用的 Linux 发行版及其根文件系统:类似这样:

         注意: Windows 和 Linux 文件系统处理区分大小写的方式不同 - Windows 不区分大小写,而 Linux 区分大小写。

         跨系统使用工具和命令

        借助 WSL,Windows 和 Linux 工具和命令可互换使用。

        • 从 Linux 命令行(即 Ubuntu)运行 Windows 工具(如 notepad.exe等)。
        • 从 Windows 命令行(即 PowerShell)运行 Linux 工具(如 grep等)。
        • 在 Windows 与 Windows 之间共享环境变量。 (版本 17063+)
        从 Windows 命令行运行 Linux 工具

        使用 wsl <command>(或 wsl.exe <command>)从 Windows 命令提示符 (CMD) 或 PowerShell 运行 Linux 二进制文件。

        例如 PowerShell命令示例:

        C:\temp> wsl ls -la
        <- contents of C:\temp ->
        

        以这种方式调用二进制文件:

        • 使用当前 CMD 或 PowerShell 提示符中提到的同一工作目录。
        • 以 WSL 默认用户的身份运行。
        • 拥有与调用方进程和终端相同的 Windows 管理权限。

        wsl(或 wsl.exe)后面的 Linux 命令的处理方式与 WSL 中运行的任何命令的处理方式类似。 可以执行 sudo、管道处理和文件重定向等操作。

        使用 sudo 更新默认 Linux 分发版的PowerShell命令示例:

        C:\temp> wsl sudo apt-get update
        

        运行此命令后,将会列出默认的 Linux 分发版用户名,并将要求你输入密码。 正确输入密码后,分发版将下载更新。

        PowerShell 混合 Linux 和 Windows 命令的几个示例:

        若要使用 Linux 命令 ls -la 列出文件,并使用 PowerShell 命令 findstr 来筛选包含“git”的单词的结果,请组合这些命令:

        wsl ls -la | findstr "git"
        

        若要使用 PowerShell 命令 dir 列出文件,并使用 Linux 命令 grep 来筛选包含“git”的单词的结果,请组合这些命令:

        C:\temp> dir | wsl grep git
        

        若要使用 Linux 命令 ls -la 列出文件,并使用 PowerShell 命令 > out.txt 将该列表输出到名为“out.txt”的文本文件:

        C:\temp> wsl ls -la > out.txt
        

        传入 wsl.exe 的命令将按原样转发到 WSL 进程。 文件路径必须以 WSL 格式指定。

        若要使用 Linux 命令 ls -la 列出 /proc/cpuinfo Linux 文件系统路径中的文件,请使用 PowerShell:

        C:\temp> wsl ls -la /proc/cpuinfo
        

        若要使用 Linux 命令 ls -la 列出 C:\Program Files Windows 文件系统路径中的文件,需要使用其中Linux中的路径,如下面 PowerShell所示:

        C:\temp> wsl ls -la "/mnt/c/Program Files"
        
        从 Linux 运行 Windows 工具

        WSL 可以使用 [tool-name].exe 直接从 WSL 命令行运行 Windows 工具。 例如,notepad.exe

        以这种方式运行的应用程序具有以下属性:

        • 按 WSL 命令提示保留工作目录(大部分情况下是这样 -- 下面所述的情况除外)。
        • 拥有与 WSL 进程相同的权限。
        • 以活动 Windows 用户的身份运行。
        • 显示在 Windows 任务管理器中,就如同直接从 CMD 提示符执行的一样。

        在 WSL 中运行的 Windows 可执行文件的处理方式类似于本机 Linux 可执行文件 - 管道处理、重定向,甚至后台处理都可按预期方式工作。

        若要运行 Windows 工具 ipconfig.exe,使用 Linux 工具 grep 筛选“IPv4”结果,并使用 Linux 工具 cut 删除列字段,在 Linux 分发版(例如 Ubuntu)输入命令如下:

        ipconfig.exe | grep IPv4 | cut -d: -f2
        

        在 Linux 分发版(即 Ubuntu)创建文本文件:touch foo.txt后,现在使用 Linux 命令 ls -la 列出直接文件及其创建详细信息,并使用 Windows PowerShell 工具 findstr.exe 来筛选结果,命令如下:

        ls -la | findstr.exe foo.txt
        

        执行效果:

         

        注意:Windows 工具必须包含文件扩展名,匹配文件大小写,并且可执行。 包含批处理脚本的不可执行文件, dir 等 CMD 本机命令可与 cmd.exe /C 命令一起运行。

        例如,通过输入以下命令列出 Windows 文件系统 C:\ 目录的内容:

        cmd.exe /C dir
        

        或者使用 ping 命令将回显请求发送到 microsoft.com 网站:

        ping.exe www.microsoft.com
        

        参数将按原样传递到 Windows 二进制文件。 例如,以下命令将通过 notepad.exe 打开 C:\temp\foo.txt

        notepad.exe "C:\temp\foo.txt"
        

        以下命令也会起作用:

        notepad.exe C:\\temp\\foo.txt
        
        通过 WSLENV 在 Windows 与 WSL 之间共享环境变量

        WSL 和 Windows 共享一个特殊环境变量 WSLENV(为了桥接 Windows 和 WSL 上运行的 Linux 分发版而创建)。

        WSLENV 变量的属性:

        • 它是共享的;它同时在 Windows 和 WSL 环境中存在。
        • 它是要在 Windows 与 WSL 之间共享的环境变量列表。
        • 它可以设置环境变量的格式,使其能够在 Windows 和 WSL 中正常运行。
        • 它可以帮助 WSL 和 Win32 之间的流。

         备注:在 17063版本以前,只有 WSL 可访问的 Windows 环境变量是 PATH(因此可以从 WSL 下启动 Win32 可执行文件)。 从 17063 开始,WSLENV 开始受支持。 WSLENV 区分大小写。

        WSLENV 标志

        WSLENV 中有四个标志可以影响该环境变量的转换方式。

        WSLENV 标志:

        • /p - 在 WSL/Linux 样式路径与 Win32 路径之间转换路径。
        • /l - 指示环境变量是路径列表。
        • /u - 指示仅当从 Win32 运行 WSL 时,才应包含此环境变量。
        • /w - 指示仅当从 WSL 运行 Win32 时,才应包含此环境变量。

        可按需组合标志。

        阅读有关 WSLENV 的详细信息

        禁用互操作性

        用户可以使用 root 身份运行以下命令,禁用针对单个 WSL 会话运行 Windows 工具的功能:

        echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop
        

        若要重新启用 Windows 二进制文件,请退出所有 WSL 会话并重新运行 bash.exe,或者以 root 身份运行以下命令:

        echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop
        

        每次切换 WSL 会话后,禁用互操作的结果不会持久保留 -- 启动新会话后,会再次启用互操作。

         (六)网络配置

        Windows 主机查发行版中的IP

        从 Windows 主机的角度来看,你想要查询通过 WSL2 运行的 Linux 发行版的 IP 地址,使 Windows 主机上的程序可连接到分发(实例)中运行的服务器程序。

        Windows 主机可使用命令:

        wsl -d <DistributionName> hostname -I

        如果查询默认分发,则可省略指定该分发的此部分命令:-d <DistributionName>。 请务必使用大写 -I 标志。 执行的过程是这样,在后台,主机命令 wsl.exe 启动目标实例并执行 Linux 命令 hostname -I。 然后,此命令将 WSL 实例的 IP 地址打印到 STDOUT。 STDOUT 文本内容随后被中继回 wsl.exe。 最后,wsl.exe 显示该命令行的输出。 命令示例如下:  

        从图中看见,WSL 2 有一个带有其自己独一无二的 IP 地址的虚拟化以太网适配器,和Windows主机的网络地址不同。在linux发行版中,查询所在Windows主机ip时,查询的是WSL虚拟化以太网适配器的ip地址,命令及示例见后面内容。

        从Linux发行版查Windows 主机的IP

        在WSL2(实例)中的 Linux 发行版中,查 Windows 主机的 IP 地址,使用命令:

        ip route show | grep -i default | awk '{ print $3}'

         运行示例:

        默认情况下,WSL 使用基于 NAT(网络地址转换)的网络体系结构,其访问规则是这样:

        从 Windows (localhost) 访问 Linux 网络应用

        如果要在 Linux 分发版中构建网络应用(例如,在 NodeJS 或 SQL server 上运行的应用),可以使用 localhost 从 Windows 应用(如 Microsoft Edge 或 Chrome Internet 浏览器)访问它(就像往常一样)。

        从 Linux(主机 IP)访问 Windows 网络应用

        如果要从 Linux 分发版(即 Ubuntu)访问 Windows 上运行的网络应用(例如,在 NodeJS 或 SQL 服务器上运行的应用),则需要使用主机的 IP 地址。 虽然这不是一种常见方案,但你可以执行以下步骤来使其可行。

        1. 通过在 Linux 分发版中运行以下命令来获取主机的 IP 地址:ip route show | grep -i default | awk '{ print $3}'
        2. 使用复制的 IP 地址连接到任何 Windows 服务器。

        下图显示了一个示例,该示例说明如何通过 curl 连接到在 Windows 中运行的 Node.js 服务器。

        在 Windows 中通过 Curl 连接到 NodeJS 服务器

         

        通过远程 IP 地址进行连接

        当使用远程 IP 地址连接到应用程序时,它们将被视为来自局域网 (LAN) 的连接。 这意味着你需要确保你的应用程序可以接受 LAN 连接。

        例如,你可能需要将应用程序绑定到 0.0.0.0 而非 127.0.0.1。 以使用 Flask 的 Python 应用为例,可以通过以下命令执行此操作:app.run(host='0.0.0.0')。 进行这些更改时请注意安全性,因为这将允许来自你的 LAN 的连接。

        从局域网 (LAN) 访问 WSL 2 分发版

        当使用 WSL 1 分发版时,如果计算机设置为可供 LAN 访问,那么在 WSL 中运行的应用程序也可供在 LAN 中访问。

        这不是 WSL 2 中的默认情况。 WSL 2 有一个带有其自己独一无二的 IP 地址的虚拟化以太网适配器。 目前,若要启用此工作流,你需要执行与常规虚拟机相同的步骤。 (我们正在寻找改善此体验的方法。)

        下面是使用 Netsh 接口 portproxy Windows 命令添加端口代理的示例,该代理侦听主机端口并将该端口代理连接到 WSL 2 VM 的 IP 地址。

        netsh interface portproxy add v4tov4 listenport=<yourPortToForward> listenaddress=0.0.0.0 connectport=<yourPortToConnectToInWSL> connectaddress=(wsl hostname -I)
        

        在此示例中,需要更新 <yourPortToForward> 到端口号,例如 listenport=4000。 listenaddress=0.0.0.0 表示将接受来自任何 IP 地址的传入请求。 侦听地址指定要侦听的 IPv4 地址,可以更改为以下值:IP 地址、计算机 NetBIOS 名称或计算机 DNS 名称。 如果未指定地址,则默认值为本地计算机。 需要将 <yourPortToConnectToInWSL> 值更新为希望 WSL 连接的端口号,例如 connectport=4000。 最后,connectaddress 值必须是通过 WSL 2 安装的 Linux 分发版的 IP 地址(WSL 2 VM 地址),可通过输入命令:wsl.exe hostname -I 找到。

        因此,此命令可能如下所示:

        netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100
        

        要获取 IP 地址,请使用:

        • wsl hostname -I 标识通过 WSL 2 安装的 Linux 分发版 IP 地址(WSL 2 VM 地址)
        • cat /etc/resolv.conf 表示从 WSL 2 看到的 WINDOWS 计算机的 IP 地址 (WSL 2 VM)

        使用 listenaddress=0.0.0.0 将侦听所有 【基础】Windows开发设置入门7:PowerShell的相关概念和使用-CSDN博客

        (七)高级设置-配置文件

        wsl.conf 和 .wslconfig 文件用于在 WSL 中配置高级设置,这些设置将在 WSL VM 启动时应用。 wsl.conf 用于根据 WSL 发行版应用设置,.wslconfig 用于将全局设置应用于 WSL。

        方面.wslconfigwsl.conf
        范围适用于所有 WSL 的常规设置仅限 WSL 分发的设置
        配置WSL 中的功能启用、为 WSL 2 提供支持的虚拟机设置(RAM、要启动的内核、CPU 数等)WSL 中的分发设置,例如启动选项、DrvFs 自动装载、网络、与 Windows 系统的互作性、系统使用情况和默认用户
        位置说明%UserProfile%\.wslconfig,在 WSL 发行版之外,即在Windows系统中/etc/wsl.conf,而在 WSL 发行版中        
        Windows中的位置示例C:\Users\<UserName>\.wslconfig\\wsl.localhost\Ubuntu\etc\wsl.conf(以Ubuntu为例)

        目前,所有 .wslconfig 设置仅适用于 WSL 2 分发版。

        修改示例。

        1. 调整内存和CPU分配

        修改 .wslconfig 文件(位于 Windows 用户目录下):

        [wsl2]
        memory=4GB      # 限制内存使用
        processors=2    # 限制 CPU 核心数

        2. 启用自动挂载

        修改 /etc/wsl.conf 文件,启用自动挂载选项:

        [automount]
        enabled = true
        root = /mnt/
        options = "umask=022"

        (八)使用 systemd

        WSL现在支持 systemd,它是一种 init 系统和服务管理器,包括按需启动守护程序、装载和自动装载点维护、快照支持以及使用 Linux 控制组进行进程跟踪等功能。许多流行的 Linux 发行版,例如 Ubuntu、Debian 等都在使用。 

        重启 Linux 分发版后,用下面命令检验systemd 运行状态:

        systemctl status

        用下面命令,显示与 Linux 分发版关联的任何服务的状态:

        systemctl list-unit-files --type=service

        相关文章:

      • 深入解析Java四大引用类型:从强引用到虚引用的内存管理艺术
      • 软件设计师E-R模型考点分析——求三连
      • STM32实战指南:DHT11温湿度传感器驱动开发与避坑指南
      • 关于ECMAScript的相关知识点!
      • 认识常规贴片电阻
      • 数学实验(方程和微分方程求解)
      • 11.4/Q1,GBD数据库最新文章解读
      • 第二十一次博客打卡
      • Prompt、Agent、MCP关系
      • Mergekit——高频合并算法 TIES解析
      • 嵌入式(C语言篇)Day10
      • DAPO:用于指令微调的直接偏好优化解读
      • 让数据驱动增长更简单! ClkLog用户行为分析系统正式入驻GitCode
      • 人工智能重塑医疗健康:从辅助诊断到个性化治疗的全方位变革
      • 物联网安全技术的最新进展与挑战
      • 深入理解仿函数(Functors):从概念到实践
      • java.io.IOException: Broken pipe \ 你的主机中的软件中止了一个已建立的连接
      • 【Python训练营打卡】day30 @浙大疏锦行
      • HarmonyOS:使用PickerController将编辑后的图片替换原图
      • GloVe 模型讲解与实战
      • 技术派|台军首次试射“海马斯”火箭炮,如何压制这种武器?
      • 鸿蒙电脑正式发布,国产操作系统在个人电脑领域实现重要突破
      • 中国证监会副主席李明:目前A股估值水平仍处于相对低位
      • 上海这场有温度的“人才集市”,为更多人才搭建“暖心桥”
      • 小雨伞保险经纪母公司手回集团通过港交所聆讯
      • 贵州仁怀通报“正新鸡排鸡腿里全是蛆”:已对同类产品封存送检