开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)
一些 Linux 基本概念
个人理解,并且为了便于理解,可能会存在一些问题,如果有根本上的错误希望大家及时指出发行版
WSL 的系统是基于特定发行版的特定版本的 Linux
发行版 = 有固定组织维护的、开箱就能用的 Linux
- 发行版由固定的团队、社区进行维护,出了问题有一定的支持
- 发行版的内容 = Linux内核 + 指定的一些实用软件组合(如软件包管理软件、可视化界面等)
- 不同发行版的授权协议有所不同,有的商用也是免费的,有的商用要付费
类比:比如不同厂商的音乐播放器,比如 QQ 音乐、网易云音乐、酷狗音乐等。本质都是音乐文件播放器,但在基础功能上定制了界面、曲库等功能
常见的软件发行版
- fedora系:fedora、centos、RHEL、open SUSE、oracle linux …
- debian系:debian、ubuntu
以上两大派系的常见差别
参考链接:https://fedoraproject.org/wiki/Comparison_to_other_distributions
- 系统指令:通用(都是基于 Linux 内核的),比如:cp、mv、rm、sudo、wget等。
- 一些与【实用软件组合】相关的指令,因为选用的软件不同,则支持的相关指令就不太相同,比如:
| fadora 系 | debian 系 | |
|---|---|---|
| 安装包格式 | rpm | deb |
| 软件管理 | 在线安装:yum、dnf 本地管理:rpm | 在线安装:apt-get 本地管理:dpkg |
选择建议:建议以实际项目使用的发型版本,确定自己需要的版本,最好是使用相同发行商的。例如:
- 后端、运维:公司使用 cenots --> 自己使用 fedora 系的发行版,最好也用 centos
- 学术、机器学习:项目在 ubuntu 上部署 --> 使用 debian 系的发行版,最好也用 ubuntu
版本
发行版本
就是 LInux 发行版的版本,比如 Ubuntu 22.04、CentOS 7.9 等不同版本,系统内核版本、附带的软件版本可能不同
类比:比如 Windows 的不同版本,如 Winsdows XP、Windows 7、Windows 10,整体界面、操作、对软件的兼容性都有不同
- 不同系统内核版本,运行程序的效率可能有不同,也可能会有软件在不同内核上运行出问题的情况
- 附带软件不同,一般来说新版软件会修复 bug,并提供新的功能
对于 Linux 【发行版】来说,有大版本和小版本,以下以 CentOS 举例
- 大版本 = 版本数字整数部分,比如 centos 7.6 中的 6
- 小版本 = 版本数字小数部分,比如 Ubuntu 22.04 中的 04
- 这其中有一些版本,作为长期支持版本(进行介绍时会有 LTS 相关文字),官方会提供长久的支持
选择原则:建议大版本不变,小版本选最新的 LTS 版本。例如:
- 项目上说用的是 centos7(或者 centos 7.6),则自己可以用 centos 7.9
- 项目上说用的时 Ubuntu 24,那自己可以装 ubuntu 24.04 LTS
安装包版本
使用 WSL 进行安装不需要选这个版本参考资料:https://blog.csdn.net/ZZQHELLO2018/article/details/104027963
以 CentOS 为例:
| CentOS | 标准安装盘,一般下载这个就可以了 里面包含大量的常用软件,大部分情况下安装时无需再在线下载 |
|---|---|
| Minimal | 精简版本,只包含核心组件,体积才仅为几百 MB 如果想要安装其他软件,则这个版本中不包含,需要联网才能安装 |
| Everything | 顾名思义,包含了所有软件组件,当然体积也是最大的。 对完整版安装盘的软件进行补充,集成所有软件 |
| NetInstall | 网络安装镜像 |
| LiveGNOME | GNOME桌面版 |
| LiveKDE | KDE桌面版 |
| LiveCD | 光盘上运行的系统,类拟于 WINPE |
安装 WSL
以下使用官方的指令进行安装注意:WSL 官方的安装方式要求能访问 github,最好是找个梯子,否则接下来的安装步骤非常难受
-
打开 powershell (管理员)
在 windows 图标右键,点击【终端(管理员)】

之后的命令都在打开的命令行中输入 -
(非必须)查看指令帮助
wsl --help
-
查看支持的【发行版】
wsl --list --online
-
选择相关版本进行安装
我项目使用的是 centos,应该选择 fedora 系的系统,这里选择 oracle linux
项目上使用的版本是 centos 8,4,这里选择相同大版本的 oracle linux 8.7wsl --install OracleLinux_8_7
输入
logout即可退出 WSL,返回 Windows 命令行

- 安装时会提示设置用户名、密码,之后登录 WSL 时,默认都会使用这个用户
- 执行指令的过程中,如果提示“无法解析服务器名称或地址”,那就说明无法用官方指令进行安装,需要梯子
相关问题参考:https://zhuanlan.zhihu.com/p/568008269
配置 WSL
将 WSL 移动到其他盘
这里将刚才安装的 WSL(名称为`OracleLinux_8_7`)移动到 D 盘下的 WSL_DIR 文件夹中 wsl --manage OracleLinux_8_7 --move D:/WSL_DIR/

打开对应文件夹,发现 WSL 的磁盘文件(.hdx 文件)已经在对应文件夹中了

mobXterm 配置远程连接到 WSL
MobaXterm 默认支持 WSL。在新增连接时,分类选择【WSL】即可
- 如果下拉框没有对应选项,可以直接输入 WSL 的名称

- 汉化版 MobaXterm 在这里下载(github,需要梯子):https://github.com/RipplePiam/MobaXterm-Chinese-Simplified
Linux 系统配置
进入 / 退出 Linux 系统
在 Windows 命令行中,输入`wsl`进入默认 WSL 系统中
在 Linux 命令行中,输入logout退出 Linux 系统,返回 WSL 系统

设置 root 账户
WSL 默认没有 root 密码,需要进行设置参考:https://blog.csdn.net/weixin_44953227/article/details/109466253
输入sudo passwd root,进入设置,要输入两次密码

设置当前用户具有 root 权限
oracle linux 已经自动设置了当前用户具有 root 权限(已经加入 wheel 组),但每次操作还需要密码下面的流程能实现免密执行代码
-
将当前用户加入 wheel 用户组(实际上 oracle linux 已经默认做了)
可以看到,此时 sudo 指令还需要输入当前用户的密码sudo usermod -aG wheel $USER -
修改wheel用户权限,可以免密运行指令
-
打开权限管理配置文件
这里打开文件使用的是vim软件,软件的具体使用方法请自行搜索,这里不再介绍sudo vim /etc/sudoers -
修改以下内容,并强制保存退出

-
-
重新执行程序,发现已经不需要输入密码了(只需要在指令前加
sudo就行)

设置 Linux 软件源(repos)
默认的 WSL 系统软件源从官网获取,需要梯子,国内访问速度很慢
这里使用开源的项目:https://linuxmirrors.cn/
根据官网指南,先切换到 root 用户,然后运行脚本
sudo passwd root
切换到 root 用户,要输入 root 用户密码,若之前没设置过则先按照上一步设置 root 密码

根据 linuxmirrors-官网 给的教程,执行命令

然后执行脚本即可,这个脚本非常人性化,都是中文,不需要教程了
放点执行截图

执行结束,测试一下,安装个fastfetch软件(此软件可查看系统概况,软件官网(需要梯子))

发现报错PGP key not found

解决方法,下载 centos、EPEL 官方对应的 PGP 秘钥文件到对应路径,查看解决方法(原贴在 github 需要梯子)
Linux 系统优化
在 WSL 系统中进行配置,这里是在 Oracle Linux 8.7 中进行配置
关闭 SELinux
WSL 的 Oracle Linux 8.7 已经默认关闭,这里跳过
相关文档:https://help.aliyun.com/zh/ecs/use-cases/enable-or-disable-selinux
优化内核参数
按需配置,有相关报错再来配,没问题就不管
参考文章:https://developer.aliyun.com/article/700149
设置登录时显示系统概况
- 安装
fastfetch软件 - 配置系统登录时显示的内容登录
参考文章:https://cloud.tencent.com/developer/article/1869215-
打开配置文件(要使用 root 权限)
sudo vim /etc/profile -
在最后添加以下内容,保存退出文件
# hello screen sudo fastfetch
3. 实际效果(每次登录都有以下内容显示) 
-
- 如果出现显示问题,请检查 MobaXterm 的连接参数
把这里的连接参数裁成【原生连接器】,然后关闭窗口,重新打开

启用 systemd 支持(支持 systemctl 指令)
默认 WSL 使用 sysV 而不是 systemd 作为进程管理工具 ,默认情况下 systemctl 指令不可用。如下图
这对于很多运维人员来说很不方便,也可能导致一些依赖相关指令的脚本或程序运行失败
微软提供了相关文档:https://learn.microsoft.com/zh-cn/windows/wsl/systemd#how-to-enable-systemd

-
检查版本(在 windows 命令行中执行命令)
wsl --version可看到当前 wsl 版本满足要求

-
修改配置文件(在 WSL 命令行中执行,这里使用
vim作为文本编辑器,注意要 root 权限)sudo vim /etc/wsl.conf按照官方教程修改文件,并保存退出(如果没有对应的文件,就大胆的新建一个)

-
重启 WSL(先关闭再启动)
- 关闭:在 windows 命令行中输入
wsl --shutdown - 启动(WSL 有活动,就会自动启动,这里直接远程连接,就能激活 WSL)
- 关闭:在 windows 命令行中输入
-
重启之后,重新输入相关指令,正常运行

修改时间和时区
前提:首先设置启用 systemd,具体看上面的步骤
WSL 中的时间、时区会自动和主机 Windows 上的配置进行同步,无需设置
但如果想配置不同时区、手动设置时间,则可参考以下配置
参考文档:https://blog.csdn.net/wdk996/article/details/135940814
-
查看当前时间相关配置:
timedatectl指令

-
设置时区:这里设为中国时区(Asia/Shanghai)
timedatectl set-timezone "Asia/Shanghai" -
设置时间:使用
date -s 时间字符串实现

此时系统级的服务(比如 dnf/yum 等)就能访问外网了,但是 git 还需要额外配置
其他特殊的WSL配置
修改 WSL 的文件位置
WSL 默认将文件放在 C 盘,可利用此指令移动 WSL 到新的磁盘,减少C盘占用wsl --manage WSL名称 --move 新路径
以下将OracleLinux_8_7这个WSL的系统文件移动到D:/WSL_DIR/路径下(D盘下的WSL_DIR文件夹下)

挂载 windows 的文件夹到 WSL 中
相当于在 WSL 和 windows 中创建一个共享文件夹,便于共享数据卸载某一版本的 WSL
注意:卸载对应 WSL 版本之前,需要先停止 WSL-
查询当前已经安装的 WSL
wsl --list -v
-
停止对应的 WSL
wsl --shutdown WSL名称
-
解除挂载的磁盘
不解挂直接删除也行,WIndows 系统会自动解除挂载的wsl --umount 磁盘盘符 -
卸载对应的 WSL
wsl --unregister WSL名称
开发运行环境配置
git 安装及代理加速
git 软件设置代理(全局设置)
git config --global http.proxy $http_proxy
git config --global https.proxy $https_proxy
如果要禁用代理
先临时禁用系统代理
unset $http_proxy
unset $https_proxy
永久禁用
- 进入上面的环境文件
~/.bashrc,删除(或注释掉)上面添加的三行,保存退出 - 使用
source ~/.bashrc应用配置文件 - 使用上面的
unset指令删除当前残留的环境变量
再禁用 git 代理
git config --global --unset http.proxy
git config --global --unset https.proxy
注意:上面的操作需要先禁用 git 代理,再禁用系统代理
配置 Python 开发环境(uv)
使用uv进行 python 版本、项目、依赖包、虚拟环境管理
详见文章:配置 python 运行环境(使用 uv 管理 python 项目)
配置 node 前端开发环境(nvm+node+pnpm)
详见文章:配置 nodejs 开发环境 (nvm + pnpm)
相关文章:
开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)
一些 Linux 基本概念 个人理解,并且为了便于理解,可能会存在一些问题,如果有根本上的错误希望大家及时指出 发行版 WSL 的系统是基于特定发行版的特定版本的 Linux 发行版 有固定组织维护的、开箱就能用的 Linux 发行版由固定的团队、社…...
Spring Boot MyBatis Plus 版本兼容问题(记录)
Spring Boot & MyBatis Plus 版本兼容问题(Invalid value type for attribute factoryBeanObjectType: java.lang.String) 问题描述问题排查1. 检查 MapperScan 的路径2. 项目中没有配置 FactoryBean3. 检查 Spring 和 MyBatis Plus 版本兼容性 解决…...
26. 【.NET 8 实战--孢子记账--从单体到微服务】--需求更新--用户注销、修改用户名、安全设置
在实际开发过程中,项目需求的变更和增加是常见的情况,因此这篇文章我们就模拟一下项目需求新增的情况。 一、需求 项目经理今天提出了新的功能,需要增加重置密码、安全设置、修改用户名、注销账户这四个功能,这四个功能必须是独…...
神经网络|(一)加权平均法,感知机和神经元
【1】引言 从这篇文章开始,将记述对神经网络知识的探索。相关文章都是学习过程中的感悟和理解,如有雷同或者南辕北辙的表述,请大家多多包涵。 【2】加权平均法 在数学课本和数理统计课本中,我们总会遇到求一组数据平均值的做法…...
OpenHarmony OTA升级参考资料记录
OpenHarmony 作为一个开源分布式操作系统,通过其强大的 OTA(Over-The-Air)升级能力,为开发者和厂商提供了一套灵活而安全的系统升级方案。 OTA升级方式 根据升级包的应用方式,OpenHarmony 的 OTA 升级可以分为两种:本地升级和网络OTA升级。 本地升级 本地升级是将已制作…...
在 Kubernetes 上快速安装 KubeSphere v4.1.2
目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…...
【回忆迷宫——处理方法+DFS】
题目 代码 #include <bits/stdc.h> using namespace std; const int N 250; int g[N][N]; bool vis[N][N]; int dx[4] {0, 0, -1, 1}; int dy[4] {-1, 1, 0, 0}; int nx 999, ny 999, mx, my; int x 101, y 101; //0墙 (1空地 2远方) bool jud(int x, int y) {if…...
华为OD机试真题---战场索敌
华为OD机试真题“战场索敌”是一道考察算法和数据结构应用能力的题目。以下是对该题目的详细解析: 一、题目描述 有一个大小是NM的战场地图,被墙壁’#‘分隔成大小不同的区域。上下左右四个方向相邻的空地’.‘属于同一个区域,只有空地上可…...
计算机网络 (53)互联网使用的安全协议
一、SSL/TLS协议 概述: SSL(Secure Sockets Layer)安全套接层和TLS(Transport Layer Security)传输层安全协议是工作在OSI模型应用层的安全协议。SSL由Netscape于1994年开发,广泛应用于基于万维网的各种网络…...
c++算法贪心系列
本篇文章,同大家一起学习贪心算法!!! 第一题 题目链接 2208. 将数组和减半的最少操作次数 - 力扣(LeetCode) 题目解析 本题重点:最终的数组和要小于原数组和的一半,且求这一操作的…...
【Maui】注销用户,采用“手势”点击label弹窗选择
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 方法一:前端绑定3.2 方法二:后端绑定3.3 注销用户的方法 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创…...
智慧脚下生根,智能井盖监测终端引领城市安全新革命
在繁忙的都市生活中,我们往往只关注地面的繁华与喧嚣,却忽略了隐藏在地面之下的基础设施——井盖。这些看似不起眼的井盖,实则承担着排水、通讯、电力等重要功能,是城市安全运转的重要一环。然而,传统的井盖管理面临着…...
Word2Vec如何优化从中间层到输出层的计算?
文章目录 Word2Vec如何优化从中间层到输出层的计算?用负采样优化中间层到输出层的计算负采样方法的关键思想负采样的例子负采样的采样方法 Word2Vec如何优化从中间层到输出层的计算? 重要性:★★ 用负采样优化中间层到输出层的计算 以词汇…...
第七篇:vue3 计算属性:computed
v-model "firstName". // v-model. 就是双向绑定的意思 <br/> // 通过 v-model 进行绑定姓:<input type"text" v-model "firstName"><br/>名:<input type"text" v-model"lastN…...
搭建k8s集群
一、准备工作(所有节点) 在开始部署之前,我们需要对所有节点进行以下准备工作。 1.1、关闭防火墙 # 关闭防火墙 systemctl stop firewalld# 禁止防火墙开机自启 systemctl disable firewalld1.2、 关闭 SELinux # 永久关闭 SELinux sed -…...
Android SystemUI——最近任务应用列表(十七)
对于最近任务应用列表来说,在 Android 原生 SystemUI 中是一个单独的组件。 <string-array name="config_systemUIServiceComponents" translatable="false">……<item>com.android.systemui.recents.Recents</item> </string-arra…...
java 根据前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端
前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端 场景:重点:maven依赖controllerservice 场景: 当前需求,前端通过html2canvas将页面报表生成图片下载,可以仍然不满意。 需要java后…...
《探秘鸿蒙Next:如何保障AI模型轻量化后多设备协同功能一致》
在鸿蒙Next的多设备协同场景中,确保人工智能模型轻量化后功能的一致性是一项极具挑战性但又至关重要的任务。以下是一些关键的方法和策略。 统一的模型架构与标准 采用标准化框架:选择如TensorFlow Lite、PyTorch Mobile等在鸿蒙Next上适配良好的轻量化…...
C语言二级
//请编写函数fun(),该函数的功能是:计算并输出给定整数n的所有因 //子(不包括1和自身)之和。规定n的值不大于1000。例如,在主函数 //中从键盘给n输入的值为856,则输出为:sum 763。 //注意&…...
隐私保护+性能优化,RyTuneX 让你的电脑更快更安全
RyTuneX 是一款专为 Windows 10 和 11 用户量身打造的系统优化工具,采用先进的 WinUI 3 框架开发,以其现代化的设计风格和强大的功能集合脱颖而出。这款工具不仅界面简洁美观,还提供了多样化的系统优化选项,旨在帮助用户最大化设备…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
