当前位置: 首页 > 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

        相关文章:

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

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

        服务器上的Nano 编辑器进行git合并

        使用git pull拉取后&#xff0c;出现如下部分&#xff1a; GNU nano 2.9.3 /data/zhouy24Files/embody/DSLab-embodied-intelligence/.git/MERGE_MSG Merge branch …...

        【idea 报错:java: 非法字符: ‘\ufeff‘】

        执行main方法报错&#xff1a;: ‘\ufeff’?package cn.com 截图如下&#xff1a;任何一个mian都不能执行&#xff0c;都报这个 写出来希望大家都能快速解决这种少见的问题&#xff0c;还不好弄。 我是参考这篇文章就好了&#xff1a;idea 报错&#xff1a;java: 非法字符: …...

        BM25(Best Matching 25)介绍与使用

        BM25&#xff08;Best Matching 25&#xff09;是一种基于概率检索框架的改进算法&#xff0c;主要用于信息检索中的相关性评分。它通过引入词频饱和函数、文档长度归一化等机制&#xff0c;克服了传统TF-IDF算法的局限性。 一、BM25的核心原理 1. 改进TF-IDF的三大维度 词频…...

        .NET 函数:检测 SQL 注入风险

        以下是一个用 C# 编写的 .NET 函数&#xff0c;用于检测用户输入是否存在潜在的 SQL 注入风险&#xff1a; using System; using System.Text.RegularExpressions;public class SqlInjectionChecker {// 常见 SQL 注入关键词和模式private static readonly string[] SqlKeywor…...

        远程数据采集智能网关支持下的雨洪资源分布式监测网络搭建实践

        一、项目背景 随着城市化进程的加快以及气候变化的影响&#xff0c;雨洪水管理成为了城市基础设施建设中的重要课题。传统的雨洪水监测手段主要依赖人工巡查和固定站点监测&#xff0c;存在数据获取不及时、不全面&#xff0c;以及在恶劣天气条件下人员安全隐患等诸多问题。为…...

        LinuxYUM下载笔记

        在基于RPM的Linux发行版&#xff08;如CentOS、RHEL、Fedora等&#xff09;中&#xff0c;YUM&#xff08;Yellowdog Updater Modified&#xff09;是默认的包管理工具&#xff0c;用于简化软件的安装、更新和依赖管理。以下是YUM的使用指南&#xff1a; 一、检查YUM是否安装 …...

        研读论文《Attention Is All You Need》(7)

        原文 14 3.2 Attention An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight…...

        使用excel 工具做数据清洗

        数据分析中有个很重要的预处理步骤&#xff0c;叫做「数据清洗」。 简单来说就是把数据中「脏脏的 」部分 —— 缺失的、重复的、错误的等等&#xff0c;给它清除掉&#xff0c;剩下「干净的」数据。 1、缺失数据 如果某处缺了一两个数据&#xff0c;最简单的方法就是 —— …...

        LeetCode 217.存在重复元素

        目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路一详解&#xff08;排序&#xff09;&#xff1a; 思路二详解&#xff08;Set&#xff09;&#xff1a; 思路三详解&#xff08;Map&#xff09;&#xff1a; 代码&#xff1a; …...

        Flask 与 Django 服务器部署

        一、引言 在 Web 开发领域&#xff0c;Flask 和 Django 是 Python 生态中最受欢迎的两个 Web 框架。Flask 以其轻量级和灵活性著称&#xff0c;适合快速开发小型应用和 API&#xff1b;而 Django 则提供了全面的功能套件&#xff0c;包括 ORM、管理界面和认证系统&#xff0c;…...

        Python:操作Excel按行写入

        Python按行写入Excel数据,5种实用方法大揭秘! 在日常的数据处理和分析工作中,我们经常需要将数据写入到Excel文件中。Python作为一门强大的编程语言,提供了多种库和方法来实现将数据按行写入Excel文件的功能。本文将详细介绍5种常见的Python按行写入Excel数据的方法,并附上…...

        架构演变 -单体到云原生

        软件架构的演变是随着技术发展、业务需求和硬件条件的变化而不断迭代的过程。以下是从单体架构到现代云原生架构的典型演变路径及关键阶段特点&#xff1a; 一、单体架构&#xff08;Monolithic Architecture&#xff09; 时间阶段&#xff1a;2000 年代前 特点&#xff1a; …...

        VSCode 安装教程

        访问官网 Visual Studio Code 官网 打开下载的exe文件 选一个安装位置 创建桌面快捷方式 (D) 在桌面生成 VSCode 的快捷图标&#xff0c;方便快速启动程序。 将 “通过 Code 打开” 操作添加到 Windows 资源管理器文件上下文菜单 右键点击文件时&#xff0c;菜单中会新增 “通…...

        开源表单设计器FcDesigner配置多语言教程

        开源低代码表单设计器FcDesigner中提供了强大的多语言支持功能&#xff0c;允许开发者在表单中实现一键式语言切换。在现代业务应用中&#xff0c;多语言支持是一项基本需求&#xff0c;尤其在国际化产品中。 源码地址: Github | Gitee | 文档 | 在线演示 设计器中配置多语言…...

        ONIE安装NOS操作说明

        ONIE 安装 NOS 操作说明 1. ONIE 简介 ONIE&#xff08;Open Network Install Environment&#xff09;是开放网络设备的出厂预装环境&#xff0c;类似于服务器的PXE/BIOS&#xff0c;主要用于自动或手动安装网络操作系统&#xff08;NOS&#xff0c;如SONiC、Cumulus、FBOSS等…...

        fastadmin 数据导出,设置excel行高和限制图片大小

        fastadmin默认导出图片全部都再一块&#xff0c;而且不在单元格里 话不多说&#xff0c;上代码 修改文件的路径&#xff1a; /public/assets/js/require-table.js exportOptions: {fileName: export_ Moment().format("YYYY-MM-DD"),preventInjection: false,mso…...

        仿腾讯会议——音频服务器部分

        1、中介者定义处理音频帧函数 2、 中介者实现处理音频帧函数 3、绑定函数映射 4、服务器定义音频处理函数 5、 服务器实现音频处理函数...

        国产化替代对金融行业有哪些影响?如何应对?

        在全球产业链重构与科技自主创新的时代背景下&#xff0c;国产化替代已从技术领域的局部探索&#xff0c;升级为金融行业应对复杂外部环境、夯实发展根基的战略选择。作为国家核心竞争力的重要组成部分&#xff0c;金融行业长期依赖国外技术设备的传统模式正面临安全性、可控性…...

        包装类(1)

        1.包装类的分类 1.针对八种基本数据类型相应的引用类型--包装类 2.有了类的特点,就可以调用类中的方法. 基本数据类型. 包装类 例: 手动装箱 int->Integer 手动执箱 Integer->int 注&#xff1a;jdk5后就可以自动装箱和拆箱 2.包装类和基本数据的转换 (1)jdk5前的…...

        java中如何优雅处理多租户系统的查询?

        多租户系统通常是指一个应用服务多个客户&#xff08;租户&#xff09;&#xff0c;每个租户的数据需要隔离&#xff0c;确保数据安全和隐私。处理这样的系统需要考虑数据隔离、查询效率、代码的可维护性等方面。 首先&#xff0c;我应该明确多租户的实现方式。常见的多租户数据…...

        Ubuntu服务器部署多语言项目(Node.js/Python)方式实践

        Ubuntu服务器部署多语言项目&#xff08;Node.js/Python&#xff09;方式实践 服务器脚本运行方式命令行直接执行nohup后台执行进程 Screen概述安装基本操作命令启动 Screen退出当前会话&#xff08;不终止进程&#xff09;查看所有会话重连会话关闭会话 常用快捷键典型使用场景…...

        【MySQL】基础操作

        MySQL(二)基础操作 一、数据库操作 1.创建库 2.查看库 3.选中库 4.删除库 二、表操作 1.创建表 1.1[comment 注释]&#xff1a; 1.2,...&#xff1a; 2.查看表 2.1查看所有表 2.2查看表结构 3.删除表 三、记录操作 1.插入记录 1.1全列插入 1.2指定列插入 1.3…...

        在 Java MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 的解决方法

        在 MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 错误&#xff0c;通常是因为当字段值为 null 时&#xff0c;MyBatis 无法正确推断其 JDBC 类型&#xff0c;导致向数据库传递 null 值时类型不匹配。以下是原因分析和解决方案&#xff1a; 问题原因 未指定 j…...

        课题推荐——扩展卡尔曼滤波(EKF)估计pmsm的位置误差

        扩展卡尔曼滤波&#xff08;EKF&#xff09;是一种常用于非线性系统状态估计的方法&#xff0c;特别适用于永磁同步电机&#xff08;PMSM&#xff09;的位置和速度估计。EKF可以实时估计电机的转子位置误差&#xff08;与实际转子位置的偏差&#xff09;&#xff0c;从而提高控…...

        elasticsearch之记录es7.17升级8.17 springboot2.7.0 程序改造坑

        es7.17升级8.x问题目录 一、硬件安装1-1. centos7 服务器上&#xff0c;删除elasticsearch7.17&#xff0c;安装es8.17 二、 程序改造2-1. Java API Client 8.17.52-2. 依赖引入2-3. 配置文件2-4. Java 配置类 三、根据 Elasticsearch 集群信息&#xff08;版本 8.17.2&#xf…...

        SpringBoot+ELK 搭建日志监控平台

        ELK 简介 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;是一个目前主流的开源日志监控平台。由三个主要组件组成的&#xff1a; Elasticsearch&#xff1a; 是一个开源的分布式搜索和分析引擎&#xff0c;可以用于全文检索、结构化检索和分析&#xff0c;它构建…...

        家庭数字生态构建实战:基于飞牛fnOS的智能家居数据中台搭建全流程解析

        文章目录 前言1. VMware安装飞牛云&#xff08;fnOS&#xff09;1.1 打开VMware创建虚拟机1.3 初始化系统 2. 安装Cpolar工具3. 配置远程访问地址4. 远程访问飞牛云NAS5. 固定远程访问地址 前言 在数字生活时代&#xff0c;数据管理正成为每个家庭的刚需。今天要向大家重点推荐…...

        博客系统功能测试

        博客系统网址&#xff1a;http://8.137.19.140:9090/blog_list.html 主要测试内容 功能测试、界面测试、性能测试、易用性测试、安全测试、兼容性测试、弱网测试、安装卸载测试、压力测试… 测试方法及目的 利用selenium和python编写测试脚本&#xff0c;对博客系统进行的相关…...

        抽奖相关功能测试思路

        1. 抽奖系统功能测试用例设计&#xff08;登录 每日3次 中奖40% 道具兑换码&#xff09; ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …...

        paddle ocr本地化部署进行文字识别

        一、Paddle 简介 1. 基本概念 Paddle&#xff08;全称 PaddlePaddle&#xff0c;飞桨&#xff09;是百度开发的 开源深度学习平台&#xff0c;也是中国首个自主研发、功能丰富、技术领先的工业级深度学习平台。它覆盖了深度学习从数据准备、模型训练、模型部署到预测的全流程…...

        在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!

        在CentOS系统上部署GitLabRunner并配置CICD自动项目集成 在CentOS系统上部署GitLab Runner并配置CI/CD自动项目集成GitLab CI/CD是一个强大的持续集成和持续部署工具&#xff0c;能够显著提高开发团队的效率。 本文将详细介绍如何在CentOS系统上部署GitLab Runner&#xff0c…...

        python学习day2(未写完,明天继续补充)

        今天主要学习了变量的数据类型&#xff0c;以及如何使用格式化符号进行输出。 一、认识数据类型 在python里为了应对不同的业务需求&#xff0c;也把数据分为不同的类型。 代码如下&#xff1a; """ 1、按类型将不同的变量存储在不同的类型数据 2、验证这些…...

        深度强化学习框架DI-engine

        深度强化学习框架DI-engine 一、DI-engine概述&#xff1a;决策智能的通用引擎 DI-engine是由OpenDILab开源的决策智能引擎&#xff0c;基于PyTorch和JAX构建&#xff0c;旨在为强化学习&#xff08;RL&#xff09;、模仿学习&#xff08;IL&#xff09;、离线学习等场景提供…...

        gitlab迁移

        需求&#xff1a;需要将A服务器上的 gitlab 迁移到B服务器上&#xff0c;均使用docker 部署 一、备份数据 进入到A服务器的 gitlab 的容器中&#xff0c;运行gitlab-rake gitlab:backup:create 该命令会在 /var/opt/gitlab/backups/ 目录下创建一个xxx_gitlab_backup.tar 压缩…...

        UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

        33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义&#xff0c;每个字符由 16bit 数据表示。对于用户界面&#xff0c;strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化&#xff0c;每个 string 通过一个唯一标识符来识别&#xff0c;而每一个标识…...

        如何确保低空经济中的数据安全?

        低空经济涉及大量敏感数据&#xff0c;如无人机的飞行轨迹、拍摄的地理图像和视频等。为确保这些数据的安全&#xff0c;可从以下几方面着手&#xff1a; 加强数据加密 传输加密 &#xff1a;采用 SSL/TLS 等加密协议&#xff0c;对数据在传输过程中进行加密&#xff0c;防止…...

        在linux平台下利用mingw64编译windows程序

        背景 笔者平时都是基于linux平台开发C代码&#xff0c;已经熟悉使用CMake这一套工具上一次开发windows应用程序还要追溯到10多年前&#xff0c;彼时还是使用微软的visual studio这个IDE&#xff0c;这个IDE确实也很强大&#xff0c;但也确实很笨重&#xff0c;当时用起来也很不…...

        虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?

        虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡&#xff1f; code review! 参考笔记&#xff1a; 1.虚幻引擎5-Unreal Engine笔记之GameMode、关卡&#xff08;Level&#xff09; 和 关卡蓝图&#xff08;Level Blueprint&#xff09;的关系 2.虚幻引擎…...

        [IMX] 04.定时器 - Timer

        目录 1.周期中断定时器 - EPIT 1.1.工作模式 1.2.配置寄存器 - EPIT_CR 1.3.状态寄存器 - EPIT_SR 1.4.加载寄存器 - EPIT_LR 1.5.比较寄存器 - EPIT_CMPR 1.6.计数寄存器 - EPIT_CNR 2.通用定时器 - GPT 2.1. 时钟源 2.2.模块结构 2.3.工作模式 2.4.配置寄存器 - …...

        前端 vue + element-ui 框架从 0 - 1 搭建

        1. 安装node 地址&#xff1a; Node.js — 在任何地方运行 JavaScript 2. 安装 vue 2.1 执行安装命令 npm uninstall -g vue-cli npm install -g vue/cli 安装最新的vue3版本 2.2 使用vue 脚手架 搭建项目 vue create project_name 2.2.1 注意 项目名称不能包…...

        【IDEA】删除/替换文件中所有包含某个字符串的行

        目录 前言 正则表达式 示例 使用方法 前言 在日常开发中&#xff0c;频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式&#xff0c;避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

        算法刷题(Java与Python)2.数组、列表

        目录 Java的数组 数组介绍 注意事项 Python的列表 列表介绍 Python 的列表和 Java 的 ArrayList 一样吗&#xff1f; 例题1 代码分析 Java代码 Python代码 对比代码 例题2 代码分析 Java代码 Python代码 对比代码 例题三 Java代码 Python代码 代码对比 Jav…...

        uniapp打包H5,输入网址空白情况

        由于客户预算有限&#xff0c;最近写了两个uniapp打包成H5的案例&#xff0c;总结下面注意事项 1. 发行–网站-PCWeb或手机H5按钮&#xff0c;输入名称&#xff0c;网址 点击【发行】&#xff0c;生成文件 把这个给后端&#xff0c;就可以了 为什么空白呢 最重要一点&#xf…...

        JavaScript 中使用 Elasticsearch 的正确方式,第一部分

        作者&#xff1a;来自 Elastic Jeffrey Rengifo 讲解如何用 JavaScript 创建一个可用于生产环境的 Elasticsearch 后端。 想获得 Elastic 认证&#xff1f;看看下一期 Elasticsearch 工程师培训什么时候开始吧&#xff01; Elasticsearch 拥有大量新功能&#xff0c;能帮助你…...

        每日一道leetcode(增加版)

        901. 股票价格跨度 - 力扣&#xff08;LeetCode&#xff09; 题目 设计一个算法收集某些股票的每日报价&#xff0c;并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数&#xff08;从今天开始往回数&#xff0c;包括今…...

        排序复习/下(C语言版)

        目录 1.快速排序&#xff08;hoare法&#xff09; 单趟&#xff1a; 整体&#xff1a; 代码优化&#xff1a; ​编辑三数取中代码&#xff1a; 小区间优化代码&#xff1a; hoare法疑问解答&#xff1a; 2.快速排序&#xff08;挖坑法&#xff09; 3.快速排序&#x…...

        Vue百日学习计划Day33-35天详细计划-Gemini版

        总目标: 在 Day 33-35 理解 Vue 组件从创建到销毁的完整生命周期&#xff0c;熟练掌握 Composition API 中主要的生命周期钩子&#xff0c;并知道在不同阶段执行哪些操作。 所需资源: Vue 3 官方文档 (生命周期钩子): https://cn.vuejs.org/guide/essentials/lifecycle.html你…...

        Apidog MCP服务器,连接API规范和AI编码助手的桥梁

        #作者&#xff1a;曹付江 文章目录 1.了解 MCP2.什么是 Apidog MCP 服务器&#xff1f;3.Apidog MCP 服务器如何工作4.利用人工智能改变开发工作流程5.设置 Apidog MCP 服务器&#xff1a; 分步指南5.高级功能和提示5.1 使用 OpenAPI 规范5.2.多个项目配置5.3.安全最佳实践5.4…...

        统计客户端使用情况,使用es存储数据,实现去重以及计数

        这篇文件的重点在tshark、filebeat、和logstash。 需求&#xff1a;统计客户使用的客户端版本 实现工具&#xff1a;tshark 1.10.14&#xff0c;filebeat 8.17.0&#xff0c;logstash 8.17.0&#xff0c;elasticsearch 8.17.0&#xff0c;kibana 8.17.0 总体设计&#xff1a…...