解决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环境。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Win10子系统UbuntuWSL安装Docker的教程(图文详解): 1. 首先,确保你已经将Win10子系统UbuntuWSL)正确安装并运行。 2. 打开Ubuntu终端,更新系统软件包列表,运行以下命令: ``` sudo apt-get update ``` 3. 接着,安装必要的软件包,运行以下命令: ``` sudo apt-get install apt-transport-https ca-certificates curl software-properties-common ``` 4. 添加Docker的官方GPG密钥,运行以下命令: ``` curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg ``` 5. 添加Docker的官方软件库,运行以下命令: ``` echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` 6. 接下来,更新软件包列表,运行以下命令: ``` sudo apt-get update ``` 7. 现在,我们可以安装Docker了,运行以下命令: ``` sudo apt-get install docker-ce docker-ce-cli containerd.io ``` 8. 安装完成后,启动Docker服务,运行以下命令: ``` sudo service docker start ``` 9. 检查Docker是否成功安装,运行以下命令: ``` sudo docker run hello-world ``` 10. 如果你看到“Hello from Docker!”的文字,说明Docker已经成功安装并运行了。 以上就是在Win10子系统UbuntuWSL)上安装Docker的详细步骤。 希望这个图文教程能帮助到你。如需进一步了解Docker的使用和操作,请查阅官方文档和其他优质教程。 ### 回答2: 当您在Windows 10操作系统使用WSL(Windows Subsystem for Linux安装Ubuntu子系统时,您可以按照以下步骤来安装Docker: 1. 打开Windows 10的设置应用程序,并选择"更新和安全"。 2. 在左侧导航栏选择"开发人员选项"。 3. 在"使用开发人员功能的设备"部分,勾选"适用于Linux的Windows子系统"复选框,并点击"确定"。系统将要求您重新启动计算机。 4. 在启动后,打开Microsoft Store,并搜索"Ubuntu"。 5. 选择"Ubuntu"应用程序,并点击"获取"按钮以下载并安装Ubuntu。 6. 打开Ubuntu应用程序,并按照提示进行初始设置,包括创建用户名和密码。 7. 更新Ubuntu子系统的软件包列表,输入以下命令并按下回车键: ```shell sudo apt update ``` 8. 安装Docker软件包,输入以下命令并按下回车键: ```shell sudo apt install docker.io ``` 9. 安装完成后,启动Docker服务,输入以下命令并按下回车键: ```shell sudo systemctl start docker ``` 10. 您可以通过运行以下命令来验证Docker是否正确安装: ```shell sudo docker run hello-world ``` 如果您看到一个打印出"Hello from Docker!"的信息,那么Docker安装成功。 11. 如果您想使Docker服务在系统启动时自动启动,可以运行以下命令: ```shell sudo systemctl enable docker ``` 至此,您已成功在Windows 10的WSL安装了Docker。现在,您可以在Ubuntu子系统使用Docker运行容器来开发和部署应用程序。 ### 回答3: Win10子系统Ubuntu (WSL) 安装Docker教程(图文详解): 步骤1:打开Microsoft Store应用商店,搜索并安装Ubuntu。 步骤2:打开已安装Ubuntu终端。 步骤3:通过以下命令更新Ubuntu软件包列表: sudo apt update 步骤4:安装必要的依赖项: sudo apt install apt-transport-https ca-certificates curl software-properties-common 步骤5:添加Docker的官方GPG密钥: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 步骤6:设置稳定版仓库: echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 步骤7:通过以下命令更新软件包列表使得Docker可用: sudo apt update 步骤8:安装Docker: sudo apt install docker-ce docker-ce-cli containerd.io 步骤9:验证安装是否成功: sudo docker run hello-world 步骤10:启动Docker服务并设置为开机启动: sudo systemctl enable docker sudo systemctl start docker 至此,在Win10子系统Ubuntu已成功安装Docker。 请注意:WSL是一个用于在Windows系统运行Linux环境的工具,并且Docker运行于Linux环境。因此,通过WSL安装的Docker实际上是运行在子系统的,并不能直接与Windows环境的Docker进行交互。要与Windows环境的Docker进行交互,你需要安装适用于Windows的Docker版本。 希望以上步骤可以帮助你成功在Win10子系统Ubuntu安装Docker。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值