gnu coreutils
2013-05-24 11:34:39 阿炯

在一台新的Linux系统装好后,即使是最小安装,也会发现有许多工具指令可用,当然也可以通过安装软件包来添加更多的命令;具体的指令(可能是多个)属于该软件包,所以系统PATH里的可执行命令是属于某一软件包中的,而那些常见的一系列命令则属于这个包。包含文件(chown,cp,dh,mv,rm)、shell(id,nice,nohup,date,tee,ture,tty,who)和文本处理(cat,od,head,tail,wc,uniq)的工具包。

The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system.These are the core utilities which are expected to exist on every operating system.

Coreutils 是所有 Linux 与类 Unix 系统的“地基”——它提供了如 cp、mv、ls、cat、sort 等最基本的命令,是操作系统正常运行不可或缺的部分。当然也有windows的迁移版本,详情请参考此处

文档参考

用Rust编写的GNU Coreutils替代品Rust Coreutils。

2022年1月30日消息,GNU Coreutils 在 Linux 系统和其他平台上提供了一些常见且重要的命令行工具,GNU Core Utilities 包括常用的命令,如 cat、ls、rm、chmod、mkdir、wc、whoami 和许多其他命令。随着行业内广泛将安全敏感代码转换为像 Rust 这样的内存安全语言,Sylvestre Ledru 和其他开发人员一直在开发基于 Rust 的 Coreutils 替代品 —— Rust Coreutils:完全清除 C 语言代码,转而使用 Rust 这种主打内存安全性和安全性的现代编程语言。

近一年来 Rust Coreutils 取得一些进展,已经能够在基本的 Debian 系统上运行,而最近一直在提高 GNU Coreutils 的兼容性。据外媒 phoronix 介绍,Rust Coreutils 不仅更安全,对于一些二进制文件,现在看到的性能比 GNU 包中的命令(如 head、cut 和其他常见命令)“显着地”要好。不过现在 Rust  Coreutils 仍然面临着缩小与上游 GNU 命令兼容性的挑战。目前唯一尚待实现的二进制文件之一是 stty,除了优化和兼容性工作之外,开发人员还在努力让 Debian 和 Ubuntu 在默认情况下能轻松切换到 Rust Coreutils。

通过其博客可以了解有关 Rust Coreutils 当前状态的更多详细信息,该项目的源代码可在 GitHub 中查看。


最新版本:9
v9.1 现已于2022年4月中旬发布。GNU Core Utilities 是 GNU 操作系统的基本文件、shell 和文本操作实用程序,这些是预期存在于每个操作系统上的核心实用程序。本次更新包含了广泛的修复、改进和其他改动。一个令人兴奋的方面是各种效率改进,如 cat 现在使用 copy_file_range 系统调用,对其他命令则使用更优化的 syscalls 以提高效率。一些亮点更新内容如下:
cat 命令现在使用 copy_file_range 系统调用,在常规文件之间进行简单的拷贝。反过来,在可能的复制卸载/重新链接中,这应该是更有效的。copy_file_range 系统调用用于从一个文件拷贝到另一个文件--在两个文件描述符之间拷贝一定范围的数据,而不需要通过用户空间。
cp、mv 和 install 命令在复制到一个目录时,现在使用类似 openat 的系统调用,这将避免一些 race conditions,并且更有效率。
ls 命令默认情况下不再给文件着色,因为它们很少被使用,而且每个文件的处理时间会增加约 30%。
ls 和 stat 命令默认不再尝试自动挂载文件,而是恢复到早期的行为。
如果遇到符号链接,使用 chmod -R 的递归 chmod'ing 将不再以错误状态退出。
修复了 macOS 上的 copy 行为,如果从苹果 APFS 文件系统复制到其他文件系统,可能导致误复制问题。还有其他的 macOS 修复,当源文件和目标文件是 APFS 上的普通文件时,copy 现在会创建一个 copy-on-write clone。

更多详情可查看此处

v9.9于2025年11月中旬发布。主要更新内容如下:

性能恢复与关键修复
在这一版本中,最引人关注的改进来自 cp 命令。此前,它在处理透明压缩文件(例如 OpenZFS 文件系统中的压缩文件)时性能会显著下降,而现在这一问题已被彻底修复,复制效率回到了正常水平。此外,tail 命令 也变得更可靠:无论使用多大的 -n 参数,都能准确输出指定行数,不再出现截断或错误。而 unexpand 工具 修复了一个潜在的安全漏洞——当用户在带有 GNU 特有的 /NUM 或 +NUM 语法并搭配 --tabs 参数时,旧版本可能触发堆缓冲区溢出,如今已安全无虞。

更多稳定性与性能改进
多个工具的细微行为也得到完善,如 numfmt、sort 和 cksum 等命令在不同语言环境、字符编码以及压缩数据场景下都能保持稳定工作。同时在性能方面也有不少可喜提升:
wc -l 命令在支持 AVX512 指令的系统上速度提升约 10%;
fmt、date、nl 和 pr 等工具在遇到写入错误时会立即终止任务,避免数据丢失或死循环;
sort 命令增强了错误检测能力,若在写入压缩程序时出现问题,会主动报告错误,防止“静默失败”。

功能增强:numfmt 工具焕然一新
这一版本中,numfmt 工具迎来了一次小而实用的升级,新增与改进包括:
支持 --unit-separator=SEP 参数,可自定义单位分隔符;
支持带不间断空格的数字格式,增强国际化表现;
允许使用多字节分隔符,兼容更复杂的格式场景;
改进了行尾空格与写入错误的处理逻辑,使输出更整洁。

构建系统优化与兼容性提升
在构建层面上,与 SELinux 相关的工具(如 chcon 和 runcon)现在只会在系统存在相应头文件或明确启用时才会被编译。这一变化让 Coreutils 的编译更加灵活、简洁,也减少了不必要的依赖错误。


项目主页:http://www.gnu.org/software/coreutils/