写过 shell 脚本的人,今天才知道那些 Linux 基础命令其实从来不是 Linux 自带的——今天 uutils 把这件事彻底变了
你每天在终端里敲的 cp、ls、rm、cat,其实不是 Linux 的一部分——它们是 GNU Coreutils,一个用 C 写的、1990 年代诞生的工具集。内存安全问题、GNU 许可证绑定、Linux 以外体验割裂,这些问题一直存在,只是没人觉得值得花力气去换。2026 年 9 月,这件事被 uutils Coreutils 0.11 往前推了一大步。
这次 0.11 最大的变化不是哪个命令变快了,而是一件事变得像样了:错误信息终于能看了。
以前你敲 cp --version 看版本,或者参数写错了得到一行莫名其妙的报错,你大概已经习惯了。但 uutils 0.11 引入了一套基于 Ariadne 的诊断引擎,理念很简单:让命令行工具的错误信息和 Rust 编译器一样精准。
实际效果是这样的——cut -F 后面跟了个无效参数,以前的报错是一行文字,现在会把你输入的参数原样回显,然后把小箭头(caret)标在出错字符上,同时给一句简短的提示告诉你期望的语法是什么。chmod、mkdir、tr、sort、cut、head、tail、ls、df……这批最常用的命令都已经支持。这件事在changelog 里看起来不起眼,但在生产环境里你真遇到问题的时候,「箭头指到字符」和「报错就一句话」之间的差别是巨大的。
第二件事是性能。0.11 给 Linux、macOS、Windows 三平台都开了 PGO(Profile-Guided Optimization),翻译成人话就是用真实工作负载去训练编译器,让它知道哪些代码路径是热的,然后专门优化这些路径。结果是:整体最高提速 31%。
这还不是全部。cp 命令专门优化了文件打开次数,某些场景减少到只打开一次,性能提升 32.93%。join 命令提速 1.37 倍,在特定负载下比 GNU 原版还快 2.5 倍。dd、tac、od、tail、expand 这些日常命令也都减少了内存分配和系统调用。
还有一个挺有意思的信号:uutils 团队现在把「某个工具比 GNU 慢太多」直接当作 bug 来处理。这不是随口说说——他们是真的在盯着性能差,用 PGO、减少系统调用、优化数据结构这些手段去追。
第三件事是兼容率。0.11 通过了 GNU 测试套件 653 个测试,比上一版的 645 多了 8 个;失败测试从 28 降到 22;测试套件本身的错误第一次降到了 0。最终数字是 95.33% GNU 兼容率。
这个 95% 是什么概念?业界通常认为 95% 以上就可以算 production-ready 了——日常脚本直接替换大多数场景没问题。但剩下那 5% 不是白给的,主要集中在边缘参数组合、特定 locale 下的输出差异和少量竞态条件。生产环境的 shell 脚本往往就埋伏在这些边缘情况上,所以完全替代 GNU 目前还不是所有人都有勇气做的事。但对 cp、ls、rm、cat 这些最常用的命令,日常使用已经没什么问题。
macOS 和 Windows 这边情况更简单——GNU Coreutils 本来就是第三方安装,uutils 0.11 的跨平台构建体验本来就更好,95% 的兼容率加上 PGO 提速,这两平台没有不选 uutils 的理由。
这件事背后还有一层更大的趋势:Rust 正在系统工具链里一点点替换掉 C。不只是 uutils,Oxc(解析器+检查器+格式化器)、Rolldown(打包器)、pnpm 12(包管理器)这些前端日常接触的东西,核心逻辑都在往 Rust 迁移。uutils 0.11 是这个趋势里走得最远的一个。
如果你在 macOS 或 Windows 上用 Linux 命令,uutils Coreutils 0.11 现在是可以认真考虑直接装上的版本——至少 cp 和 ls 这两个最常用的,比 GNU 版快 30%,报错信息还更清楚。
评论区
登录后可评论。