microsoft/coreutils · 上手攻略

  • 仓库:microsoft/coreutils
  • 链接:https://github.com/microsoft/coreutils
  • 分类:developer-tool · windows · cli
  • 作者:Tom
  • 更新:2026-08-11

它是什么

microsoft/coreutils 是微软官方维护的 Windows 版 GNU coreutils 套装,将 Linux 常用的命令行工具(lscpmvrmgrepfind 等 75+ 个)打包成单个多调用二进制文件(multi-call binary),在 Windows 上原生运行,无需 WSL、虚拟机或 Git Bash。

上游基于 uutils/coreutilsfindutilsgrep,由微软打包成可一键安装的 Windows 原生程序(Build 2026 正式发布)。

解决什么问题: - 在 Linux/macOS/WSL 写好的 Shell 脚本迁移到 Windows 时,报错"command not found" - 需要在 Windows 上用 grepfindsortuniq 等工具做文本处理 - 跨平台开发者在 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 中使用别名(如 llls)会导致二进制流兼容性问题,部分工具在管道中不能正常工作(如 xargsfind),应优先使用完整命令名。


完整命令列表

来源:README command table(截至 v2026.6.16)。⚠️ kill 不可用(Windows 无 POSIX 信号);dd 暂未包含;dircolorsshredsyncuname 对 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 顺序和别名配置:

catcpdateechomkdirmvpwdrmrmdirsleepsortteeuptime

🛑 未打包(POSIX 概念 Windows 不适用或与内置冲突)

dd(未来可能加)、dircolorsshredsyncunamechmod/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 的 lscatsort 等都是内置别名,指向 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 命令(如 lsgrepfind)且不想装 WSL,coreutils 是最轻量的选择;如果需要完整的 Linux 环境(bash、管道复杂组合、系统调用),WSL 更合适。


一句话推荐结论

需要在 Windows 上原生运行 Linux 命令(lsgrepfindsort 等)且不想开 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 原文标注,建议以实际运行输出为准。