中文 English

Windows 终于有了原生 Linux 命令:微软 coreutils 让你告别 WSL、Cygwin 和 Git Bash

发布时间: 2026-06-27
Windows Linux coreutils WSL 命令行 开发工具 微软 开源 Rust 跨平台

先问一个问题:

你有没有过这种体验——在 Windows 终端里想用 grep 过滤一下日志,结果 PowerShell 告诉你 grep 不是内部命令;想用 find 批量查找文件,结果 Windows 的 find 和 Linux 的 find 完全是两个东西;写了个跨平台脚本,到了 Windows 上就得全部重写?

这不是你的问题,这是 Windows 和 Linux 命令行之间那道"柏林墙"的问题。

好消息是,微软自己动手拆墙了。2025 年底,微软在 GitHub 上开源了 coreutils 项目——一个原生 Windows 版本的 Linux 核心命令集。不需要 WSL,不需要 Cygwin,不需要 Git Bash,一条 winget install 就能让你的 Windows 终端直接听懂 lsgrepsedawk

微软 coreutils:让 Windows 原生支持 Linux 命令

图 1:微软 coreutils 项目——在 Windows 上原生运行 Linux 命令,无需 WSL。


1. 问题背景:Windows 用户的"命令之痛"

如果你是一个在 Windows 上做开发的程序员,或者是一个需要在 Windows 服务器上做运维的工程师,你一定经历过下面这些场景。

场景一:日志分析

生产环境出问题了,你需要快速从几百兆的日志文件里找出包含 ERROR 的行,顺便统计一下每种错误出现了多少次。在 Linux 上,一行命令搞定:

grep ERROR app.log | cut -d' ' -f3 | sort | uniq -c | sort -rn

在 Windows 上呢?你得打开 PowerShell,写出这样的东西:

Select-String -Path app.log -Pattern "ERROR" | ForEach-Object { ($_.Line -split ' ')[2] } | Group-Object | Sort-Object Count -Descending

且不说语法有多啰嗦,光是记住这些 cmdlet 的名字就够让人头疼的了。更要命的是,如果你在 Stack Overflow 上搜解决方案,99% 的答案都是 Linux 命令——你得自己"翻译"成 PowerShell。

场景二:跨平台脚本

你写了一个 CI/CD 脚本,在 Linux Runner 上跑得好好的。现在团队里有人用 Windows,你想让脚本也能在 Windows 上跑。你发现 bash 脚本里的 cpmvrmchmod 在 Windows 的 cmd 里全都不认识。你有几个选择:

场景三:AI Agent 自动化

越来越多的开发者开始用 AI Agent 做自动化运维。问题是,大多数 AI 模型生成的命令都是 Linux 风格的。你让 Agent 在 Windows 上执行 ls -la /var/log,它根本不知道 Windows 没有 /var/log 这个路径。你得在 prompt 里反复强调"这是在 Windows 上,请用 PowerShell 语法"——即便如此,Agent 还是时不时冒出 Linux 命令。

打个比方:这就像你买了一台德国车,但方向盘在右边,每次转弯都要在心里"翻译"一遍。不是不能开,但每次开都很累。


2. 现有方案的困境

在 coreutils 出现之前,Windows 用户想要运行 Linux 命令,主要有三条路。每条路都有各自的坑。

2.1 WSL(Windows Subsystem for Linux)

WSL 是微软官方的 Linux 子系统,功能最完整。但它有几个问题:

打个比方:WSL 就像为了喝杯牛奶养了一头牛。牛奶确实好喝,但养牛的成本太高了。

2.2 Git Bash / MSYS2

Git for Windows 自带的 Git Bash 提供了基础的 Linux 命令。但它的问题也很明显:

打个比方:Git Bash 就像用吸管喝汤——能喝到一些,但喝不痛快,稍微大块的料就卡住了。

2.3 Cygwin

Cygwin 是 Windows 上最老的 POSIX 兼容层,诞生于 1995 年。它试图在 Windows 上完整模拟 POSIX API,但:

打个比方:Cygwin 就像在汽油车里装了一个柴油发动机适配器——能用,但噪音大、油耗高、还容易坏。


3. coreutils 是什么

coreutils 是微软官方在 GitHub 上开源的项目(microsoft/coreutils),目前处于 Preview 阶段。它的核心思路非常简单:

把 Linux 世界最常用的那些命令,用 Rust 重写一遍,编译成原生的 Windows PE 可执行文件。

它不是一个兼容层,不是一个模拟器,不是一个虚拟机。它就是一个个原生的 .exe 文件,就像 notepad.exe 一样,双击就能跑。

3.1 技术架构

coreutils 基于 uutils/coreutils 项目——一个用 Rust 语言从头实现的 GNU coreutils 替代品。uutils 的目标是"和 GNU 原版输出完全一致",任何差异都被视为 bug。Ubuntu 从 25.10 版本开始已经默认搭载 uutils。

微软做的事情是:把 uutils 的核心代码拿过来,针对 Windows 平台做适配和优化,打包成一个多合一二进制文件(multi-call binary,类似 BusyBox),然后通过 winget 分发。

┌─────────────────────────────────────────────┐
│                 coreutils.exe                │
│         (单个原生 Windows PE 二进制)           │
├─────────────────────────────────────────────┤
│  基于 uutils/coreutils (Rust 重写)            │
│  + findutils + grep                         │
├─────────────────────────────────────────────┤
│  直接调用 Windows NT Kernel API              │
│  不经过 POSIX 兼容层 / 虚拟机 / 模拟器         │
└─────────────────────────────────────────────┘

打个比方:WSL 是在你家里隔了一个"Linux 小房间",你进去才能用 Linux 的东西。coreutils 是直接给你家装上了"Linux 语言能力"——你站在 Windows 的客厅里,张嘴就能说 Linux 的话。

WSL2 vs coreutils 架构对比

图 5:WSL2 需要经过 5 层抽象(Linux 用户态 → Linux 内核 → Hyper-V → Windows),而 coreutils 只有 2 层(coreutils.exe → Windows NT Kernel),直接调用系统 API。

3.2 支持的命令

截至 v2026.6.16 版本,coreutils 支持的命令包括但不限于:

类别 命令
文件操作 ls, cp, mv, rm, cat, touch, mkdir, ln
文本处理 grep, sed, awk, cut, sort, uniq, wc, head, tail
查找 find, xargs
系统信息 date, echo, sleep, tee, basename, dirname
其他 tr, paste, split, comm, join, shuf

有几个命令是故意不提供的


4. 安装和使用

4.1 安装

最简单的安装方式是用 winget:

winget install Microsoft.Coreutils

如果你想静默安装(适合批量部署):

winget install Microsoft.Coreutils --silent

也可以从 GitHub Releases 页面下载 .exe 安装包或 .zip 压缩包手动安装。

winget 安装 Microsoft.Coreutils

图 2:使用 winget 一键安装 Microsoft.Coreutils。

microsoft/coreutils GitHub 仓库

图 3:微软在 GitHub 上开源的 coreutils 项目页面。

4.2 系统要求

4.3 验证安装

安装完成后,打开 PowerShell,试试这些命令:

# 查看版本
coreutils --version

# 试试 ls
ls

# 试试 grep
echo "hello world" | grep hello

# 试试管道组合
cat README.md | grep "##" | wc -l

coreutils 命令运行效果

图 4:在 Windows 终端中直接使用 Linux 命令,无需任何翻译。

4.4 注意事项

Windows 和 Linux 有一些根本性的差异,使用 coreutils 时需要了解:

差异点 Linux Windows (coreutils)
空设备 /dev/null NUL
行尾符 \n (LF) \r\n (CRLF),大部分命令透明处理
路径分隔符 / /\ 都接受
信号 SIGTERM, SIGKILL Ctrl+C (SIGINT)
权限 POSIX rwx Windows ACL
转义字符 \ ` (反引号)

小提示:如果你习惯在 PowerShell 里用 lscurl 等别名,注意 coreutils 的命令可能会和 PowerShell 的别名冲突。可以通过调整 PATH 顺序来控制优先级,或者使用 coreutils-manager disable <命令> 来禁用特定命令。


5. 与其他方案对比

方案对比:WSL2 · Git Bash · Cygwin · coreutils

图 6:四种方案在启动速度、内存占用、原生性、命令完整度等维度的全面对比。

特性 WSL2 Git Bash Cygwin coreutils
启动速度 慢(秒级) 极快(毫秒级)
内存占用 GB 级 几十 MB 几十 MB 几 MB
原生性 虚拟机 兼容层 兼容层 原生 PE 二进制
命令完整度 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
文件系统 隔离 路径转换 路径转换 直接访问
官方维护 微软 Git 社区 社区 微软
安装复杂度 中等 简单 复杂 极简(一条命令)
适合场景 完整 Linux 开发环境 Git 操作 老旧系统兼容 命令行工具 / 脚本 / CI

一句话总结:如果你需要完整的 Linux 开发环境(跑 Docker、编译 C++ 项目、运行 Linux 服务),WSL2 仍然是最佳选择。但如果你只是想在 Windows 终端里用 grepsedawk 处理文本,或者想让跨平台脚本在 Windows 上也能跑——coreutils 是最轻量、最干净的选择。


6. 实际使用场景

Before & After:有了 coreutils 之后的变化

图 7:有了 coreutils 之后,日志分析、跨平台脚本、AI Agent 自动化等场景的体验变化。

6.1 日志分析

# 找出日志中所有 ERROR,按出现次数排序
type app.log | grep ERROR | cut -d' ' -f3 | sort | uniq -c | sort -rn

不用再记 Select-StringGroup-ObjectSort-Object 这些长名字了。

6.2 批量文件处理

# 找出所有超过 100MB 的 .log 文件,按大小排序
find . -name "*.log" -size +100M -exec ls -lh {} \; | sort -k5 -hr

6.3 CI/CD 脚本

# GitHub Actions 中,Windows Runner 也能跑同样的脚本
- name: Analyze logs
  run: |
    grep ERROR build.log | wc -l
    find dist/ -name "*.js" | xargs wc -l | sort -rn | head -10    

6.4 AI Agent 自动化

有了 coreutils,AI Agent 在 Windows 上也能执行 Linux 风格的命令。你不再需要在 prompt 里反复强调"请用 PowerShell 语法"——Agent 生成的 grepfindawk 命令可以直接在 Windows 上运行。


7. Q&A

Q: coreutils 和 WSL 冲突吗?

A: 不冲突。它们是完全独立的两套东西。WSL 是一个 Linux 子系统,coreutils 是一组原生 Windows 命令。你可以同时安装,互不影响。

Q: 支持所有 GNU 命令吗?

A: 不支持全部。direxpandmoretimeoutwhoami 因为和 Windows 内置命令冲突被排除;chmodchownstty 因为 Windows 没有对应的 POSIX 概念被排除;kill 因为 Windows 没有 POSIX 信号被排除。但日常使用的 90% 以上的命令都支持。

Q: 性能怎么样?

A: 因为是原生 Windows PE 二进制,不是模拟层,性能非常接近 Linux 原生版本。对于文本处理、文件操作等场景,比 WSL 快一个数量级(不需要启动 Linux 内核)。

Q: 能在 Windows Server 上用吗?

A: 可以。只要系统满足 PowerShell 7.4+ 的要求即可。Windows Server 2019/2022 都支持。

Q: 和 PowerShell 的管道兼容吗?

A: 大部分命令兼容,但需要注意:PowerShell 的管道传递的是 .NET 对象,而 coreutils 的管道传递的是文本流。如果你在 PowerShell 别名(如 lsGet-ChildItem)和 coreutils 的 ls 之间混用,可能会遇到兼容性问题。建议在 PowerShell 7.4+ 环境下使用,微软已经做了 PSReadLine 集成来改善体验。

Q: 这个项目会长期维护吗?

A: 微软官方出品,GitHub 上持续更新(截至 2026 年 6 月已发布多个版本),基于的 uutils 项目也在活跃开发中。Ubuntu 25.10 已经默认搭载 uutils,说明这个方向得到了业界认可。


8. 总结

微软 coreutils 解决了一个存在了几十年的问题:Windows 和 Linux 命令行之间的鸿沟

它不是要取代 WSL,也不是要取代 PowerShell。它只是给你多了一个选择——当你只想用 grep 过滤一下日志、用 find 查找几个文件、用 sed 替换几行文本的时候,不需要启动一个完整的 Linux 子系统,不需要安装 Git Bash,不需要学 PowerShell 的 cmdlet。

一条 winget install Microsoft.Coreutils,你的 Windows 终端就能听懂 Linux 的话。

这就像你不需要为了喝杯咖啡去买一台意式咖啡机——有时候,一包速溶咖啡就够了。


参考链接: