2026年6月2日,微软正式发布了 Microsoft Coreutils for Windows 的首个正式版本 v2026.5.29,标志着这家操作系统巨头第一次以官方身份,把经过 Rust 重写的 UNIX 核心工具集原生地带到了 Windows 平台。对于长期在 Windows、Linux、macOS、WSL 与容器之间来回切换的开发者而言,这是一件期盼已久的事情。
一、项目背景:跨平台开发者之痛
长期以来,Windows 与 UNIX 生态之间存在一道隐形的"工具鸿沟":
- 大量 CI 脚本、运维脚本、构建脚本默认依赖
ls、cat、cp、rm、grep、find这类 GNU 工具; - 开发者要么借助 WSL,要么依赖 Git for Windows、MSYS2、Cygwin 这类第三方移植,要么就只能把脚本"翻译"成 PowerShell —— 维护成本都不低;
- 即使引入了第三方 GNU 工具,命令参数、行为细节也常常与 Linux 上的对应工具存在微妙差异。
微软 Coreutils for Windows 正是为了解决这个痛点:让 Linux、macOS、WSL、容器与 Windows 上的同一段命令、同一套参数、同一种管道组合,能够开箱即用地工作。
二、项目简介
Microsoft Coreutils for Windows 是微软在 GitHub 上以 microsoft/coreutils 名义维护的开源项目。它并不是从零写起,而是站在开源社区的肩膀上:
| 组件 | 上游项目 | 说明 |
|---|---|---|
| 核心工具集 | uutils/coreutils | GNU coreutils 的 Rust 重写版 |
| 查找工具 | uutils/findutils | GNU findutils 的 Rust 重写版 |
| 文本搜索 | uutils/grep | 新编写的 Rust 实现 |
这三套工具被打包成单一的多调用二进制文件,配合 DOS 时代 find 与 sort 的兼容垫片、以及一个支持跨平台 glob 模式的 PowerShell 包装器,组成完整的 Coreutils for Windows 套件。
项目当前仍处于 preview(预览) 状态,仅在 2026 年 6 月 2 日发布了首个正式 Release。
三、技术亮点
从仓库的语言占比即可看出项目的技术组成:
| 语言 | 占比 | 用途 |
|---|---|---|
| Rust | 39.1% | 核心二进制实现,继承自 uutils 上游 |
| PowerShell | 35.1% | 构建脚本、CI/CD、辅助脚本 |
| Inno Setup | 25.8% | Windows 安装包打包 |
几个值得关注的点:
- Rust 实现:在内存安全和性能上比传统 C 实现更有优势,也与微软近年来在 Rust 方向上的投入一脉相承。
- 与上游同步:仓库
CONTRIBUTING.md明确说明,代码变更会在本仓库与上游 uutils 项目之间流转——既享受了社区成果,也承担了同步责任。 - MIT 许可:完全宽松的许可证,便于企业与个人在商业场景下使用。
- 多调用二进制:以单一可执行文件承载上百个命令,部署与分发都更轻量。
四、安装与运行要求
最便捷的安装方式是通过 Windows 包管理器 WinGet 一键安装:
| |
也可以从 Release 页面 下载预编译二进制手动部署。
运行要求:
- 强制要求 PowerShell 7.4 或更高版本,旧版 PowerShell 不受支持;
- CMD 可以使用,但部分功能受限;
- 推荐 Windows 11,理论上也支持 Windows 10。
五、命令支持矩阵
Coreutils for Windows 并未"一股脑"把 GNU coreutils 的所有命令都搬过来,而是经过精心设计以避免破坏 Windows 现有生态。下面是核心命令的支持情况:
| 命令 | CMD | PowerShell 7.4+ | 备注 |
|---|---|---|---|
cat | ✅ | ⚠️ | — |
cp | ✅ | ⚠️ | — |
date | ⚠️ | ⚠️ | — |
find | ✅ | ✅ | 集成自原 DOS 命令 |
hostname | ✅ | ✅ | Windows 内置的超集 |
kill | 🛑 | 🛑 | Windows 缺乏信号支持 |
ls | ✅ | ⚠️ | — |
mkdir | ⚠️ | ⚠️ | — |
mv | ✅ | ⚠️ | — |
pwd | ✅ | ⚠️ | — |
rm | ✅ | ⚠️ | — |
rmdir | ⚠️ | ⚠️ | — |
sleep | ✅ | ⚠️ | — |
sort | ✅ | ✅ | 集成自原 DOS 命令 |
tee | ✅ | ⚠️ | — |
timeout | 🛑 | 🛑 | 依赖 kill 功能 |
uptime | ✅ | ⚠️ | — |
dir、more、whoami 等 | 🛑 | 🛑 | 与内置 DOS 命令严重冲突 |
图例:✅ 已发布且可用 · ⚠️ 已发布但与内置命令冲突 · 🛑 未发布
故意未包含的命令
以下命令虽然在上游 uutils 中存在,但因依赖 POSIX 独有概念、可能破坏现有 Windows 脚本或在 Windows 上无实用价值而被移除:
- 可能在未来加入:
dd - Windows 上无意义:
dircolors、shred、sync、uname - 仅限 POSIX 概念:
chcon、chgrp、chmod、chown、chroot、groups、hostid、id、install、logname、mkfifo、mknod、nice、nohup、pathchk、pinky、runcon、stdbuf、stty、tty、users、who
也就是说,如果你习惯了在 Linux 上
chmod 755 script.sh,那么在 Windows 的 Coreutils 套件里依然要使用 Windows 原生的 ACL 机制。
六、Windows 平台差异处理
Coreutils for Windows 的文档详细列出了 Windows 与 UNIX 之间的关键差异,以及在 Windows 上的应对策略:
| 差异点 | 说明 |
|---|---|
| CRLF 行尾符 | Windows 文本文件常用 \r\n,多数工具透明处理,但正则 $ 匹配与精确字节计数会受影响 |
无 /dev/null | 使用 NUL 替代,例如 find . -name "*.log" > NUL |
| 无 POSIX 信号 | SIGHUP、SIGPIPE、SIGUSR 不可用,但 Ctrl+C(SIGINT)工作正常 |
| 路径分隔符 | / 和 \ 都接受,但部分工具输出仍使用 \ 分隔 |
| 文件权限 | Windows 使用 ACL 而非 POSIX 权限位,find -perm 等谓词可能行为不同或不可用 |
| 符号链接 | 读取已存在符号链接无需提权;创建新链接需要开发者模式或提权终端 |
这一节尤其值得开发者留意——> 之后不要写 /dev/null,而要写 NUL,这能省去很多踩坑时间。
七、当前状态与社区反响
截至本文撰写时(2026 年 6 月 3 日):
- 首个正式版本:
v2026.5.29,发布于 2026 年 6 月 2 日 - GitHub Stars:约 1.6k
- Forks:21
- 许可证:MIT
- Issues / PRs:16 个开放 Issue,9 个开放 PR
社区对此次发布的反应以正面为主——在 release 页面中可以看到"🎉 庆祝"、"🚀 火箭"、"❤️ 红心"等表情反应相当密集。
八、为什么这件事值得开发者关注
微软 Coreutils for Windows 的发布,表面上是"多了几个命令",实质上意义远不止于此:
- 官方背书:这是微软首次以官方仓库身份维护 UNIX 工具集,长期支持与生态整合都有保障。
- 脚本可移植性大幅提升:今后编写跨平台脚本时,“先在 Linux 上跑通,再到 Windows 上跑"的工作流会顺畅很多。
- Rust 在系统编程领域的又一次胜利:核心系统工具的 Rust 重写趋势,从 ripgrep、fd、bat 一直延续到如今的 uutils 系列,生态越来越完善。
- 降低 WSL 依赖:对于一些原本"为了一两条命令就要切到 WSL"的工作场景,如今可以直接在 PowerShell 中完成。
九、总结
Microsoft Coreutils for Windows 是微软在 2026 年交出的一份诚意之作:它把经过开源社区验证的 uutils 系列工具,以官方身份整合到 Windows 平台,并细致地处理了与 Windows 现有命令的冲突问题。虽然目前仍处于 preview 状态、首个版本号 v2026.5.29 距离发布也才一天,但凭借微软的维护力度与 uutils 上游的成熟度,这个项目值得每一个跨平台开发者去尝试。
立即尝试:
1winget install Microsoft.Coreutils然后打开 PowerShell 7.4+,敲下
ls、cat、rm,感受一下"在 Windows 上像在 Linux 一样工作"的丝滑吧。