microsoft/coreutils · 上手攻略
- 仓库:microsoft/coreutils
- 链接:https://github.com/microsoft/coreutils
- 分类:developer-tool · windows · cli
- 作者:Tom
- 更新:2026-08-11
它是什么
microsoft/coreutils 是微软官方维护的 Windows 版 GNU coreutils 套装,将 Linux 常用的命令行工具(ls、cp、mv、rm、grep、find 等 75+ 个)打包成单个多调用二进制文件(multi-call binary),在 Windows 上原生运行,无需 WSL、虚拟机或 Git Bash。
上游基于 uutils/coreutils、findutils 和 grep,由微软打包成可一键安装的 Windows 原生程序(Build 2026 正式发布)。
解决什么问题:
- 在 Linux/macOS/WSL 写好的 Shell 脚本迁移到 Windows 时,报错"command not found"
- 需要在 Windows 上用 grep、find、sort、uniq 等工具做文本处理
- 跨平台开发者在 Windows 和 Linux 之间频繁切换,需要统一的命令行体验
定位:Preview(预览版),不建议在生产服务器环境中使用。
快速安装
WinGet(推荐)
# 安装(PowerShell 7.4+ 必须)
winget install Microsoft.Coreutils
# 安装到指定用户(自动修改 PowerShell profile)
winget install Microsoft.Coreutils --interactive
GitHub Releases 手动下载
访问 https://github.com/microsoft/coreutils/releases/latest 下载对应架构的安装包:
| 架构 | 文件名 |
|---|---|
| x64 | coreutils-2026.6.16-x64.exe |
| ARM64 | coreutils-2026.6.16-arm64.exe |
安装后工具位于 C:\Program Files\coreutils\bin\,需要手动将这个路径加入系统 PATH。
⚠️ WinGet 安装时会自动配置 PATH;手动下载安装需要自行配置环境变量。
系统要求
- Windows 10/11
- PowerShell 7.4+ 必须(强烈建议 PowerShell 7.6+ 以获得
~支持) - 支持 x64 和 ARM64
核心用法
安装后验证
# 检查核心命令是否可用
ls --version
cp --version
grep --version
find --version
日常使用示例
# 列出当前目录文件(类似 Linux ls)
ls -la
# 递归查找所有 .log 文件
find . -name "*.log"
# 搜索文件内容(支持正则)
grep -r "ERROR" .\logs\
# 排序并去重
Get-Content data.txt | sort | uniq
# 复制目录树
cp -r ./src ./backup
# 删除文件(慎用)
rm myfile.txt
# 统计行数
wc -l data.csv
# 管道与其他命令配合
ls | sort | head -10
跨平台脚本迁移
在 Windows 上直接运行 Linux/macOS 写好的脚本:
# 脚本中的这些命令现在可以直接跑:
./deploy.sh # 原来在 Linux 上跑的部署脚本
python3 build.py | grep "OK" # 管道组合
find . -name "*.py" -execdosomething
禁用内置别名(重要)
PowerShell 内置了 ls(指向 Get-ChildItem)等别名,直接输入 ls 走的是 PowerShell 原生命令而非 coreutils 版本。需要用函数或删除别名:
# 方式一:使用函数(推荐,方便传参数)
function ll { ls -la --color=auto @args }
# 方式二:删除别名后用完整路径
Remove-Item alias:ls
Set-Alias -Name ls -Value "C:\Program Files\coreutils\bin\ls.exe"
# 方式三:CMD 中直接用(无别名冲突)
cmd /c "ls -la"
⚠️ 警告:在 PowerShell 中使用别名(如
ll、ls)会导致二进制流兼容性问题,部分工具在管道中不能正常工作(如xargs、find),应优先使用完整命令名。
完整命令列表
来源:README command table(截至 v2026.6.16)。⚠️
kill不可用(Windows 无 POSIX 信号);dd暂未包含;dircolors、shred、sync、uname对 Windows 无意义未打包。
✅ 原生可用(Linux/macOS 直接迁移)
| 命令 | 说明 |
|---|---|
cat |
连接/打印文件内容 |
cp |
复制文件/目录 |
ls |
列出目录内容 |
mkdir |
创建目录 |
mv |
移动/重命名 |
pwd |
显示当前目录 |
rm |
删除文件/目录 |
rmdir |
删除空目录 |
sleep |
延迟指定秒数 |
sort |
排序行 |
tee |
同时输出到文件和标准输出 |
uptime |
显示运行时间 |
hostname |
显示/设置主机名 |
find |
查找文件(集成了 DOS find) |
grep |
正则搜索(GNU grep 移植) |
date |
显示/设置日期 |
⚠️ 与 Windows 内置命令冲突
以下命令与 CMD/PowerShell 内置命令同名,是否走 coreutils 版本取决于 PATH 顺序和别名配置:
cat、cp、date、echo、mkdir、mv、pwd、rm、rmdir、sleep、sort、tee、uptime
🛑 未打包(POSIX 概念 Windows 不适用或与内置冲突)
dd(未来可能加)、dircolors、shred、sync、uname、chmod/chown/chgrp(ACL 而非 POSIX 权限)、kill(无 POSIX 信号)、dir/more/expand/whoami(与 DOS 内置冲突)
Windows 特殊注意事项
CRLF 行尾符
Windows 文本文件默认 CRLF(\r\n),大多数工具可透明处理,但字节导向的操作(如 uniq)可能在 CRLF 场景下对末尾行产生意外行为。建议在处理 Windows 文本前先统一转 LF:
# 批量转 LF(PowerShell)
Get-ChildItem -Recurse -Filter "*.txt" | ForEach-Object {
(Get-Content $_.FullName -Raw) -replace "`r`n", "`n" | Set-Content $_.FullName -NoNewline
}
没有 /dev/null,用 NUL 代替
# 等价于 Linux 的 find . -name "*.log" > /dev/null
find . -name "*.log" > NUL
符号链接
读取已有符号链接无需管理员权限;创建新符号链接需要开启开发者模式(Settings → System → Advanced)或使用提升权限的终端。
路径分隔符
/ 和 \ 均被接受。但部分工具输出使用 \,管道传递时需注意。
文件权限
Windows 使用 ACL,不支持 POSIX 权限位(如 find -perm)——权限相关谓词可能行为不同或不可用。
坑与注意
⚠️ PowerShell 别名导致管道不工作
这是最常踩的坑。PowerShell 的 ls、cat、sort 等都是内置别名,指向 PowerShell cmdlet,不是 coreutils 二进制文件。在管道中使用时报错或行为异常:
# ❌ 错误:sort 是 PowerShell 别名,不是 coreutils
ls | sort
# ✅ 正确:显式调用 coreutils 的 sort
ls | C:\Program Files\coreutils\bin\sort.exe
# ✅ 最佳方案:删别名后用 Set-Alias
Remove-Item alias:sort
Set-Alias -Name sort -Value "C:\Program Files\coreutils\bin\sort.exe"
⚠️ Preview 阶段不建议生产使用
项目明确标注"preview",API、行为、命令集均可能在后续版本中变化,重要生产环境慎用。
⚠️ kill 命令不可用
Windows 没有 POSIX 信号机制,kill 命令无法实现。若脚本中有 kill 逻辑,Windows 上会报 command not found。
PSReadLine 与命令行转义
安装程序会集成 PSReadLine,使引用表达式在交互式 PowerShell 中更接近 UNIX 行为,但 PowerShell 转义字符仍是反引号 ` 而非反斜杠 \,写复杂 find 命令时需注意。
与同类对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| microsoft/coreutils | 微软官方维护、单 binary、原生 Windows、winget 一键装 | Preview 阶段、部分命令缺失、PowerShell 别名冲突 |
| WSL (Windows Subsystem for Linux) | 完整的 Linux 环境 | 需开启 WSL 功能、内存占用大、不是原生 Windows |
| Git Bash (MSYS2) | 轻量、很多开发工具自带 | 不是完整 coreutils、部分命令行为与 Linux 不同 |
| Cygwin | 历史悠久、生态丰富 | 安装复杂、路径转换问题、与原生 Windows 程序交互差 |
| GOW (Gnu On Windows) | 轻量、约 100 个工具 | 多年未更新、维护不活跃 |
如果只是需要跑几个 Linux 命令(如 ls、grep、find)且不想装 WSL,coreutils 是最轻量的选择;如果需要完整的 Linux 环境(bash、管道复杂组合、系统调用),WSL 更合适。
一句话推荐结论
需要在 Windows 上原生运行 Linux 命令(
ls、grep、find、sort等)且不想开 WSL?winget install Microsoft.Coreutils一键装完就能跑——但注意 PowerShell 别名冲突,先删别名再正式用。
最小可跑命令
⚠️ 基于 v2026.6.16(2026-06-16 发布)静态文本整理,SHA
4e304c05c4318e53ad5fce146509a24d15dfad61。建议用winget install Microsoft.Coreutils安装最新版本后,以coreutils.exe --version输出为准。
# 环境要求
# - Windows 10/11
# - PowerShell 7.4+ 必须(推荐 7.6+)
pwsh --version # 确认版本
# 安装
winget install Microsoft.Coreutils
# 验证安装
C:\Program Files\coreutils\bin\ls.exe --version
# 快速测试(删除 PowerShell 别名后)
Remove-Item alias:ls -Force -ErrorAction SilentlyContinue
ls -la
# 文件查找
find . -name "*.txt"
# 内容搜索
grep -r "TODO" .\src\
# 统计行数
wc -l data.csv
# 跨平台脚本执行
.\linux-script.sh # 在 Windows 直接跑 Linux 脚本中的命令
来源与引用
- 仓库:https://github.com/microsoft/coreutils
- Releases:https://github.com/microsoft/coreutils/releases/latest
- WinGet 安装:
winget install Microsoft.Coreutils - 最新版本:v2026.6.16(发布于 2026-06-17,commit SHA
4e304c05c4318e53ad5fce146509a24d15dfad61) - 上游:uutils/coreutils · findutils · grep
- ⚠️ 本攻略未 clone 仓库、未在 Windows 环境运行命令;内容基于 README 和 GitHub Releases API 静态文本整理。PowerShell 兼容性描述基于 README 原文标注,建议以实际运行输出为准。