目录

WSL 之 unix 模拟环境

前言

Windows Subsystem for Linux (WSL) 是微软开发的 Windows 系统组件,能让用户在 Windows 上直接运行完整的 Linux 发行版,无需虚拟机或双系统。(官方帮助文档:WSL 文档

WSL 简介

1、核心特性
  • 原生集成:与 Windows 系统深度融合,可直接访问 Windows 文件系统(如 C 盘、D 盘),也支持 Linux 与 Windows 程序相互调用。
  • 轻量高效:无需单独分配硬件资源,启动速度快,资源占用远低于传统虚拟机。
  • 完整 Linux 体验:支持主流 Linux 发行版(如 Ubuntu、Debian、Fedora),包含完整的 Linux 命令行工具、包管理器和软件生态。
  • 双系统互通:可在 WSL 中使用 Windows 的环境变量,也能在 Windows 命令行(CMD/PowerShell)中调用 Linux 命令。
2、版本差异
  • WSL 1 与 2 差异
    版本 核心特点 适用场景
    WSL 1 基于翻译层实现,启动更快 简单命令行操作、轻量开发
    WSL 2 基于 Hyper-V 虚拟机技术,支持完整 Linux 内核 复杂开发环境、容器(Docker)、图形界面应用
3、适用场景
  • 开发者在 Windows 上搭建 Linux 开发环境,无需切换系统。
  • 运行 Linux 专属工具、脚本或服务(如 Shell 脚本、Node.js、Python 后端)。
  • 学习 Linux 系统操作,无需单独安装 Linux 系统。
  • 适配跨平台项目,确保开发环境与生产环境(Linux 服务器)一致。
4、注意事项
  • 硬件要求:WSL 2 需开启 CPU 虚拟化功能(需在 BIOS 中设置),部分对硬件要求极高的 Linux 应用(如 3D 渲染)可能兼容性有限。
  • 系统要求:WSL 2 要求 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)。

WSL 安装

1、开启电脑虚拟化

1.1、重启电脑,进入 BIOS/UEFI。
1.2、开机时按特定键(通常是 F2、Del、F12 或 Esc,具体取决于主板型号)。
1.3、找到虚拟化设置(通常在 Advanced 或 CPU Configuration 中):

  • Intel CPU:启用 Intel Virtualization Technology(VT-x);
  • AMD CPU:启用 SVM Mode(等同于 AMD-V)。

1.4、保存设置并退出(通常按 F10)。
1.5、重启电脑进入系统确认,右键点击任务栏/任务管理器:

  • ../img/20251109_001.jpg
2、开启子系统功能

2.1、通过图形界面开启子系统功能:

  • “开始/Windows 系统/控制面板/程序”
    ../img/20251109_002.jpg

2.2、使用命令在线更新 WSL:

  • 打开命令窗口 “开始/Windows PowerShell/Windows PowerShell” 右键点击选择 “以管理员身份运行” 运行:

    1
    
    wsl --update  #更新 WSL 内核  
    

2.3、WSL 有 WSL1 和 WSL2,推荐使用 WSL2(性能更好)

  • 以管理员身份运行 Windows PowerShell,设置使用 WSL2:

    1
    
    wsl --set-default-version 2  #设置默认 WSL 版本为 2  
    
2.4、其它操作方法

● 通过命令窗口开启子系统功能:

  • 以管理员身份运行 Windows PowerShell,开启子系统功能:

    1
    2
    3
    4
    5
    
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart  
                      #启用 WSL 功能(不指定版本,默认安装 WSL2)  
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart  
                      #启用虚拟机平台(WSL2 必需)  
    Restart-Computer  #重启计算机(必须)  
    

● 使用离线安装包更新 WSL:

  • 直接打开 WSL 微软官方 GitHub 仓库下载最新版本,例如:wsl.2.6.1.0.x64.msi,下载完后直接点击文件安装即可。
3、在线安装子系统

3.1、通过在线方式安装子系统:

  • 以管理员身份运行 Windows PowerShell,在线安装指定发行版:

    1
    2
    3
    
    wsl --list --online           #列出可安装的 Linux 发行版(例如:根据显示安装 Ubuntu-22.04)  
    wsl --install -d Ubuntu-22.04 #在线安装指定发行版:Ubuntu-22.04(默认安装到C盘,不支持指定路径)  
                                  #而 wsl --install 会默认安装 Ubuntu 版本  
    

    PS:一般情况下 C 盘空间比较紧张,建议使用【离线导入】方法安装到 D 盘!譬如:先在线安装子系统,导出离线包;再卸载此子系统,导入离线包。

4、离线导入子系统

4.1、离线包来源:

  • 微软文档 下载官方离线包(如 Ubuntu2204-221101.AppxBundle),但不要双击它,否则被强行安装到C盘。使用 7-Zip 或 WinRAR 将 Ubuntu2204-221101.AppxBundle/Ubuntu_2204.1.7.0_x64.appx/rootfs.tar.gz (tar 格式文件)提取出来(注:因为在第二级文件,所以需要手动进行两次解压)

  • 从现有子系统中导出:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    #------【方式一】导出 .tar 镜像------  
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl --list --verbose          #查看已安装的发行版(例如:根据显示导出 Ubuntu-22.04)  
    wsl --export Ubuntu-22.04 C:\temp\Ubuntu-22.04-1.tar  
                                  #导出已安装的 Linux 发行版:Ubuntu-22.04 【备注:请事先创建 C:\temp 文件夹】  
    #------【方式二】导出.vhdx 文件------  
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl --list --verbose          #查看已安装的发行版(例如:根据显示导出 Ubuntu-22.04)  
    wsl --export Ubuntu-22.04 D:\WSL\Ubuntu-22.04-2\Ubuntu-22.04-2.vhdx --vhd  
                                  #导出已安装的 Linux 发行版:Ubuntu-22.04(备注:请事先创建 D:\WSL\Ubuntu-22.04-2 文件夹)  
                                  #或直接复制虚拟磁盘文件,路径通常为 %USERPROFILE%\AppData\Local\Packages\<发行版Package>\LocalState\ext4.vhdx  
    
  • 在已有 Docker 镜像导出:

    1
    2
    3
    
    #------【方式三】导出 .tar 镜像------  
    docker ps -a                             #读出容器 ID,如:0301d8f4bc6e  
    ocker export 0301d8f4bc6e > centos8.tar  #导出 Docker 镜像  
    

4.2、通过离线方式导入子系统:

  • 从离线包导入子系统:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    #------【方式一】从 .tar 镜像导入------  
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl --import Ubuntu-22.04-1 D:\WSL\Ubuntu-22.04-1 C:\temp\Ubuntu-22.04-1.tar --version 2  #【备注:请事先创建 D:\WSL\Ubuntu-22.04-1 文件夹】  
                                  #从离线包导入 Linux 发行版:Ubuntu-22.04(实际命名为 Ubuntu-22.04-1)(--version 2:指定使用 WSL2(推荐)如果只有 WSL2 可省略)(会在目标目录生成一个单一的 .vhdx 虚拟磁盘文件)  
    wsl --list --verbose          #查看已安装的发行版(此时可看到导入的 Ubuntu-22.04-1)  
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl -d Ubuntu-22.04-1         #启动子系统:Ubuntu-22.04(实际命名为 Ubuntu-22.04-1)  
    
    # 为 Ubuntu-22.04 创建用户  
    adduser myname                #创建一个新用户(用户名为 myname)(如果用户不存在,则执行时会提示设置密码(输入时不显示,输完按回车),还会询问用户的全名、房间号等信息(可直接按回车跳过))  
    usermod -aG sudo myname       #将新用户添加到 sudo 用户组(用户名为 myname)(-a:表示 “追加”,-G:指定加入 sudo 组)  
    echo -e "[user]\ndefault=myname" | sudo tee -a /etc/wsl.conf #设置默认登录用户(默认登录 myname 用户,而非默认的 root 用户)(/etc/wsl.conf 是 WSL 核心配置文件)(-a表示追加内容,| 表示通过管道写入,tee 表将内容输出到文件并同时显示在终端)  
    vi /etc/wsl.conf              #使用 vi 查看配置文件是否正确(按 Esc 再输入 :q! 退出)  
    exit                          #退出子系统(关闭子系统)  
    
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl -d Ubuntu-22.04-1         #启动子系统:Ubuntu-22.04(实际命名为 Ubuntu-22.04-1)  
    
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    #------【方式二】从.vhdx 文件导入------  
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl --import-in-place Ubuntu-22.04-2 D:\WSL\Ubuntu-22.04-2\Ubuntu-22.04-2.vhdx  ###注意:命令是 --import-in-place  
                                  #从离线包导入 Linux 发行版:Ubuntu-22.04(实际命名为 Ubuntu-22.04-2)(一旦导入成功,该子系统会被 WSL 永久记录(除非手动卸载))(.vhdx 是虚拟磁盘文件,是完整的 WSL 根文件系统镜像)  
    wsl --list --verbose          #查看已安装的发行版(此时可看到导入的 Ubuntu-22.04-2)  
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl -d Ubuntu-22.04-2         #启动子系统:Ubuntu-22.04(实际命名为 Ubuntu-22.04-2)  
    
    # 为 Ubuntu-22.04 创建用户  
    adduser myname                #创建一个新用户(用户名为 myname)(如果用户不存在,则执行时会提示设置密码(输入时不显示,输完按回车),还会询问用户的全名、房间号等信息(可直接按回车跳过))  
    usermod -aG sudo myname       #将新用户添加到 sudo 用户组(用户名为 myname)(-a:表示 “追加”,-G:指定加入 sudo 组)  
    echo -e "[user]\ndefault=myname" | sudo tee -a /etc/wsl.conf #设置默认登录用户(默认登录 myname 用户,而非默认的 root 用户)(/etc/wsl.conf 是 WSL 核心配置文件)(-a表示追加内容,| 表示通过管道写入,tee 表将内容输出到文件并同时显示在终端)  
    vi /etc/wsl.conf              #使用 vi 查看配置文件是否正确(按 Esc 再输入 :q! 退出)  
    exit                          #退出子系统(关闭子系统)  
    
    wsl --shutdown                #强制关闭所有子系统(避免一些子系统干扰)  
    wsl -d Ubuntu-22.04-2         #启动子系统:Ubuntu-22.04(实际命名为 Ubuntu-22.04-2)  
    
    
5、完全卸载子系统

5.1、直接(完全)卸载子系统:

  • 以管理员身份运行 Windows PowerShell,直接卸载指定发行版:

    1
    2
    3
    4
    
    wsl --shutdown                  #强制关闭所有子系统(避免一些子系统干扰)(wsl --terminate <发行版名称> 命令可关闭指定子系统)  
    wsl --list --verbose            #查看已安装的发行版(此时看到将要卸载的 Ubuntu-22.04-1)  
    wsl --unregister Ubuntu-22.04-1 #卸载子系统(无论子系统安装在何盘,子系统及其所有数据将被完全删除,必须谨慎操作!!!!!!)  
    wsl --list --verbose            #查看已安装的发行版(此时就看不到子系统 Ubuntu-22.04-1)  
    

    PS:关于卸载子系统操作,无论子系统安装在何盘,子系统及其所有数据将被完全删除,必须谨慎操作!!!!!!

WSL 使用

1、子系统启动

1.1、子系统启动、设置及问题处理:

  • 命令窗口运行子系统(以管理员身份运行 Windows PowerShell)
    ../img/20251109_003.jpg
    问题:提示拒绝访问,而无法启动子系统
    ../img/20251109_004.jpg
    解决:运行 wsl --shutdown(注意:本指令会关闭所有子系统)后再马上执行〖启动子系统〗命令!
  • 直接在开始菜单打开子系统
    ../img/20251109_005.jpg
    问题:打开子系统窗口闪退
    解决:在 Windows PowerShell 命令窗口执行wsl -d Ubuntu-22.04命令运行该子系统后,再在开始菜单打开子系统!
  • 设置子系统复制粘贴快捷键
    ../img/20251109_006.jpg
    复制内容后,直接右键点击窗口输入区即可粘贴。
2、子系统应用

2.1、在子系统里跨文件系统编译一个工程:

  • 应用案例:在子系统上编译【D盘】的 ESP32 工程

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    sudo apt-get update                   #准备安装软件工具(更新包管理器)  
    sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0  
                                          #先安装编译ESP32所需软件工具(具体过程这里不细述)  
    cd /mnt/d/esp32_xxx/projs/hello_world #进入【用户工程】目录  
    export IDF_GITHUB_ASSETS="dl.espressif.cn/github_assets"  #设置临时环境变量(注意事项:如下↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓)  
    ../../esp-idf-v5.1/install.sh esp32,esp32c2               #安装目标芯片工具(之前已安装,★这里不用重复操作★,否则可能要删除 $HOME/.espressif/ 和用户工程 build/,再执行上面两行命令)  
    . ../../esp-idf-v5.1/export.sh        #通过脚本设置当前环境变量  
    idf.py fullclean                      #清除之前编译所有文件  
    idf.py build                          #编译工程并且输出固件  
    
    #--------------------------------------------------  
    #---如果用到 USB 烧录固件,先要进行连接 USB 操作---  
    #---具体操作方法请看下一节【子系统 USB】内容介绍---  
    #-------------------------------------------------------------------------------------------------------------------  
    #   #sudo usermod -a -G dialout $USER #将用户添加到[dialout]组(配置串口写操作权限,★只需操作一次即可★)  
    #   #reboot                           #修改后要重启电脑       (配置串口写操作权限,★只需操作一次即可★)  
    #   idf.py -p /dev/ttyUSB0 flash      #通过串口下载固件(比如 Windows 下的 COM3 串口,Linux 下的 /dev/ttyUSB0 串口)  
    #   idf.py -p /dev/ttyUSB0 monitor    #通过串口监控调试(Ctrl+] 组合键退出监视)  
    #-------------------------------------------------------------------------------------------------------------------  
    

    PS:个人更建议将工程放置于子系统中进行编译构建,代码编辑工作则在 Windows 环境下完成,兼顾编译稳定性与编辑便捷性。
    PS:对比 VMware 虚拟机与 WSL 的跨文件系统操作VMware 相关系统或工具极易出现因文件所有权问题无法正常运行!

3、子系统 USB

3.1、在子系统里使用 USB 设备:

  • 在 WSL2 中连接 USB 设备,需要安装【USB/IP】服务端和客户端。

  • 首先打开两个命令窗口:以管理员身份打开 PowerShell,在另外窗口启动子系统(Ubuntu)。

  • 安装 USB/IP 服务端:在 Windows 上安装(如 usbipd-win_5.3.0_x64.msi)。

  • 安装 USB/IP 客户端:在 Ubuntu 上安装(如 usbip-utils 2.0),命令如下:

    1
    2
    3
    4
    5
    
    sudo apt update                  #准备安装软件工具(更新包管理器)  
    sudo apt install linux-tools-generic hwdata  #安装 USB/IP 客户端(用于连接 Windows 的 USB 设备)  
    sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20  
                                     #设置`usbip`命令的执行工具(创建工具链软链接)  
    #usbip version                   #查看 usbip 版本(如 usbip-utils 2.0)  
    
  • USB/IP 服务端上连接:在 Windows PowerShell 上操作

    1
    2
    3
    4
    5
    6
    
    usbipd list                      #列出 Win 的 USB 设备(找到的目标设备 BUSID,如 1-3)(如果没启动则 Start-Service usbipd 启动服务,命令 Get-Service usbipd 可查看服务运行状态)  
    usbipd bind --busid 1-3          #将目标设备【绑定】到【WSL】(加载的目标设备 BUSID,如 1-3)(绑定后状态:1-3  10c4:ea60  Silicon Labs CP210x USB to UART Bridge (COM4)  Shared)  
    usbipd attach --wsl --busid 1-3  #将目标设备【附加】到【子系统客户端】                       (附加后状态:1-3  10c4:ea60  Silicon Labs CP210x USB to UART Bridge (COM4)  Attached)  
    
    #usbipd detach --busid 1-3       #将目标设备【分离】自【子系统客户端】                       (分离后状态:1-3  10c4:ea60  Silicon Labs CP210x USB to UART Bridge (COM4)  Shared)  
    #usbipd unbind --busid 1-3       #将目标设备【解绑】自【WSL】(移除的目标设备 BUSID,如 1-3)(解绑后状态:1-3  10c4:ea60  Silicon Labs CP210x USB to UART Bridge (COM4)  Not shared)  
    
  • USB/IP 客户端上查看:在子系统(Ubuntu)上操作

    1
    2
    3
    
    lsusb                            #查看已连接的 USB 设备(可查看到 USB 一些信息)  
    ls -l /dev/tty*                  #查看串口设备(若为开发板/传感器)(如串口设备通常显示为 /dev/ttyUSB0 或 /dev/ttyACM0)  
                                     #例如看到:crw-rw---- 1 root dialout 188, 0 Nov 14 20:42 /dev/ttyUSB0  
    
4、Ubuntu 与 Windows 互访

4.1、Ubuntu 与 Windows 互访及问题处理:

  • Ubuntu 访问 Windows 文件(夹),例如访问 C 盘,在 WSL 命令窗口直接运行cd /mnt/c/即可访问。
  • Windows 访问 Ubuntu 文件(夹),在 Windows 系统文件浏览器地址栏输入\\wsl$,即可看到已安装的 Linux 发行版,双击进入其文件系统(如\\wsl$\Ubuntu-22.04\home\你的用户名)。在 Windows PowerShell 命令窗口也是这样访问,例如:cd \\wsl$\Ubuntu-22.04 进入目录访问即可。
    问题:提示无权限访问,并弹出提示窗口
    ../img/20251109_007.jpg
    解决:在 Windows PowerShell 命令窗口中执行wsl -d Ubuntu-22.04命令启动该子系统后,Windows 即可恢复对 Ubuntu 文件(夹)的正常访问!
    PS:有一个开源工具 WSLHostPatcher 可用于解决 Windows 访问 Ubuntu 文件(夹)问题,具体方法请自行测试!
5、安装运行 Linux 图形应用

5.1、安装运行 Linux 图形应用:

  • 对 Windows 及 WSL 版本要求:
    要求 WSL2 及 Windows 10 内部版本 19044+。
  • 在 Windows 安装虚拟 GPU 驱动程序:
    根据电脑硬件选择下载安装即可:英特尔AMDNVIDIA
  • 在 Ubuntu 安装图形应用,如 gedit:
    1
    2
    
    sudo apt update  
    sudo apt install gedit  
    
    ../img/20251109_008.jpg
6、WSL 常用命令速查表

6.1、WSL 常用命令速查表:

  • 常用命令及功能

    命令 功能 示例
    wsl --update 更新 WSL 内核
    wsl --status 查看 WSL 状态信息
    wsl --set-default-version 2 设置默认 WSL 版本为 2
    wsl --list --verbose 查看已安装的[发行版][运行状态][WSL版本] wsl -l -v(简写)
    wsl --set-version <发行版名称> 2 将指定发行版切换为 WSL 2 wsl --set-version Ubuntu-22.04 2
    wsl --set-default <发行版名称> 修改默认 WSL 实例 wsl --set-default Ubuntu-22.04
    wsl --shutdown 关闭所有 WSL 实例 wsl --shutdown
    wsl --terminate <发行版名称> 终止指定发行版 wsl -t Ubuntu-22.04(简写)
    wsl --distribution <发行版名称> 启动指定发行版 wsl -d Ubuntu-22.04(简写)
    wsl --user <用户名> 以指定用户运行默认 WSL 实例 wsl --user root
    wsl --list --online 列出可安装的 Linux 发行版(需要保持网络畅通) wsl -l -o(简写)
    wsl --install -d <发行版名称> 安装指定发行版(需要保持网络畅通) wsl --install -d Ubuntu-22.04
    wsl --unregister <发行版名称> 卸载指定发行版【谨慎操作!

    PS:“WSL 实例”、“发行版”、“子系统” 都是指某个子系统(linux)!

WSL 比较

点击展开内容

Cygwin、UnxUtils 和 WSL(Windows Subsystem for Linux)都是为 Windows 提供类 Unix 工具或环境的方案,但三者的设计目标、技术原理和适用场景差异显著。以下从核心定位、功能特性、适用场景等维度进行对比:

一、核心定位与技术原理

工具 核心定位 技术原理
UnxUtils 轻量的 Unix 命令移植工具集,仅提供常用 Unix 命令的 Windows 可执行文件。 将单个 Unix 命令(如 grepsed)直接编译为 Windows 原生 .exe,无需依赖层,直接在 CMD/PowerShell 中运行。
Cygwin 提供 类 Unix 工具链与开发环境,支持编译和运行 Unix 程序。 通过 cygwin1.dll 模拟 Linux 系统调用,将 Unix 程序的系统调用翻译为 Windows 调用,需通过 Cygwin 工具链重新编译程序。
WSL 提供 完整的 Linux 发行版环境,支持原生 Linux 二进制程序和生态。 WSL 1 基于翻译层,WSL 2 基于轻量虚拟机和完整 Linux 内核,直接运行原生 Linux 程序(无需重新编译)。

二、核心功能对比

功能维度 UnxUtils Cygwin WSL(以 WSL 2 为主)
工具覆盖范围 仅包含基础命令(约 100+,如 lsawk),无包管理。 包含完整工具链(gccbashssh 等),支持通过 apt-cyg 扩展。 支持所有 Linux 发行版工具(通过 apt/yum 安装),覆盖开发、服务、容器等全场景。
兼容性 仅支持命令的基础功能,部分参数与原生 Unix 有差异(如路径处理)。 需通过 Cygwin 编译的程序才能运行,部分复杂 Unix 程序可能不兼容。 直接运行原生 Linux 二进制文件(.deb/.rpm),兼容性接近真实 Linux 系统。
性能 极轻量,单命令启动快,无额外开销。 系统调用翻译有开销,IO 密集型任务(如文件操作)较慢。 本地文件系统性能接近原生 Linux,访问 Windows 文件稍慢,整体性能远高于前两者。
文件系统互通 直接使用 Windows 路径(如 C:\),无权限模拟。 映射 Windows 磁盘为 /cygdrive/c,模拟 Linux 权限(有限)。 挂载 Windows 磁盘到 /mnt/c,Windows 可通过 \\wsl$ 访问 WSL 文件,权限管理完整
生态与扩展性 无扩展性,仅固定命令集。 支持编译 Unix 程序,可搭建简单开发环境(如 C 语言)。 支持完整 Linux 生态:服务(nginxMySQL)、容器(Docker)、图形应用(WSLg)等。
系统要求 无特殊要求,支持所有 Windows 版本。 支持 Windows 7+,无需虚拟化功能。 需 Windows 10 2004+ 或 11,WSL 2 需开启 CPU 虚拟化。
资源占用 极低(仅单个 .exe 文件)。 中等(依赖 cygwin1.dll 和工具集)。 较高(包含 Linux 内核),但远低于传统虚拟机。

三、适用场景

选择 UnxUtils 的情况
  • 临时轻量需求:仅需少数 Unix 命令(如 grep 文本搜索、tar 解压),无需复杂环境。
  • 快速集成:在 CMD/PowerShell 脚本中直接调用 Unix 命令,无需额外配置环境。
  • 旧系统或资源受限:适用于 Windows XP 等老旧系统,或对资源占用有严格限制的场景。
选择 Cygwin 的情况
  • 跨平台开发:需要在 Windows 上编译针对 Unix/Linux 的程序(依赖 Cygwin 工具链)。
  • 中等复杂度工具链:需要 bash 脚本、make 编译、ssh 远程等功能,但无需完整 Linux 生态。
  • 不支持 WSL 的系统:如 Windows 7,或无法开启虚拟化的设备。
选择 WSL 的情况
  • 深度开发环境:需要完整 Linux 工具链(如 Python/Node.js 后端、systemd 服务)。
  • 容器与云原生:使用 Docker、Kubernetes 等工具,或开发云原生应用(与生产环境一致)。
  • 复杂脚本与服务:运行依赖 Linux 特有库的程序(如 ffmpeg 高级功能、科研软件)。
  • 图形应用:需要运行 Linux GUI 程序(如 VS Code 远程、GIMP 等)。

四、总结

工具 优势 劣势 一句话定位
UnxUtils 极轻量、零配置、兼容性广 功能有限、无扩展性、命令兼容性一般 “Unix 命令的 Windows 便携版”
Cygwin 支持开发工具链、可编译 Unix 程序 性能一般、兼容性依赖编译、配置较繁琐 “类 Unix 开发模拟器”
WSL 原生 Linux 体验、完整生态、高性能 系统版本要求高、需虚拟化、资源占用较高 “Windows 中的 Linux 子系统”

选择建议

  • 简单命令需求 → UnxUtils;
  • 跨平台编译或老旧系统 → Cygwin;
  • 开发、容器、完整 Linux 环境 → WSL(首选 WSL 2)。