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

解决win10 wsl子系统安装的ubuntu环境中lsof,netstat命令查看端口没有任何输出的问题

最近有个以前的ssm项目需要在新电脑上运行测试一下,发现需要redis环境,看了官网说:有两种选择:

1. 要么在虚拟机比如vmware安装linux基础环境,然后再安装redis

2. 要么可以利用win10的wsl linux子系统安装ubuntu,然后再安装redis

总之,需要linux环境

由于这是台新台式机,不想使用vmware安装,于是尝试安装了wsl版的ubuntu.

安装方法很简单: 在microsoft store应用商店里搜索ubuntu, 然后点击获取,下载完成以后。

点击打开即可。刚开始会提示初始化用户名,确认点几个回车以后,就可以用了。

但是这个ubuntu系统有个致命的问题:  通过lsof,netstat命令查看端口是没有任何输出的!

换句话说: 你没法使用lsof,netstat命令确定一个服务的状态是否是运行的!

这个问题相当糟糕,是一个非常严重的问题。

我查了很多资料,都没有找到原因,后来在下面的一篇文章中找到了线索:

https://www.reddit.com/r/bashonubuntuonwindows/comments/8cjko7/list_open_files_lsof_not_working/

I think I found the answer.

netstat and lsof both use /proc/net/* files including /proc/net/tcp to identify sockets, their type and status. These files are empty in WSL causing the socket to not be identified.

There is work being done to add netstat support, which leads me to believe that /proc/net/tcp and other files will contain information and thus lsof will work.

 简单说: 就是netstat和lsof是使用/proc/net/目录下的文件来查询socket, 因为linux一切皆文件。

但是在wsl系统中/proc/net/目录下的这些文件都是空的!,所以运行netstat和lsof比如没有任何输出!

 那么怎么解决这个问题呢,也查了很多资料,据说把wsl有两个版本: wsl1和wsl2,把wsl1升级到wsl2,然后重装ubuntu即可。

先检查一下系统是否满足安装wsl2的要求:

  1. Windows 版本: WSL 2 是从 Windows 10 版本 1903 及更高版本开始引入的。较早的 Windows 版本可能无法使用 WSL 2。

  2. 64 位系统: WSL 2 只支持 64 位的 Windows 操作系统。确保你的计算机硬件和操作系统都是 64 位的。

  3. 虚拟化支持: WSL 2 使用虚拟化技术(通常是 Hyper-V)来在 Windows 中运行一个真正的 Linux 内核。你的计算机必须支持虚拟化,并且虚拟化选项必须在 BIOS 或 UEFI 中启用。大多数现代计算机默认启用了虚拟化支持,但你可能需要在 BIOS 或 UEFI 设置中检查确认。

首先第一步:升级wsl1到wsl2:

  a. 用管理员权限打开powershell,运行下面的命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重新启动

然后打开控制面板,在程序与功能—>启用或关闭Windows功能,检查下图中红框圈处是否已经勾选;若没有,则需要勾选并确认。

b. 接着安装wsl升级包: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

至此wsl2安装完毕

注意:为了保证wsl2能彻底生效,需要运行下面的命令:

wsl --set-default-version 2

就是默认全局使用wsl2,注意:这一步非常,非常重要!是真正启用wsl2的关键!

然后第二步就是安装ubuntu了:

这里分两种情况:

1. 如果是已经安装过了ubuntu的,需要将其卸载

 然后从microsoft store应用商店里搜索ubuntu重新获取并安装即可。

 这时候运行wsl -l -v就会发现wsl version版本是2了。

此时再使用lsof命令查询端口就会有输出信息了:

网上有种方法:wsl --set-version Ubuntu 2,进行wsl2的重新绑定并完成迁移,但是我试过了,没有效果。不知道是不是需要:先将ubuntu程序进行重置,然后再通过wsl --set-version命令进行绑定。各位可以试试看。

2.  第二种情况:如果全新安装ubuntu的,直接从microsoft store应用商店里搜索ubuntu获取安装即可。

至此问题全部解决。

然后补充一下关于wsl的知识:

WSL是适用于Linux的Windows子系统(英语:Windows Subsystem for Linux,简称WSL)是一个为在windows10和windows server 2019以上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。

WSL 1是通过适配层实现的,当你在 WSL 1 中运行 Linux 命令时,这些命令会发送到适配层,然后适配层将 Linux 系统调用转换为 Windows 系统调用。

WSL1不是将非原生功能包装到Win32系统调用中,而是利用NT内核执行程序将Linux程序作为特殊的、隔离的最小进程(称为“pico-processes”)作为专用系统连接到内核模式“pico-providers”

Linux 应用程序实际上是在 Windows 用户模式进程中运行,因此它们与 Windows 主机操作系统共享一些资源。这可能导致一些限制,特别是在内存和进程管理方面。

 WSL1 和 WSL2。它们最大的不同是,WSL1 是基于动态翻译的方式将 Linux 的系统调用翻译成 Windows NT的系统调用,所以WSL1并不是原生的linux内核

开发者在 WSL1 中遇到的问题就是,部分 linux 的命令无法成功运行。当你遇到这个问题,将会一件非常恼火的事情。比如,WSL1 中无法成功运行 docker,因为需要 linux 关于命名空间的系统调用,而 WSL1 并不支持。最终,微软还是决定使用虚拟化技术来克服这一问题

而 WSL2 是基于虚拟机的,通过在虚拟机中运行真正的 Linux 内核,显著提高了性能。它更接近于原生 Linux 环境,可以更好地处理文件系统 I/O 和网络性能。

  • WSL 1:在WSL 1中,Windows主机操作系统和Linux子系统之间使用了适配层。Linux系统调用被转换为Windows系统调用,但它仍然是运行在Windows宿主操作系统的子系统。
  • WSL 2:WSL 2通过在Windows宿主系统上运行一个真正的Linux内核实现了更高的兼容性。它通过虚拟机(基于Hyper-V技术)来运行这个内核,从而更接近于独立的Linux环境。

相关文章:

解决win10 wsl子系统安装的ubuntu环境中lsof,netstat命令查看端口没有任何输出的问题

最近有个以前的ssm项目需要在新电脑上运行测试一下,发现需要redis环境,看了官网说:有两种选择: 1. 要么在虚拟机比如vmware安装linux基础环境,然后再安装redis 2. 要么可以利用win10的wsl linux子系统安装ubuntu&…...

【OpenFeign】OpenFeign结合Hystrix和Sentinel实现熔断降级

OpenFeign可以与Hystrix和Sentinel结合使用&#xff0c;实现降级和熔断。 OpenFeign与Hystrix结合使用 使用OpenFeign需要引入OpenFeign的依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…...

软件工程(十) 需求工程之需求开发与管理

前面我们学习到了需求工程的概念与分类,我们知道了需求工程主要分为需求开发和需求管理,但是没有说明到底该如何开发需求,有哪些方法去开发需求。到底该如何进行需求管理,又有哪些进行需求管理的方式。具体是如何去做的。下面我们将会详细进行描述。 1、需求开发 1.1、需…...

C++网狐服务器引入开源日志库spdlog

很多人对日志库不以为然&#xff0c;包括网狐这种十几年的公司都不重视&#xff0c;其实日志库记录的东西能在线上出问题时高效解决&#xff0c;特别是别人写的东西&#xff0c;人又走了&#xff0c;出了问题&#xff0c;还可以用日志分析快速解决。要是没有日志记录&#xff0…...

【C++】—— c++11之智能指针

前言&#xff1a; 本期&#xff0c;我们将要学习的是在c11中新提出的概念——异常指针&#xff01; 目录 &#xff08;一&#xff09;智能指针的引入 &#xff08;二&#xff09;内存泄漏 1、什么是内存泄漏&#xff0c;内存泄漏的危害 2、内存泄漏分类&#xff08;了解&a…...

html5——前端笔记

html 一、html51.1、理解html结构1.2、h1 - h6 (标题标签)1.3、p (段落和换行标签)1.4、br 换行标签1.5、文本格式化1.6、div 和 span 标签1.7、img 图像标签1.8、a 超链接标签1.9、table表格标签1.9.1、表格标签1.9.2、表格结构标签1.9.3、合并单元格 1.10、列表1.10.1、ul无序…...

如何在 Vue TypeScript 项目使用 emits 事件

Vue是构建出色的Web应用程序的最灵活、灵活和强大的JavaScript框架之一。Vue中最重要的概念和关键特性之一是能够促进应用程序组件之间的通信。让我们深入探讨一下Vue中的“emits”概念&#xff0c;并了解它们如何以流畅和无缝的方式实现父子组件之间的通信。 Vue中的emits是什…...

文件操作 黑马教程(04)

1.文本文件 写文件 #include "iostream" #include "fstream" using namespace std; /** 文件操作** 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦结束都会被释放* 通过文件可以将数据持久化* C中对文件操作需要包含头文件<fstream>** 文…...

Jmeter(二十七):BeanShell PostProcessor跨线程全局变量使用

在性能测试中&#xff0c;两个相关联的接口不一定都在同一个线程组&#xff0c;遇见这种情况时&#xff0c;我们要进行跨线程组传参&#xff0c;此处用登录和查询配送单两个请求举例&#xff1b; 1、登录请求中配置json提取器&#xff0c;将接口返回的token保存在变量中&#…...

手写表格OCR识别并与大模型ChatGPT交互?

这是一张手写表格&#xff0c;姓名做了脱敏处理。现在需要对其识别&#xff0c;并分析。 直接粘贴剪切板中的表格原始图片&#xff0c;在网页中ctlV进行识别。识别结果列用分隔符|&#xff0c;可以直接粘贴到excel&#xff0c;进行数据列分隔。为了美观期间&#xff0c;也可以用…...

使用 v-for 指令和数组来实现在 Uni-app 中动态增减表单项并渲染多个数据

在 data 中定义一个数组&#xff0c;用于存储表单项的数据&#xff1a; data() {return {formItems: []} } 在模板中使用 v-for 指令渲染表单项&#xff1a; <template><div><div v-for"(item, index) in formItems" :key"index"><…...

xml

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…...

Java中的动态代理(JDK Proxy VS CGLib)

前言 动态代理可以说是Java基础中一个比较重要的内容&#xff0c;这块内容关系到Spring框架中的AOP实现原理&#xff0c;所以特别写了一篇作为个人对这块知识的总结。这部分内容主要包括&#xff1a;JDK Proxy和CGLib的基本介绍、二者的实现原理、代码示例等。 什么是动态代理…...

Redis 7 第七讲 哨兵模式(sentinal)

哨兵模式 哨兵巡查监控后台master主机是否故障,如果出现故障根据投票时自动将某一个从库转换成新的主库,继续对外服务。 作用 1. 监控redis运行状态,包括master和slave 2. 当master down机,能自动将salve切换成新的master 应用场景 主从监控监控主从redis库运行的状态…...

Python入门教程 - 判断语句(二)

目录 一、布尔类型 二、比较运算符 三、if判断语句 一、布尔类型 True False result1 10 > 5 result2 10 < 5 print(result1) print(result2) print(type(result1)) True False <class bool> 二、比较运算符 ! > < > < 比较运算的结果是布尔…...

LeetCode-55-跳跃游戏-贪心

题目描述&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解…...

【USRP】调制解调系列4:BPSK、QPSK、8PSK、OQPSK、Pi/4DQPSK,基于labview的实现

PSK Phase Shift Keying – 相移键控 在某些调制解调器中用于数据传输的调制系统&#xff0c;在最简单的方式中&#xff0c;二进制调制信号产生0和1。载波相位来表示信号占和空或者二进制1和O。对于有线线路上较高的数据传输速率&#xff0c;可能发生4个或8个不同的相移&…...

深入探讨梯度下降:优化机器学习的关键步骤(一)

文章目录 &#x1f340;引言&#x1f340;什么是梯度下降&#xff1f;&#x1f340;损失函数&#x1f340;梯度(gradient)&#x1f340;梯度下降的工作原理&#x1f340;梯度下降的变种&#x1f340;随机梯度下降&#xff08;SGD&#xff09;&#x1f340;批量梯度下降&#xf…...

layui框架学习(40:数据表格_主要事件)

Layui数据表格模块主要通过各类事件响应工具栏操作、单元格编辑或点击等交互操作&#xff0c;本文学习table数据表格模块中的主要事件及处理方式。   头部工具栏事件。通过代码“table.on(‘toolbar(test)’, function(obj))”获取lay-filter属性为test的数据表格的头部工具栏…...

kotlin实现猜数游戏

游戏规则 1.程序随机生成一个1到100的数字&#xff0c;作为MagicNumber 2.用户根据提示输入数据&#xff0c;只有三次机会输入数据 代码 代码很简单&#xff0c;使用了let内置函数 fun main() {//生成随机数可以使用java的方法//val magicNumber Random().nextInt(11)val ma…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...