Rust coreutils:26.10 脚本兼容性与 GNU 切换
Ubuntu 26.10 将此前保留的 cp、mv、rm 也切换到 Rust 的 uutils 实现。命令名称保持不变,依赖特殊选项、报错文本或退出码的脚本应重新验证。26.10 发布说明 确认了这次切换。
查看当前实现
type -a cp mv rm
cp --version
mv --version
rm --version先看 type -a,确认命令有没有被别名、函数或自定义 PATH 覆盖,再查看版本输出。容器拥有自己的用户空间,宿主机升级不等于容器内命令也已切换。
在临时目录测试基本流程
下面的操作只创建并移动测试文件,不接触你的工作目录:
coreutils_check_dir=$(mktemp -d)
printf 'coreutils check\n' > "$coreutils_check_dir/source.txt"
cp "$coreutils_check_dir/source.txt" "$coreutils_check_dir/copy.txt"
cmp "$coreutils_check_dir/source.txt" "$coreutils_check_dir/copy.txt"
mv "$coreutils_check_dir/copy.txt" "$coreutils_check_dir/moved.txt"
rm "$coreutils_check_dir/moved.txt"
ls -la "$coreutils_check_dir"cmp 无输出且退出码为 0,表示两个文件内容一致。这个例子只是基本检查,不能证明你的备份或部署脚本完全兼容。测试目录可保留供检查,之后手动清理。
哪些脚本需要重点检查
- 解析命令报错文字的脚本:尽量改用退出码与明确的文件检查。
- 使用递归复制、符号链接或元数据保留的任务:在样本数据上比较内容、权限和链接目标。
- 定时任务与 CI:按实际用户身份、PATH 和工作目录运行测试。
- 删除或覆盖文件的任务:先用数据副本验证,并确认恢复方式。
用同一份输入分别测试目标系统与原环境,记录命令、退出码、标准输出和标准错误。需要比较元数据时,可以对样本文件运行 stat。
遇到兼容问题时怎样处理
Ubuntu 仍提供 GNU 版本。官方文档介绍了 gnu 前缀命令(例如 gnuls),以及 coreutils-from-gnu 和 coreutils-from-uutils 之间的切换方式,见 官方 rust-coreutils 说明 。
先修正或隔离具体脚本的问题;确需系统级切换时,阅读官方命令并检查 APT 的变更计划。该操作涉及基础系统包,不要用手动覆盖 /usr/bin 或随意创建符号链接的方式替换实现。