使用WSL时遇到的几个问题

| |

这篇笔记的内容已经过时,请移步另一篇博客

关于WSL

WSL(Windows Subsystem for Linux)是微软为 Windows 10 和 Windows 11 用户提供的一项功能,它允许你在 Windows 上运行 Linux 环境。WSL 使得开发者和学生可以在不离开 Windows 的情况下,体验和使用 Linux 系统及其工具。

  1. 安装 WSL: 打开 PowerShell 或 Windows 命令提示符(以管理员身份运行),并运行以下命令来安装 WSL 和默认的 Ubuntu 发行版:
powershell

   wsl --install

这将启用 WSL 并安装最新版本的 Ubuntu。安装完成后,需要重新启动计算机。 2. 启动 WSL: 重新启动计算机后,可以在开始菜单中找到并启动 Ubuntu 或其他已安装的 Linux 发行版。

WSL 的主要特点

  1. 无缝集成:WSL 与 Windows 无缝集成,你可以在 Windows 文件系统中访问和操作 Linux 文件,也可以在 Linux 中访问 Windows 文件。
  2. 低资源开销:与虚拟机相比,WSL 占用的系统资源非常少,因为它不需要运行完整的 Linux 内核,而是通过兼容层直接在 Windows 上运行。
  3. 兼容大多数 Linux 发行版:你可以从微软商店中安装多种 Linux 发行版,如 Ubuntu、Debian、OpenSUSE 等。
  4. 支持图形界面:最新的 WSL 版本(WSL2)支持运行 Linux 图形用户界面应用程序。

在 WSL 中,Windows 的文件系统被挂载在 /mnt 目录下。比如,C:\Users\YourName 在 WSL 中对应 /mnt/c/Users/YourName,D: 盘对应 /mnt/d 等。
WSL 允许你在 Windows 上运行大多数 Linux 命令行工具、实用程序和应用程序,如 bashgrepsedawkrsync 等。

两个报错

wsl的网络代理问题

warning: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理

下面的内容已经过时,请移步另一篇博客
另可参阅微软官方文档
在Windows中的 C:\Users\<your_username> 目录下创建一个.wslconfig文件,然后在文件中写入如下内容:

txt

[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true

然后用 wsl --shutdown 关闭WSL,之后再重启,提示就消失了。

Windows PowerShell无法使用wsl命令问题

参阅 https://blog.csdn.net/weixin_44825912/article/details/136565219

ps1

wsl --list --verbose
wsl -s Ubuntu

PowerShell无法使用wsl命令问题PowerShell无法使用wsl命令问题

python调用命令行操作

可以在 Python 中调用 WSL (Windows Subsystem for Linux) 来执行命令。你可以使用 subprocess 模块来执行命令并捕获其输出。

python

import subprocess

def run_wsl_command(command):
    # 构建 WSL 命令
    wsl_command = f"wsl {command}"

    try:
        # 使用 subprocess 运行命令并捕获输出,指定 encoding='utf-8'
        result = subprocess.run(wsl_command, shell=True, capture_output=True, text=True, encoding='utf-8')

        # 输出结果
        if result.returncode == 0:
            print("Command succeeded:")
            print(result.stdout)
        else:
            print("Command failed:")
            print(result.stderr)
    except UnicodeDecodeError as e:
        print(f"Unicode decode error: {e}")

# 示例命令
command = "ls -l"
run_wsl_command(command)

参阅