Windows 终于有了原生 Linux 命令:微软 coreutils 让你告别 WSL、Cygwin 和 Git Bash
先问一个问题:
你有没有过这种体验——在 Windows 终端里想用
grep过滤一下日志,结果 PowerShell 告诉你grep不是内部命令;想用find批量查找文件,结果 Windows 的find和 Linux 的find完全是两个东西;写了个跨平台脚本,到了 Windows 上就得全部重写?这不是你的问题,这是 Windows 和 Linux 命令行之间那道"柏林墙"的问题。
好消息是,微软自己动手拆墙了。2025 年底,微软在 GitHub 上开源了 coreutils 项目——一个原生 Windows 版本的 Linux 核心命令集。不需要 WSL,不需要 Cygwin,不需要 Git Bash,一条
winget install就能让你的 Windows 终端直接听懂ls、grep、sed、awk。
图 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 脚本里的 cp、mv、rm、chmod 在 Windows 的 cmd 里全都不认识。你有几个选择:
- 把脚本用 PowerShell 重写一遍(费时费力)
- 让 Windows 用户装 Git Bash(多一个依赖)
- 让 Windows 用户装 WSL(太重了)
场景三: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 子系统,功能最完整。但它有几个问题:
- 重:WSL2 本质上是跑了一个完整的 Linux 虚拟机,占用内存动辄几个 GB
- 慢:首次启动要好几秒,不适合在脚本里频繁调用
- 文件系统隔离:WSL 有自己的文件系统,和 Windows 的文件系统是两套。你在 WSL 里
ls /mnt/c/Users,路径和 Windows 的C:\Users是两套表达方式 - 不适合轻量场景:你只是想
grep一下日志,却要启动一个完整的 Linux 内核
打个比方:WSL 就像为了喝杯牛奶养了一头牛。牛奶确实好喝,但养牛的成本太高了。
2.2 Git Bash / MSYS2
Git for Windows 自带的 Git Bash 提供了基础的 Linux 命令。但它的问题也很明显:
- 功能不全:
sed、awk等高级命令要么没有,要么版本很老 - 路径转换头疼:
/c/Users和C:\Users之间的转换经常出 bug - 性能一般:本质上是一个兼容层,不是原生实现
- 维护靠社区:不是微软官方维护,更新节奏不稳定
打个比方:Git Bash 就像用吸管喝汤——能喝到一些,但喝不痛快,稍微大块的料就卡住了。
2.3 Cygwin
Cygwin 是 Windows 上最老的 POSIX 兼容层,诞生于 1995 年。它试图在 Windows 上完整模拟 POSIX API,但:
- 兼容性差:很多程序编译不过去
- 性能差:POSIX 模拟层的开销很大
- 部署麻烦:需要安装一大坨 DLL
- 已经过时:WSL 出现后,Cygwin 的使用场景越来越少
打个比方: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 的话。
图 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 |
有几个命令是故意不提供的:
dir、expand、more、timeout、whoami:和 Windows 内置命令冲突,不发货chmod、chown、stty:纯 POSIX 概念,Windows 没有对应的权限模型kill:Windows 没有 POSIX 信号机制
4. 安装和使用
4.1 安装
最简单的安装方式是用 winget:
winget install Microsoft.Coreutils
如果你想静默安装(适合批量部署):
winget install Microsoft.Coreutils --silent
也可以从 GitHub Releases 页面下载 .exe 安装包或 .zip 压缩包手动安装。
图 2:使用 winget 一键安装 Microsoft.Coreutils。

图 3:微软在 GitHub 上开源的 coreutils 项目页面。
4.2 系统要求
- PowerShell 7.4 或更高版本(推荐 7.6+,支持波浪号路径)
- Windows 10 或 Windows 11
- 创建符号链接需要开发者模式或管理员终端
4.3 验证安装
安装完成后,打开 PowerShell,试试这些命令:
# 查看版本
coreutils --version
# 试试 ls
ls
# 试试 grep
echo "hello world" | grep hello
# 试试管道组合
cat README.md | grep "##" | wc -l
图 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 里用
ls和curl等别名,注意 coreutils 的命令可能会和 PowerShell 的别名冲突。可以通过调整PATH顺序来控制优先级,或者使用coreutils-manager disable <命令>来禁用特定命令。
5. 与其他方案对比
图 6:四种方案在启动速度、内存占用、原生性、命令完整度等维度的全面对比。
| 特性 | WSL2 | Git Bash | Cygwin | coreutils |
|---|---|---|---|---|
| 启动速度 | 慢(秒级) | 快 | 快 | 极快(毫秒级) |
| 内存占用 | GB 级 | 几十 MB | 几十 MB | 几 MB |
| 原生性 | 虚拟机 | 兼容层 | 兼容层 | 原生 PE 二进制 |
| 命令完整度 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 文件系统 | 隔离 | 路径转换 | 路径转换 | 直接访问 |
| 官方维护 | 微软 | Git 社区 | 社区 | 微软 |
| 安装复杂度 | 中等 | 简单 | 复杂 | 极简(一条命令) |
| 适合场景 | 完整 Linux 开发环境 | Git 操作 | 老旧系统兼容 | 命令行工具 / 脚本 / CI |
一句话总结:如果你需要完整的 Linux 开发环境(跑 Docker、编译 C++ 项目、运行 Linux 服务),WSL2 仍然是最佳选择。但如果你只是想在 Windows 终端里用
grep、sed、awk处理文本,或者想让跨平台脚本在 Windows 上也能跑——coreutils 是最轻量、最干净的选择。
6. 实际使用场景
图 7:有了 coreutils 之后,日志分析、跨平台脚本、AI Agent 自动化等场景的体验变化。
6.1 日志分析
# 找出日志中所有 ERROR,按出现次数排序
type app.log | grep ERROR | cut -d' ' -f3 | sort | uniq -c | sort -rn
不用再记 Select-String、Group-Object、Sort-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 生成的 grep、find、awk 命令可以直接在 Windows 上运行。
7. Q&A
Q: coreutils 和 WSL 冲突吗?
A: 不冲突。它们是完全独立的两套东西。WSL 是一个 Linux 子系统,coreutils 是一组原生 Windows 命令。你可以同时安装,互不影响。
Q: 支持所有 GNU 命令吗?
A: 不支持全部。dir、expand、more、timeout、whoami 因为和 Windows 内置命令冲突被排除;chmod、chown、stty 因为 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 别名(如 ls → Get-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 的话。
这就像你不需要为了喝杯咖啡去买一台意式咖啡机——有时候,一包速溶咖啡就够了。
参考链接: