【Linux】WSL:Win运行Linux
WSL2(Windows Subsystem for Linux 2) 是 Microsoft 开发的技术,可在 Windows 系统上运行完整的 Linux 发行版环境。以下是详细的配置教程。
安装与配置
启用 WSL 功能
-
打开“开始”菜单,搜索 PowerShell,以 管理员身份运行。
-
在 PowerShell 中输入以下命令并回车:
wsl --install该命令会自动启用 WSL 并安装 Ubuntu 作为默认 Linux 发行版。
-
安装完成后,系统会提示重启计算机。请重启。
配置 Ubuntu
-
首次启动:启动 WSL 时系统会提示您创建一个默认的 UNIX 用户账户。
-
创建账户:
- 输入一个新的用户名(可自定义)。
- 为该用户设置密码。
-
更新系统: 在 Linux 终端中运行以下命令更新软件包:
sudo apt update && sudo apt upgrade -y
下面是简短的 Windows Subsystem for Linux (WSL) 发行版管理操作指南:
启动 WSL 发行版
-
启动命令行:打开 PowerShell 或 命令提示符 (cmd)。
-
启动 WSL:输入以下命令:
wsl -
启动特定发行版:输入:
wsl -d <发行版名称>例如,要启动 Ubuntu:
wsl -d Ubuntu
下载 WSL 发行版
- 打开 Microsoft Store:在搜索栏中输入 “Microsoft Store” 并打开。
- 搜索 WSL 发行版:在商店中搜索你想要的发行版(如 Ubuntu、Debian 等)。
- 安装:点击“获取”或“安装”按钮,等待下载和安装完成。
移除 WSL 发行版
-
打开 PowerShell:以管理员身份运行 PowerShell。
-
列出已安装的发行版:
wsl --list --verbose -
卸载指定发行版:
wsl --unregister <发行版名称>例如,卸载 Ubuntu:
wsl --unregister Ubuntu
其他常用命令
-
设置默认发行版:
wsl --setdefault <发行版名称> -
更新 WSL:
wsl --update -
检查 WSL 版本:
wsl --list --verbose
开机自启并后台运行
配置任务计划程序
-
打开任务计划程序:
- 按
Win + S,搜索 任务计划程序 并打开。
- 按
-
创建任务:
- 点击右侧 创建任务。
- 在 常规 选项卡中:
- 名称:
WSL_Background_Start(可自定义)。 - 勾选 使用最高权限运行。
- 配置为:选择当前 Windows 版本。
- 名称:
-
设置触发器:
- 转到 触发器 选项卡,点击 新建。
- 在 开始任务 下拉框中选择 系统启动时。
- 点击 确定。
-
设置操作:
-
转到 操作 选项卡,点击 新建。
-
在 启动程序 中输入:
wsl.exe -
(可选)添加参数,例如运行指定的命令:
-d Ubuntu --exec /bin/bash
-
-
保存任务:
- 点击 确定 完成任务创建。
验证任务启动
-
重启计算机。
-
登录后运行以下命令确认 WSL 是否已启动:
wsl --list --running
与主机共享 IP
默认情况下,Windows 防火墙会允许来自本地计算机(即从 Windows 主机到 WSL2,或者反向通信)的流量。这意味着,即使没有进行端口转发或特别配置,主机与 WSL2 之间的内网通信也是允许的。在启用 networkingMode=mirrored 的情况下,WSL2 会和主机共享相同的网络配置。这样,WSL2 和主机之间的网络通信变得更为直接,因为它们使用相同的物理网络适配器。
- 在这种模式下,WSL2 会通过主机的物理网络接口与其他设备通信,而无需单独的虚拟交换机或端口转发。
- 主机和 WSL2 共享 IP 地址段,可以通过同一 IP 地址进行直接通信。
编辑主机上的 .wslconfig 配置文件
-
打开文件资源管理器:
- 按
Win + E打开文件资源管理器。
- 按
-
进入 WSL 配置目录:
-
导航到主机的 WSL 配置文件目录:
C:\Users\<YourUserName>\.wslconfig -
如果
.wslconfig文件不存在,可以手动创建该文件。
-
-
编辑
.wslconfig文件:- 使用文本编辑器(如 Notepad)打开
.wslconfig文件。 - 如果该文件不存在,您可以新建一个。
- 使用文本编辑器(如 Notepad)打开
-
添加或修改配置: 在
.wslconfig文件中,添加以下配置来启用镜像模式的网络设置:[wsl2] networkingMode=mirrorednetworkingMode=mirrored:这个设置将会使 WSL2 的网络配置与主机的网络配置进行镜像,即 WSL2 会使用主机的网络接口配置。
-
保存并关闭文件。
重启 WSL2
-
关闭所有正在运行的 WSL2 实例:
-
打开 PowerShell(以管理员身份)并运行以下命令:
wsl --shutdown
-
-
重新启动 WSL2:
-
在 WSL2 中重新启动,或者通过 Windows Terminal 启动:
wsl
-
验证网络配置
-
打开 WSL2 终端,执行以下命令来验证网络设置:
ip addr -
检查输出,确认 WSL2 使用了主机的网络接口,并且
eth0或其他网络接口的配置已镜像主机的 IP 地址。
运行 WSL2 中的服务
-
启动一个 HTTP 服务(以
8080端口为例):python3 -m http.server 8080 --bind 0.0.0.0这样,WSL2 中的服务会在
8080端口上监听,并且可以接受来自任何设备的连接。
配置 Windows 防火墙
为了允许局域网中的其他设备访问 WSL2 中的服务,您需要确保 Windows 防火墙允许外部设备访问相关端口。例如,允许访问 8080 端口:
-
打开 PowerShell 以管理员身份运行:
New-NetFirewallRule -DisplayName "Allow WSL2 HTTP 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow这会允许来自局域网的设备访问 Windows 主机的
8080端口,进而访问 WSL2 中的服务。
查找主机的 IP 地址
由于 WSL2 和主机共享相同的网络接口,您可以通过主机的 IP 地址访问 WSL2 中的服务。要获取 Windows 主机的 IP 地址,可以执行以下步骤:
-
打开 PowerShell 或命令提示符,运行以下命令:
ipconfig -
查找适配器列表中的 IPv4 地址,这是您的主机 IP 地址。通常,它位于 “以太网适配器” 或 “无线局域网适配器” 部分。
从局域网设备访问服务
在局域网中的其他设备上,使用 Windows 主机的 IP 地址和暴露的端口(例如 8080)来访问 WSL2 中的服务。例如:
http://<Windows主机的IP>:8080
这将使您可以通过局域网中的其他设备访问 WSL2 中运行的 Web 服务。
C++ 开发环境部署
-
更新系统包:
sudo apt update && sudo apt upgrade -y -
安装
gcc、g++和make:sudo apt install -y build-essential -
安装调试工具
gdb和代码格式化工具clang-format(可选):sudo apt install -y gdb clang-format
Python 开发环境部署
-
下载 Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh -
安装 Miniconda:
bash ~/miniconda.sh- 选择默认路径(通常是
~/miniconda3)。
- 选择默认路径(通常是
-
激活 Miniconda 环境:
source ~/miniconda3/bin/activate -
初始化 Shell 支持:
conda init -
创建和管理虚拟环境:
conda create -n dev_env python=3.9 -y conda activate dev_env -
安装常用库:
conda install numpy pandas matplotlib
Docker 开发环境部署
-
更新包并安装依赖:
sudo apt-get update sudo apt-get install ca-certificates curl -
添加 Docker 的 GPG 密钥和官方源:
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update -
安装 Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -
配置非 root 用户使用 Docker:
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker -
验证 Docker 安装:
docker run hello-world
NodeJS 开发环境部署
-
安装 NVM ,并重新加载 shell 配置文件
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash source ~/.bashrc -
验证 NVM 安装
command -v nvm -
安装 Node.js LTS 版本
nvm install --lts -
使用安装的 Node.js 版本
node -v npm -v -
设置默认版本
nvm use --lts nvm alias default lts/*
相关文章:
【Linux】WSL:Win运行Linux
WSL2(Windows Subsystem for Linux 2) 是 Microsoft 开发的技术,可在 Windows 系统上运行完整的 Linux 发行版环境。以下是详细的配置教程。 安装与配置 启用 WSL 功能 打开“开始”菜单,搜索 PowerShell,以 管理员身…...
js循环导出多个word表格文档
文章目录 js循环导出多个word表格文档一、文档模板编辑二、安装依赖三、创建导出工具类exportWord.js四、调用五、效果图js循环导出多个word表格文档 结果案例: 一、文档模板编辑 二、安装依赖 // 实现word下载的主要依赖 npm install docxtemplater pizzip --save// 文件操…...
Spring Boot 日志 配置 SLF4J 和 Logback
前言 在开发 Java 应用时,日志记录是不可或缺的一部分。日志可以记录应用的运行状态、错误信息和调试信息,帮助开发者快速定位和解决问题。Spring Boot 项目默认集成了 SLF4J 和 Logback,使得日志配置变得简单而灵活。本文将详细介绍如何在 …...
企业级包管理器:专栏概述 (1)
在当今的前端开发领域,包管理器已经成为了每一位开发者不可或缺的工具。它们就像一个个神奇的工具箱,里面装满了各种各样的工具(即软件包),帮助我们快速搭建项目、实现功能,极大地提高了开发效率。接下来&a…...
【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包
STM32-MBD(1)安装 STM32 硬件支持包 【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包 1. 必须的软硬件条件2. 嵌入式硬件支持包2.1 Embedded Coder2.2 嵌入式硬件支持包2.3 Embedded Coder Support Package for STMicroelec…...
书后习题答案:《Python程序设计基础(第2版)》,电子工业出版社,2020.01
【持续更新】 第3章 from math import *x1 float(input("请输入x1: ")) # print(x1) x2 float(input("请输入x2: ")) y1 float(input("请输入y1: ")) y2 float(input("请输入y2: "))dis sqrt(pow(x1 - x2, 2) pow(y1 - y2, 2))…...
Qt之第三方库QXlsx使用(三)
Qt开发 系列文章 - QXlsx(三) 目录 前言 一、Qt开源库 二、QXlsx 1.QXlsx介绍 2.QXlsx下载 3.QXlsx移植 4.修改项目文件.pro 三、使用技巧 1.添加头文件 2.写入数据 3.读出数据 总结 前言 Qt第三方控件库是指非Qt官方提供的、用于扩展Qt应用…...
Python通过global实现多文件共享全局参数,方法
Python通过global实现多文件共享全局参数 global关键字,全局变量 基础用法 这种用法,不能在其他的py文件中使用, x 6 def func():global x #定义外部的xx 10 func() print (x) #输出10共享参数 新建glo.py文件(全局变量文件)…...
DevOps工程技术价值流:项目构建工具的选择与实践
在快速迭代的软件工程领域,项目构建工具扮演着举足轻重的角色。它们不仅自动化了构建、测试、打包和部署等关键环节,还显著提升了开发效率和质量。本文将深入探讨后端常用的Maven和Gradle,以及前端不可或缺的NPM,并重点对比Maven与…...
【数据库】复习
数据库期中复习——概念填空_在修改数据结构时,为了保证数据库的数据独立性-CSDN博客 选择题 关系数据理论-数据库习题_数据库关系理论考题-CSDN博客 关系、关系模式、关系模型区别和联系 关系:元组的集合,一张表 关系模式:关系的描述 R(…...
CorsConfig前后端数据跨域连接,IDEA右侧Maven窗口消失
前后端数据跨域连接(分页查询并显示) 一、后端添加分页查询 分页查询核心就是:每页需要显示多少条记录(pageSize),当前查看第几页(pageNum);MySQL提供了分页函数limit m,n select * from table limit (pageNum-1)*pageSize, pa…...
Python微博动态爬虫
本文是刘金路的《语言数据获取与分析基础》第十章的扩展,详细解释了如何利用Python进行微博爬虫,爬虫内容包括微博指定帖子的一级评论、评论时间、用户名、id、地区、点赞数。 整个过程十分明了,就是用户利用代码模拟Ajax请求,发…...
【设计模式】单例模式 在java中的应用
文章目录 引言什么是单例模式单例模式的应用场景单例模式的优缺点优点缺点 单例模式的基本实现饿汉式单例模式懒汉式单例模式双重检查锁定静态内部类枚举单例 单例模式的线程安全问题多线程环境下的单例模式线程安全的实现方式1. **懒汉式单例模式(线程不安全&#…...
burp suite 8
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
为什么在Java中super与this不能共存于子类构造器中,其中this起什么作用
在 Java 中,super 和 this 是两个关键字,它们在子类的构造器中有特定的用途和限制。 super 关键字: super 用于从父类(超类)访问成员(属性和方法)或者调用父类的构造方法。 在子类的构造器中&…...
Hypothesis:高效的 Python 测试工具
简介:Hypothesis 是一个强大的 Python 测试库,旨在自动生成各种测试案例,以帮助开发者发现潜在的边界问题和隐藏的错误。通过对输入数据进行智能化的探索,Hypothesis 能够为测试提供更全面的覆盖,避免遗漏一些极端或不…...
Terminus Calculator 计算原理分享
在《使命召唤:黑色行动 6》僵尸模式中,Terminus 关卡的研究办公室里有一个复杂的数学谜题需要解决。为了获得多相共振器,玩家需要计算出三个数字并输入电脑。虽然可以花费 5000 精华来获得答案,但使用 Terminus Calculator 可以更…...
Wwise 使用MIDI文件、采样音频
第一种:当采样音频只有一个文件的时候 1.拖入MIDI文件到Interactive Music Hierarchy层级 2.拖入采样音频到Actor-Mixer Hierarchy层级 3.勾选MIDI显示出面板,设置Root Note与采样音频音高相同,这里是C#5 4.播放测试,成功&…...
在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案
在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案 背景概述解决方案脚本实现脚本说明使用指南注意事项在CentOS操作系统环境中,若需并发上传特定目录下的.wav文件至HTTP服务器,而系统未安装GNU parallel工具,我们可通过其他方法实现此需求。本文将介绍一种利用Sh…...
【RocketMQ 源码分析(一)】设计理念与源码阅读技巧
RocketMQ 的设计理念与源码阅读技巧 一、设计理念二、源码设计三、源码阅读技巧 一直想仔细仔细看看这个 RocketMQ 的源码,学学它的设计思想和编码风格,没准在以后自己在设计和编码的时候有思考的方向。这是专栏的第一篇 —— 介绍下 RocketMQ 的一些设计…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
