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

Windows 中的 WSL:开启你的 Linux 之旅


       今天在安装windows上安装Docker Desktop的时候,遇到了WSL。下面咱们就学习下。

欢迎来到涛涛聊AI


一、什么是 WSL?


        WSL,全称为 Windows Subsystem for Linux,是微软为 Windows 系统开发的一个兼容层,它允许用户在 Windows 环境中直接运行 Linux 二进制可执行文件(ELF 格式)。简单来说,WSL 让你可以在 Windows 系统中无缝使用 Linux 系统,而无需安装完整的 Linux 发行版。


(一)WSL 的历史背景
        WSL 最初于 2016 年在 Windows 10 的周年更新中首次亮相。微软推出 WSL 的初衷是为了满足开发者的需求,尤其是那些需要在 Windows 环境中使用 Linux 工具和环境的开发者。然而,随着时间的推移,WSL 的功能不断增强,它已经不仅仅是一个开发工具,更是一个强大的生产力工具,适用于各种计算机用户。


(二)WSL 的核心优势

• 无需虚拟机:传统的 Linux 使用方式通常是通过虚拟机软件(如 VMware 或 VirtualBox)来运行 Linux 系统。但虚拟机需要占用大量系统资源,启动和运行速度较慢。而 WSL 则直接在 Windows 内核上运行,无需额外的虚拟机软件,启动速度快,资源占用低。

• 无缝集成:WSL 与 Windows 系统深度集成,你可以直接在 Windows 资源管理器中访问 Linux 文件系统,也可以在 Linux 终端中访问 Windows 文件系统。这种无缝集成让你可以在两个系统之间轻松切换和操作。

• 多种 Linux 发行版支持:WSL 支持多种流行的 Linux 发行版,如 Ubuntu、Debian、Fedora 等。你可以根据自己的需求选择适合的发行版。


二、WSL 的版本介绍


        WSL 有两个主要版本:WSL 1 和 WSL 2。它们在性能、功能和兼容性上有所不同,下面我们来详细了解一下。


(一)WSL 1
        WSL 1 是 WSL 的第一个版本,它通过将 Linux 系统调用转换为 Windows 系统调用来实现 Linux 环境的运行。这种转换方式使得 WSL 1 在文件 I/O 操作上表现良好,但在某些复杂操作(如磁盘 I/O)上可能会出现性能瓶颈。


• 优点:

• 文件访问速度快,适合处理大量文件操作的任务。

• 兼容性较好,大多数 Linux 应用程序都能在 WSL 1 上正常运行。

• 缺点:

• 对于需要高性能计算和复杂磁盘操作的应用,性能表现可能不如 WSL 2。

• 不支持某些 Linux 内核特性,如 Docker。


(二)WSL 2
        WSL 2 是 WSL 的升级版本,它引入了虚拟化的 Linux 内核,使得 Linux 系统在 WSL 2 上的运行更加接近原生 Linux 环境。WSL 2 的核心优势在于性能和兼容性。


• 优点:

• 性能大幅提升,尤其是在磁盘 I/O 和 CPU 密集型任务上。

• 支持完整的 Linux 内核特性,包括 Docker 等容器化工具。

• 更好的文件系统兼容性,支持 ext4 等 Linux 文件系统。

• 缺点:

• 启动速度略慢于 WSL 1,因为需要启动虚拟化的 Linux 内核。

• 需要更多的系统资源,尤其是内存。


三、如何安装和使用 WSL


安装和使用 WSL 非常简单,即使是非程序员用户也能轻松上手。下面我们将详细介绍安装步骤和基本使用方法。


(一)安装 WSL

• 启用 WSL 功能:

• 打开 Windows 设置,搜索“Windows 功能”,然后点击“打开”。

• 在“Windows 功能”窗口中,找到“适用于 Linux 的 Windows 子系统”和“虚拟机平台”(如果需要安装 WSL 2),勾选它们,然后点击“确定”。

• 系统会提示你重启计算机,重启后 WSL 功能将被启用。


• 安装 Linux 发行版:

• 打开 Microsoft Store,搜索你想要安装的 Linux 发行版(如 Ubuntu、Debian 等)。

• 选择一个发行版,点击“获取”进行安装。

• 安装完成后,打开该发行版,系统会提示你设置用户名和密码,完成初始化设置。


(二)使用 WSL

• 启动 WSL:

• 安装完成后,你可以在开始菜单中找到你安装的 Linux 发行版,点击它即可启动。

• 你也可以通过 Windows 终端(Windows Terminal)启动 WSL。打开 Windows 终端,选择你安装的 Linux 发行版,即可进入 Linux 环境。


• 基本命令操作:

• WSL 的操作界面是一个终端窗口,你可以通过命令行来操作 Linux 系统。以下是一些常用的命令:

• `ls`:列出当前目录下的文件和文件夹。

• `cd`:切换目录,例如`cd /home`切换到 home 目录。

• `mkdir`:创建目录,例如`mkdir test`创建一个名为 test 的目录。

• `touch`:创建文件,例如`touch test.txt`创建一个名为 test.txt 的文件。

• `nano`或`vi`:文本编辑器,用于编辑文件。

• `sudo`:以管理员权限执行命令,例如`sudo apt update`更新软件包列表。


• 访问文件系统:

• 在 WSL 中,你可以访问 Windows 文件系统。WSL 会将 Windows 文件系统挂载在`/mnt/c`(对于 C 盘)。例如,如果你想要访问 Windows 的桌面文件夹,可以在 WSL 中输入`cd /mnt/c/Users/你的用户名/Desktop`。


• 安装软件:

• WSL 支持通过包管理器安装软件。以 Ubuntu 为例,你可以使用`apt`包管理器。例如,安装`curl`工具的命令是`sudo apt install curl`。


• 运行图形界面程序(可选):

• 虽然 WSL 主要是一个命令行环境,但你也可以通过安装 X 服务器来运行图形界面程序。例如,你可以安装 VcXsrv 或 Xming 等 X 服务器软件,并在 WSL 中设置环境变量`export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0`,然后就可以运行图形界面程序了。


四、WSL 的应用场景


WSL 的应用场景非常广泛,即使你不是程序员,也能从中受益。以下是一些常见的应用场景:


(一)数据科学
如果你对数据分析或机器学习感兴趣,WSL 提供了一个强大的环境来运行 Python、R 等数据科学工具。你可以轻松安装和使用 Jupyter Notebook、TensorFlow 等工具,而无需担心 Windows 环境的兼容性问题。


(二)Web 开发
对于 Web 开发者来说,WSL 是一个理想的开发环境。你可以使用 Node.js、Ruby on Rails 等工具来开发 Web 应用,并通过 WSL 的网络功能直接在本地测试和部署。


(三)系统管理
WSL 也可以用于系统管理任务。你可以使用 Linux 的命令行工具来管理 Windows 系统的文件和网络,甚至可以通过 WSL 来管理远程 Linux 服务器。


(四)学习 Linux
如果你对 Linux 感兴趣,但又不想安装完整的 Linux 系统,WSL 是一个完美的学习平台。你可以通过 WSL 学习 Linux 命令行操作、文件系统管理、脚本编写等知识。


五、常见问题及解决方法


在使用 WSL 的过程中,你可能会遇到一些问题。以下是一些常见问题及解决方法:


(一)WSL 无法启动

• 原因:可能是 WSL 功能未正确启用,或者 Linux 发行版安装失败。

• 解决方法:重新检查 WSL 功能是否启用(通过 Windows 功能窗口),并重新安装 Linux 发行版。


(二)文件权限问题

• 原因:在 WSL 中访问 Windows 文件系统时,可能会遇到权限问题。

• 解决方法:确保你以正确的用户权限操作文件。你可以使用`sudo`命令来提升权限,或者通过 Windows 设置修改文件夹的权限。

 

(三)网络连接问题 

• 原因:某些网络设置可能会导致 WSL 无法正常连接到外部网络。

• 解决方法:检查你的网络设置,确保 WSL 的网络模式为“桥接”或“NAT”。你可以在 Windows 的网络设置中调整虚拟网络适配器的配置。此外,确保防火墙没有阻止 WSL 的网络访问。如果问题仍然存在,可以尝试重启 WSL 或更新 Windows 系统。


(四)性能问题

• 原因:WSL 2 使用虚拟化技术,可能会占用较多的系统资源,尤其是在运行大型应用程序时。

• 解决方法:确保你的计算机有足够的内存和 CPU 资源。如果资源紧张,可以尝试关闭其他不必要的应用程序,或者调整 WSL 2 的内存分配。你可以在 WSL 2 的配置文件中设置内存限制,例如:

[wsl2]
memory=4GB  # 设置 WSL 2 的内存限制


(五)图形界面程序无法启动

• 原因:如果你尝试在 WSL 中运行图形界面程序,但没有正确配置 X 服务器,可能会导致程序无法启动。

• 解决方法:安装一个 X 服务器(如 VcXsrv 或 Xming),并确保在 WSL 中正确设置了`DISPLAY`环境变量。例如:

然后再次尝试运行图形界面程序。

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0


六、进阶技巧
除了基本的使用方法,WSL 还支持一些高级功能,可以帮助你更高效地使用它。


(一)自定义 WSL 配置
WSL 允许你通过配置文件来自定义其行为。你可以在`%UserProfile%\.wslconfig`文件中设置全局配置,例如内存和处理器限制。例如:

你还可以为每个 Linux 发行版单独配置,通过在发行版的根目录下创建`.wslconfig`文件来实现。

[wsl2]
memory=4GB
processors=2


(二)使用 WSL 2 的虚拟机功能
WSL 2 实际上是一个轻量级的虚拟机,你可以通过 Hyper-V 管理器来管理它。这让你可以更灵活地控制 WSL 2 的资源分配和网络设置。


(三)与 Docker 集成
如果你对容器化开发感兴趣,WSL 2 是一个理想的环境。WSL 2 支持完整的 Linux 内核特性,因此可以无缝运行 Docker。你只需要在 WSL 2 中安装 Docker,并确保它以管理员权限运行即可。


七、WSL 的未来展望
微软对 WSL 的支持一直在不断加强,未来可能会有更多的功能和改进。例如,微软可能会进一步优化 WSL 的性能,或者增加对更多 Linux 发行版的支持。此外,随着 Windows 和 Linux 的融合越来越紧密,WSL 也可能会成为更多非程序员用户的首选工具。


八、总结
通过本文的介绍,你应该对 WSL 有了一个全面的了解。无论你是想学习 Linux,还是需要一个强大的开发环境,WSL 都是一个非常实用的工具。它的安装和使用都非常简单,即使是非程序员用户也能轻松上手。

希望本文能帮助你更好地利用 WSL,提升你的工作效率和学习体验。如果你在使用过程中遇到任何问题,或者有其他疑问,欢迎在评论区留言,我会尽力为你解答。

 

相关文章:

Windows 中的 WSL:开启你的 Linux 之旅

今天在安装windows上安装Docker Desktop的时候,遇到了WSL。下面咱们就学习下。 欢迎来到涛涛聊AI 一、什么是 WSL? WSL,全称为 Windows Subsystem for Linux,是微软为 Windows 系统开发的一个兼容层,它允许用户在 Win…...

二维前缀和:高效求解矩阵区域和问题

在处理二维矩阵时,频繁计算某一子矩阵的和是一个常见的操作。传统的做法是直接遍历该子矩阵,时间复杂度较高。当矩阵非常大且有大量的查询时,直接计算将变得低效。为了提高效率,我们可以通过 二维前缀和 技巧在常数时间内解决这个…...

音视频入门基础:RTP专题(5)——FFmpeg源码中,解析SDP的实现

一、引言 FFmpeg源码中通过ff_sdp_parse函数解析SDP。该函数定义在libavformat/rtsp.c中: int ff_sdp_parse(AVFormatContext *s, const char *content) {const char *p;int letter, i;char buf[SDP_MAX_SIZE], *q;SDPParseState sdp_parse_state { { 0 } }, *s1…...

Android开发工作经历整理

一.无人机应用软件开发 集成大疆官网的DJIMobileSDK到AS中编写软件,操控无人机执行多个航点任务。集成OpenCV库进行图像识别,通过获取参数,根据算法执行sdk,使无人机降落到机库,并执行后续的换电操作。待无人机就绪后…...

C++中常用的十大排序方法之4——希尔排序

成长路上不孤单😊😊😊😊😊😊 【😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C中常用的排序方法之4——希尔排序的相…...

解决注入线程池的栈溢出问题

文章目录 1.问题产生2.问题解决 1.问题产生 在使用sleuth的时候,需要注入线程池,他才会自动包装,实现traceId的传递,但是突然启动时出现了栈溢出的问题 2.问题解决 根据报错,发现是Gson序列化相关的问题&#xff0c…...

自动驾驶---两轮自行车的自主导航

1 背景 无人驾驶汽车最早出现在DARPA的比赛中,从那个时刻开始,逐渐引起全球学者的注意,于是从上个世纪开始各大高校院所开始了无人汽车的研发。直到这两年,无人驾驶汽车才开始走进寻常百姓家,虽然目前市面上的乘用车还…...

哈夫曼树并查集

(1)哈夫曼树 特殊概念: 1.结点的权:表示结点树的重要性 2.带权路径长度:从树的根到该节点的路径长度(经过的边数)与该节点上权值的乘积 2.树的带权路径长度:该树的所有叶子节点的…...

PyTorch数据建模

回归分析 import torch import numpy as np import pandas as pd from torch.utils.data import DataLoader,TensorDataset import time strat = time.perf_counter()...

在 Ubuntu 上安装 Node.js 23.x

在 Ubuntu 上安装 Node.js 23.x 前提条件安装步骤1. 下载设置脚本2. 运行设置脚本3. 安装 Node.js4. 验证安装 参考链接总结 在现代 web 开发中,Node.js 是一个不可或缺的工具。它提供了一个强大的 JavaScript 运行时环境,使得开发人员可以在服务器端使用…...

SQL范式与反范式_优化数据库性能

1. 引言 什么是SQL范式 SQL范式是指数据库设计中的一系列规则和标准,旨在减少数据冗余、提高数据完整性和一致性。常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF(Boyce-Codd范式)。 什么是SQL反范式 SQL反范式是指在满足范式要求的基础上,有…...

hunyuan 混元学习

使用了5个subset,也是用了text-image和text-video进行训练的 也是进行了复杂的视频选择。同movie gen. 也进行了模型切断,用拉普拉斯算子找到最清晰的一帧作为训练的起始 训练了不同的模型去选择数据,比如用Dover去选择美观度比较好的数据&#xff0c…...

四、GPIO中断实现按键功能

4.1 GPIO简介 输入输出(I/O)是一个非常重要的概念。I/O泛指所有类型的输入输出端口,包括单向的端口如逻辑门电路的输入输出管脚和双向的GPIO端口。而GPIO(General-Purpose Input/Output)则是一个常见的术语&#xff0c…...

.Net / C# 繁体中文 与 简体中文 互相转换, 支持地方特色词汇

版本号 Nuget 搜索 “OpenCCNET”, 注意别找错, 好多库的名字都差不多 支持 “繁,简” 的互相转换, 支持多个地区常用词汇的转换, 还支持 日文的新旧转换. OpenCC 在 .Net 中的实现 https://github.com/CosineG/OpenCC.NET <PackageReference Include"OpenCCNET"…...

一元函数微积分的几何应用:二维平面光滑曲线的曲率公式

文章目录 前言曲率和曲率半径的定义曲率计算公式参数方程形式直角坐标显式方程形式极坐标形式向量形式 前言 本文将介绍二维平面光滑曲线的曲率定义以及不同形式的曲率及曲率半径公式的推导。 曲率和曲率半径的定义 &#xff08;关于二维平面光滑曲线的定义以及弧长公式请参…...

数据结构与算法之异步: LeetCode 1114. 按序打印 (Ts版)

按序打印 https://leetcode.cn/problems/print-in-order/description/ 描述 给你一个类&#xff1a; public class Foo {public void first() { print("first"); }public void second() { print("second"); }public void third() { print("third&qu…...

python:求解爱因斯坦场方程

在物理学中&#xff0c;爱因斯坦的广义相对论&#xff08;General Relativity&#xff09;是描述引力如何作用于时空的理论。广义相对论由爱因斯坦在1915年提出&#xff0c;并被阿尔伯特爱因斯坦、纳森罗森和纳尔逊曼德尔斯塔姆共同发展。广义相对论的核心方程是爱因斯坦场方程…...

PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践

title: PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践 date: 2025/1/28 updated: 2025/1/28 author: cmdragon excerpt: 在数据库管理中,备份与恢复是确保数据安全和业务连续性的关键措施。PostgreSQL 提供了一系列工具,以便于数据库管理员对数据进行…...

位运算的概念

文章目录 整数在计算机中的表示二进制表示有符号类型和无符号类型机器数和真值原码、反码和补码原码、反码和补码的表示方法计算机中的表示 位运算与、或、异或和取反移位运算移位运算与乘除法的关系位运算的性质 目录 整数在计算机中的表示 二进制表示 程序中的所有数在计算…...

自主Shell命令行解释器

什么是命令行 我们一直使用的"ls","cd","pwd","mkdir"等命令&#xff0c;都是在命令行上输入的&#xff0c;我们之前对于命令行的理解&#xff1a; 命令行是干啥的&#xff1f;是为我们做命令行解释的。 命令行这个东西实际上是我们…...

Vue.js 的介绍与组件开发初步

Vue.js 的介绍与组件开发初步 Vue.js 的介绍与组件开发初步引言第一部分&#xff1a;Vue.js 基础入门1.1 什么是 Vue.js&#xff1f;1.2 搭建 Vue.js 开发环境安装 Node.js 和 npm安装 Vue CLI创建新项目运行示例 1.3 第一个 Vue.js 示例 第二部分&#xff1a;Vue.js 组件开发基…...

XCCL、NCCL、HCCL通信库

XCCL提供的基本能力 XCCL提供的基本能力 不同的XCCL 针对不同的网络拓扑&#xff0c;实现的是不同的优化算法的&#xff08;不同CCL库最大的区别就是这&#xff09; 不同CCL库还会根据自己的硬件、系统&#xff0c;在底层上面对一些相对应的改动&#xff1b; 但是对上的API接口…...

Python教学:文档处理及箱线图等

代码1&#xff1a; import os import pandas as pd import numpy as py import os.path from os import listdir import openpyxl from openpyxl import Workbook import re import matplotlib.pyplot as plt # 导入matplotlib的绘图模块&#xff0c;用于可视化 cwdos.getcwd…...

【Redis】安装配置Redis超详细教程 / Linux版

Linux安装配置Redis超详细教程 安装redis依赖安装redis启动redis停止redisredis.conf常见配置设置redis为后台启动修改redis监听地址设置工作目录修改密码监听的端口号数据库数量设置redis最大内存设置日志文件设置redis开机自动启动 学习视频&#xff1a;黑马程序员Redis入门到…...

【大数据技术】教程05:本机DataGrip远程连接虚拟机MySQL/Hive

本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...

springboot 启动原理

目标&#xff1a; SpringBootApplication注解认识了解SpringBoot的启动流程 了解SpringFactoriesLoader对META-INF/spring.factories的反射加载认识AutoConfigurationImportSelector这个ImportSelector starter的认识和使用 目录 SpringBoot 启动原理SpringBootApplication 注…...

llama.cpp GGUF 模型格式

llama.cpp GGUF 模型格式 1. Specification1.1. GGUF Naming Convention (命名规则)1.1.1. Validating Above Naming Convention 1.2. File Structure 2. Standardized key-value pairs2.1. General2.1.1. Required2.1.2. General metadata2.1.3. Source metadata 2.2. LLM2.2.…...

使用Pytorch训练一个图像分类器

一、准备数据集 一般来说&#xff0c;当你不得不与图像、文本或者视频资料打交道时&#xff0c;会选择使用python的标准库将原始数据加载转化成numpy数组&#xff0c;甚至可以继续转换成torch.*Tensor。 对图片而言&#xff0c;可以使用Pillow库和OpenCV库对视频而言&#xf…...

PythonStyle MVC 开发框架

在 Python 中&#xff0c;MVC&#xff08;Model - View - Controller&#xff0c;模型 - 视图 - 控制器&#xff09;是一种常见的软件设计模式&#xff0c;它将应用程序分为三个主要部分&#xff0c;各自承担不同的职责&#xff0c;以提高代码的可维护性、可扩展性和可测试性。…...

HTTP协议的无状态和无连接

无连接 ①无连接的含义 这里所说的无连接并不是指不连接&#xff0c;客户与服务器之间的HTTP连接是一种一次性连接&#xff0c;它限制每次连接只处理一个请求&#xff0c;当服务器返回本次请求的应答后便立即关闭连接&#xff0c;下次请求再重新建立连接。这种一次性连接主要考…...