Coreutils - 被拒绝的功能请求
摘要
本文详细介绍了 GNU Coreutils 中被拒绝的功能请求,并解释了每个提议的新增功能因现有工具的功能或效率问题而被拒绝。
<p><a href="https://lobste.rs/s/zbcua4/coreutils_rejected_feature_requests">评论</a></p>
查看缓存全文
缓存时间: 2026/09/15 09:12
# Coreutils - 被拒绝的功能请求
来源: https://www.gnu.org/software/coreutils/rejected_requests.html
---
在 Coreutils 项目中,最困难的工作之一就是判断哪些功能请求应该被拒绝,并向贡献者提供合理的解释。
以下列出的功能提案虽然都是不错的想法,但因各种原因未被采纳,具体讨论可参见链接的邮件列表讨论。
cat (https://www.gnu.org/software/coreutils/rejected_requests.html#cat)chmod (https://www.gnu.org/software/coreutils/rejected_requests.html#chmod)cp (https://www.gnu.org/software/coreutils/rejected_requests.html#cp)cut (https://www.gnu.org/software/coreutils/rejected_requests.html#cut)date (https://www.gnu.org/software/coreutils/rejected_requests.html#date)dd (https://www.gnu.org/software/coreutils/rejected_requests.html#dd)df (https://www.gnu.org/software/coreutils/rejected_requests.html#df)du (https://www.gnu.org/software/coreutils/rejected_requests.html#du)join (https://www.gnu.org/software/coreutils/rejected_requests.html#join)ls (https://www.gnu.org/software/coreutils/rejected_requests.html#ls)mv (https://www.gnu.org/software/coreutils/rejected_requests.html#mv)rm (https://www.gnu.org/software/coreutils/rejected_requests.html#rm)shred (https://www.gnu.org/software/coreutils/rejected_requests.html#shred)sort (https://www.gnu.org/software/coreutils/rejected_requests.html#sort)stat (https://www.gnu.org/software/coreutils/rejected_requests.html#stat)\*sum (https://www.gnu.org/software/coreutils/rejected_requests.html#checksum)touch (https://www.gnu.org/software/coreutils/rejected_requests.html#touch)uniq (https://www.gnu.org/software/coreutils/rejected_requests.html#uniq)wc (https://www.gnu.org/software/coreutils/rejected_requests.html#wc)misc (https://www.gnu.org/software/coreutils/rejected_requests.html#misc)新命令 (https://www.gnu.org/software/coreutils/rejected_requests.html#new)
### cat
- cat \-\-timestamp (https://lists.gnu.org/archive/html/coreutils/2011-03/msg00002.html)。使用 awk 或 perl 即可实现。
- cat \-n 备选格式 (https://lists.gnu.org/archive/html/coreutils/2012-01/msg00002.html)。使用现有工具可以更好地处理。
- cat \-\-show\-ends (https://lists.gnu.org/archive/html/coreutils/2013-02/msg00055.html) 用于突出显示行尾空白字符。被认为 grep \-\-color 效果更好/已足够。
- cat \-\-header (https://lists.gnu.org/archive/html/coreutils/2013-05/msg00015.html) 用于输出每个文件的文件名。`tail -n+1` 已能实现此功能。
- cat \-S (https://lists.gnu.org/archive/html/coreutils/2013-09/msg00005.html) 用于压缩仅包含空白字符的行。认为使用 `sed 's/^ *$//' | cat -s` 等现有工具已足够。
- cat \-d,\-\-direct (https://lists.gnu.org/archive/html/bug-coreutils/2013-10/msg00011.html) 用于直接 I/O。dd 命令已有 'nocache' 或 'direct' 选项,并且存在通用的 nocache (https://github.com/Feh/nocache) 封装工具。
### chmod
- chmod 在权限未更改时维护 ctime (https://lists.gnu.org/archive/html/bug-coreutils/2010-01/msg00303.html)。认为提出的补丁效率低下 (https://lists.gnu.org/archive/html/bug-coreutils/2010-02/msg00208.html)。
- chmod \-d (https://lists.gnu.org/archive/html/bug-coreutils/2010-02/msg00201.html) 用于仅为目录设置权限。认为使用 'X' 模式,或 `find` 配合 `chmod` 已足够。
- chmod \+S (https://lists.gnu.org/archive/html/bug-coreutils/2010-04/msg00008.html) 仅为目录设置 setgid。认为使用 `find` 配合 `chmod` 已足够。
- chmod \-D (https://lists.gnu.org/archive/html/bug-coreutils/2011-05/msg00047.html) 用于仅为目录设置权限。认为使用 'X' 模式,或 `find` 配合 `chmod` 已足够。
- chmod \-\-parents (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=8736)。认为使用简单脚本或 `find` 命令实现此功能已足够。
- chmod \-\-umask (https://lists.gnu.org/archive/html/bug-coreutils/2012-03/msg00080.html)。认为现有的 chmod 选项已足够。
- chmod b10111 (https://lists.gnu.org/archive/html/coreutils/2012-11/msg00076.html)。在 bash 或 ksh 中可以轻松完成二进制转换。
- 禁止 chmod 创建全局可写文件 (https://lists.gnu.org/archive/html/coreutils/2013-06/msg00075.html)。此功能无法通用,且即使实现也容易被绕过。
### cp
- cp,mv \-\-to (https://lists.gnu.org/archive/html/bug-coreutils/2009-08/msg00298.html)。虽然比 \-\-target 更好,但没必要提供两种方式来实现同一功能。
- 为 cp,mv \-\-verbose 使用 Unicode 符号 (https://lists.gnu.org/archive/html/bug-coreutils/2009-09/msg00096.html)。因与在 ls 输出中使用 UTF\-8 箭头 (https://lists.gnu.org/archive/html/bug-coreutils/2009-08/msg00023.html) 相同的原因被拒绝。
- 为 cp,mv \-\-verbose 使用独特符号 (https://lists.gnu.org/archive/html/bug-coreutils/2009-12/msg00109.html)。认为从上下文已能获取足够信息。
- cp,mv \-\-progress (https://lists.gnu.org/archive/html/coreutils/2013-05/msg00020.html)。现有工具已能处理此需求。
- cp \-\-reflink\-range=src\_offset,src\_length,dst\_offset (https://lists.gnu.org/archive/html/coreutils/2011-08/msg00006.html)。认为此功能不值得实现。
- cp \-\-quiet (https://lists.gnu.org/archive/html/coreutils/2012-02/msg00090.html)。可以通过先过滤现有文件来抑制 ENOENT 错误。
- cp \-\-resume (https://lists.gnu.org/archive/html/coreutils/2012-04/msg00079.html)。请使用 rsync。
- cp \-\-parallel (https://lists.gnu.org/archive/html/coreutils/2012-04/msg00079.html)。虽然在某些情况下有助于提高复制速度,但最好在更底层处理此问题。
- cp \-\-preserve=all 应复制 ext2 扩展属性 (https://lists.gnu.org/archive/html/coreutils/2013-08/msg00019.html)。需要文件系统无关的接口(如 copyfile\(\))。
- cp,mv \-\-bwlimit (https://lists.gnu.org/archive/html/coreutils/2014-02/msg00019.html) 用于限制数据传输速率。此功能更适合高级工具,并且已在 rsync 中提供。
### cut
- cut \-d 'string' (https://lists.gnu.org/archive/html/bug-coreutils/2010-01/msg00020.html)。使用 `sed 's/string/\x00/g' | cut -d ''` 已足够。
- cut \-\-output\-delimiter 短选项。已可使用 `cut --ou`。
- cut \-\-csv (https://lists.gnu.org/archive/html/bug-coreutils/2010-05/msg00122.html)。认为对于此复杂任务,单独的 (http://freshmeat.sourceforge.net/projects/csvutils) 工具是最佳选择。
- cut \-C (https://lists.gnu.org/archive/html/coreutils/2012-04/msg00027.html)。没必要为此作为 \-\-complement \(\-\-co\) 的别名。
- cut \-f2,1 (https://lists.gnu.org/archive/html/bug-coreutils/2012-12/msg00115.html) 用于重新排序字段。认为使用 awk 或 join (https://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=38cdb01) 已足够。
- cut \-\-separator (https://bugs.gnu.org/14224) 用于指定“行”分隔符。认为使用 `tr` 进行预处理/后处理已足够。
### date
- date \+%f (https://lists.gnu.org/archive/html/coreutils/2011-08/msg00008.html) 用于刷新输出。认为 `stdbuf -oL date ...` 已足够。
- date 应解析 'DAY MONTH, YEAR' (https://bugs.gnu.org/14613) 格式。认为该格式有误 (https://www.grammar.com/dates-day-month-year/)。
- date \+%J (https://lists.gnu.org/archive/html/coreutils/2013-10/msg00019.html) 用于支持天文儒略日。认为此需求不够普遍,不值得支持。
- date \-v (https://lists.gnu.org/archive/html/coreutils/2013-10/msg00041.html) 用于提供 BSD 风格的相对日期调整。认为现有的 GNU 相对日期语法已足够。
### dd
- 限制 dd 的 I/O 吞吐量 (https://lists.gnu.org/archive/html/bug-coreutils/2009-12/msg00199.html)。认为 pv 和 rsync 等工具更适合此用途。
- dd \-\-limit\-speed (https://lists.gnu.org/archive/html/coreutils/2012-09/msg00121.html)。认为最好将此功能留给 pv 或 trickle 等工具。
- dd conv=noerror (https://lists.gnu.org/archive/html/coreutils/2012-12/msg00146.html) 应同样适用于写入操作和读取操作。认为 shred 是此用例的最佳工具。
- dd iflag=seekable oflag=seekable (https://bugs.gnu.org/13391) 用于验证 lseek\(2\) 支持。认为此功能不够实用/完善。
- dd conv=offload (https://lists.gnu.org/archive/html/coreutils/2014-03/msg00055.html) 用于将复制操作卸载到各种后端。认为此功能过于专业,不适合显式支持。
- dd conv=truncpost (https://lists.gnu.org/archive/html/coreutils/2014-06/msg00025.html)。用于支持就地过滤文件。由于错误处理问题,认为此功能不够实用。
### df
- df,du \-g (https://lists.gnu.org/archive/html/bug-coreutils/2009-12/msg00000.html)。指定“千兆字节”输出格式既非标准也非必需。
- df 自动缩放 (https://lists.gnu.org/archive/html/bug-coreutils/2010-09/msg00046.html)。认为 `df -h` 已足够好。
- df \-g (https://lists.gnu.org/archive/html/bug-coreutils/2012-07/msg00025.html)。最好避免为不同的输出单位设置单独的选项。
- df \-\-without\-header (https://lists.gnu.org/archive/html/coreutils/2012-12/msg00067.html)。\-\-header 选项通常只对数据处理程序有用。
- df \-\-dereference (https://lists.gnu.org/archive/html/coreutils/2013-11/msg00072.html) 用于处理符号链接目标。df 已被修改为无条件引用符号链接目标。
### du
- du \-\-format (https://lists.gnu.org/archive/html/coreutils/2011-02/msg00072.html) 用于允许排序。`sort -h` 可以处理此需求。
- 为 OCFS2 reflinked 文件提供准确的 du 结果 (https://lists.gnu.org/archive/html/coreutils/2012-10/msg00015.html)。认为添加到 du 中过于复杂且过于特定。
- du \-\-exclude\-dirs (https://lists.gnu.org/archive/html/coreutils/2013-04/msg00043.html) 用于从使用计数中排除目录本身。认为使用 `find .. | du` 已足够。
- du \-\-sort (https://lists.gnu.org/archive/html/bug-coreutils/2014-05/msg00110.html) 用于按磁盘使用量排序。这已通过 `du -h | sort -h` 直接支持。
### join
- 自动检测 join 的输出格式 (https://lists.gnu.org/archive/html/bug-coreutils/2009-11/msg00083.html)。需要进一步考虑这是否有用。
- join 超过两个文件 (https://lists.gnu.org/archive/html/coreutils/2012-01/msg00104.html)。这会增加复杂性且无法扩展。
- join 超过一个字段 (https://lists.gnu.org/archive/html/coreutils/2012-02/msg00066.html)。对此兴趣不大。
- comm,join \-\-parallel (https://lists.gnu.org/archive/html/bug-coreutils/2013-11/msg00185.html) 以使用多个核心。认为最好为多进程拆分数据。
- join \-t '\\t' (https://lists.gnu.org/archive/html/coreutils/2013-11/msg00049.html) 用于使用 TAB 分隔符。认为使用 shell 来指定 TAB 字符(如 `join -t $'\t'`)已足够普遍。
### ls
- 更改/恢复默认的引号样式 - 详细信息请参见 ls quotes (https://www.gnu.org/software/coreutils/quotes.html) 页面。
- ls 中的 UTF\-8 箭头 (https://lists.gnu.org/archive/html/bug-coreutils/2009-08/msg00023.html)。请参考此 l 脚本 (https://www.pixelbeat.org/scripts/l) 作为替代方案。
- df/ls \-\-blocksize=\{decimal,binary\} (https://lists.gnu.org/archive/html/bug-coreutils/2010-10/msg00022.html)。虽然更正确,但被认为过于复杂。
- ls \-\-sort=class (https://lists.gnu.org/archive/html/coreutils/2012-05/msg00013.html)。认为按类型指示符排序收益甚微。
- ls \-\-octal (https://lists.gnu.org/archive/html/coreutils/2013-03/msg00049.html) 以输出八进制权限。认为使用 `stat` 或 `find` 已足够。
- ls \-\-group\-numbers=locale (https://lists.gnu.org/archive/html/coreutils/2013-06/msg00019.html) 以输出千位分隔符。认为使用 BLOCK\_SIZE (https://lists.gnu.org/archive/html/coreutils/2013-06/msg00021.html) 或 numfmt (https://lists.gnu.org/archive/html/coreutils/2013-06/msg00033.html) 已足够。
- 抑制 ls \-F / 的尾随斜杠 (https://lists.gnu.org/archive/html/coreutils/2013-02/msg00161.html)。结果被认为过于不一致 (https://lists.gnu.org/archive/html/coreutils/2013-05/msg00024.html)。
- ls \-\-just=$filetype (https://lists.gnu.org/archive/html/coreutils/2013-11/msg00093.html) 用于限制列出的文件类型。认为使用过滤 classify 标签的方式(如 `ls --color -lF | sed -n 's#/$##p'`)已足够。
- ls \-\-sort=inode (https://lists.gnu.org/archive/html/bug-coreutils/2014-11/msg00062.html)。认为对于这种底层功能,使用 `find ... | sort` 更合适。
### mv
- mv \-p (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=5926)(创建目标目录)。认为先执行 `mkdir -p` 更实用。
- mv \-\-symbolic\-link (https://lists.gnu.org/archive/html/coreutils/2012-11/msg00031.html)。认为 `mv` 和 `ln --relative` 分开使用能提供更精细的控制。
- mv \-\-safe (https://lists.gnu.org/archive/html/coreutils/2013-04/msg00019.html) 仅在完成时删除源文件。认为 `cp ... && rm` 已足够。
- mv \-\-parents (https://lists.gnu.org/archive/html/coreutils/2013-04/msg00076.html) 用于重建目录层级 (https://lists.gnu.org/archive/html/bug-coreutils/2009-09/msg00003.html)。认为使用 `cp -l --parents` (https://lists.gnu.org/archive/html/coreutils/2013-05/msg00013.html) 已足够。
### rm
- rm \-\-parents (https://lists.gnu.org/archive/html/bug-coreutils/2009-07/msg00033.html)。认为反向删除树的目录过于危险。
- rm \-d (https://lists.gnu.org/archive/html/bug-coreutils/2010-06/msg00105.html)。`rmdir` 等效且不易混淆。
- rm \-\-no\-preserve\-root (https://lists.gnu.org/archive/html/bug-coreutils/2012-01/msg00096.html)。添加保护性提示并不会显著提高安全性。
- rm \-rf**\.** (https://lists.gnu.org/archive/html/bug-coreutils/2012-09/msg00011.html) 用于删除当前目录。认为现有的 `rm -rf "$PWD"` 支持已足够。
- rm \-rf**\.** (https://bugs.gnu.org/12339#209) 用于删除当前目录内的所有文件。认为 `rm -rf * .[!.] .??*` 和 `find . -delete` 已足够。
- rm \-s (https://lists.gnu.org/archive/html/coreutils/2013-04/msg00069.html) 以更“智能”的方式运行。认为 `rm -I` 或 `find | xargs rm` 已足够。
- rm \-\-exclude (https://lists.gnu.org/archive/html/bug-coreutils/2013-09/msg00010.html) 用于排除文件名。认为 find\(1\) 等现有工具已足够。
- rm 应使用 remove\(\) (https://lists.gnu.org/archive/html/bug-coreutils/2013-11/msg00054.html),将 unlink\(\) 留给 unlink 命令。我们无法更改如此标准化的功能。
### shred
- shred \-\-recursive (https://lists.gnu.org/archive/html/bug-coreutils/2009-06/msg00222.html)。认为最好显式选择(例如使用 `find`)。
- shred \-r (https://lists.gnu.org/archive/html/coreutils/2011-12/msg00044.html)。`shred` 对文件本身的使用有限。
### sort
- sort \-\-by\-length (https://lists.gnu.org/archive/html/bug-coreutils/2009-07/msg00102.html)。已在信息文档中添加了“按行长度排序”的示例。
- min,max 命令 (https://lists.gnu.org/archive/html/bug-coreutils/2009-07/msg00007.html)。(不过 sort \-\-range=\{\} 替代方案似乎有用)。
- sort \-V 自动忽略空白字符 (https://lists.gnu.org/archive/html/bug-coreutils/2010-03/msg00031.html)。可以使用 `-b` 更通用地实现。
- sort \-I (https://lists.gnu.org/archive/html/coreutils/2011-06/msg00082.html) 用于排序 IP 地址。此功能是否值得实现尚有争议。
- SORT\_BUFFER\_SIZE=1234 sort (https://lists.gnu.org/archive/html/coreutils/2012-05/msg00058.html)。当多个命令共享环境变量时,环境变量可能有用,但最好避免使用。
- sort 默认使用 /var/tmp。认为最好继续使用 /tmp (https://lists.gnu.org/archive/html/coreutils/2012-09/msg00139.html),因为其临时文件是无状态的。
- sort 固定宽度字段
相似文章
OpenBSD的端口树保留GPL核心工具并拒绝uutils(Rust重写)
OpenBSD的端口树拒绝包含uutils-coreutils,这是GNU核心工具的Rust重写版本,原因是兼容性和许可问题,同时维持现有的基于GPL的GNU核心工具。
Coreutils for Windows
Microsoft 发布了适用于 Windows 的 UNIX 核心工具的原生构建,包括 uutils/coreutils、findutils 和 grep,打包为单个多调用二进制文件,以实现无缝的跨平台脚本编写。
Ubuntu 26.10 完成向基于 Rust 的核心工具的过渡
Ubuntu 26.10 已完成迁移至基于 Rust 的核心工具,解决了之前的安全问题并增强了内存安全性,且用户功能无变化。
@xiaofeilong99: Windows 党注意了,微软自己下场补 Coreutils 了。 cat、cp、ls、mkdir、pwd、rm、sort、tee 这些命令,以前你在 Linux / macOS 用得好好的,到了 Windows 就各种别扭。 现在微软开…
微软发布了 Coreutils for Windows,这是一套原生的 Unix 风格核心工具(如 cat、cp、ls 等),旨在减少跨平台脚本和开发环境的差异,可通过 WinGet 安装,目前处于预览阶段。
@ChrisWangwy: https://x.com/ChrisWangwy/status/2064589910485684254
微软发布了 Coreutils for Windows,将 78 个类 Unix 命令引入 Windows 原生终端,方便 AI Agent(如 Hermes、Claude Code)在 Windows 下直接使用 grep、ls 等命令,减少翻译开销。文章详细介绍了安装步骤、别名冲突和验收方法。