uutils/coreutils

GitHub: uutils/coreutils

跨平台 Rust 语言重制的 GNU 核心工具集,提供内存安全的系统基础命令替代方案。

Stars: 22861 | Forks: 1786

![uutils logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0680b8b96a192059.svg) # uutils coreutils [![Crates.io](https://img.shields.io/crates/v/coreutils.svg)](https://crates.io/crates/coreutils) [![Discord](https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat)](https://discord.gg/wQVJbvJ) [![License](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/uutils/coreutils/blob/main/LICENSE) [![dependency status](https://deps.rs/repo/github/uutils/coreutils/status.svg)](https://deps.rs/repo/github/uutils/coreutils) [![CodeCov](https://codecov.io/gh/uutils/coreutils/branch/main/graph/badge.svg)](https://codecov.io/gh/uutils/coreutils) [![Weblate](https://hosted.weblate.org/widget/rust-coreutils/svg-badge.svg)](https://hosted.weblate.org/projects/rust-coreutils/)
uutils coreutils 是 GNU coreutils 的跨平台 Rust 重制版。虽然所有程序都已实现,但部分选项可能缺失或行为有所不同。
我们在 https://github.com/uutils/coreutils/releases/tag/latest-commit 提供了主分支的预编译二进制文件、manpages 和 shell 补全。 最新的稳定标签 https://github.com/uutils/coreutils/releases/latest 也适用于可重现产品和打包者。 Bug 报告者应使用最新提交 (latest commit) 的二进制文件。
## 目标 uutils coreutils 旨在成为 GNU utils 的直接替代品。与 GNU 的差异被视为 Bug。 我们的主要目标包括: - 完全匹配 GNU 的输出(标准输出和错误代码) - 更好的错误信息 - 提供全面的国际化支持 (UTF-8) - 提升性能 - 在相关时提供[扩展](docs/src/extensions.md)(例如:--progress) uutils 旨在支持尽可能多的平台,以便在 Linux、macOS、Windows 和其他平台上使用相同的工具。例如,这确保了脚本可以在不同平台之间轻松迁移。
## 文档 uutils 提供了用户和开发者文档: - [用户手册](https://uutils.github.io/coreutils/docs/) - [开发者文档](https://docs.rs/crate/coreutils/) 两者也可以在本地生成,相关说明可以在 [coreutils docs](https://github.com/uutils/uutils.github.io) 仓库中找到。 使用 [weblate/rust-coreutils](https://hosted.weblate.org/projects/rust-coreutils/) 将 Rust coreutils 翻译成您的语言。 ## 环境要求 - Rust (`cargo`, `rustc`) - GNU Make (可选) ### Rust 版本 uutils 遵循 Rust 的发布渠道,并在 stable、beta 和 nightly 版本上进行测试。 ## 构建 目前有两种方法来构建 uutils 二进制文件:Cargo 或 GNU Make。 对于任一方法,我们首先需要获取仓库: ``` git clone https://github.com/uutils/coreutils cd coreutils ``` ### Cargo 使用 Cargo 构建 uutils 非常简单,因为该过程与所有其他 Rust 程序相同: ``` cargo build --release ``` 将 `--release` 替换为 `--profile=release-small` 以优化二进制大小。 此命令在大多数 Rust 支持的平台上,将最通用的核心 uutils 集合构建为名为 'coreutils' 的多调用 (BusyBox-type) 二进制文件。 通常还提供特定于平台的 uutils。为平台构建这些扩展的 uutils 集合(在该平台上)非常简单,只需将其指定为 feature: ``` cargo build --release --features macos # 或 ... cargo build --release --features windows # 或 ... cargo build --release --features unix ``` 要构建 SELinux 特定功能(包括 `chcon` 和 `runcon`),请确保系统上已安装 `libselinux` 和 `libclang`。然后运行以下命令: ``` cargo build --release --features unix,feat_selinux ``` 如果您不想将平台上所有可用的工具都构建到最终二进制文件中,您也可以手动指定要构建的工具。例如: ``` cargo build --features "base32 cat echo rm" --no-default-features ``` 如果您想将工具构建为单独的二进制文件,这也是可能的: ``` cargo build --release --bins --workspace --exclude coreutils --exclude uu_runcon --exclude uu_chcon ``` 每个工具都包含在主仓库中自己的包内,命名为 "uu_UTILNAME"。要构建选定的单个工具,请使用 `--package` [aka `-p`] 选项。例如: ``` cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm ``` ### GNU Make 使用 `make` 构建也是一个简单的过程。 要简单地构建所有可用的工具(使用 debug profile): ``` make ``` 在 release 模式下: ``` make PROFILE=release ``` 要构建除少数几个之外的所有可用工具: ``` make SKIP_UTILS='UTILITY_1 UTILITY_2' ``` 要仅构建少数几个可用的工具: ``` make UTILS='UTILITY_1 UTILITY_2' ``` ## 安装 ### 使用 Cargo 安装 同样,安装只需使用: ``` cargo install --path . --locked ``` 此命令将 uutils 安装到 Cargo 的 _bin_ 文件夹(例如 `$HOME/.cargo/bin`)。 这不会安装 shell 补全或 manpages 所需的文件。要使 manpages 或 shell 补全正常工作,请使用 `GNU Make` 或参考 `手动安装 shell 补全`/`手动安装 manpages`。 ### 使用 GNU Make 安装 要安装所有可用的工具(默认 PROFILE=release): ``` make install ``` 要使用 `sudo` 安装,必须使用 `-E` 开关: ``` sudo -E make install ``` 要安装除少数几个之外的所有可用工具: ``` make SKIP_UTILS='UTILITY_1 UTILITY_2' install ``` 要仅安装少数几个可用的工具: ``` make UTILS='UTILITY_1 UTILITY_2' install ``` 以带有前缀(例如 uu-echo uu-cat)的方式安装每个程序: ``` make PROG_PREFIX=uu- install ``` 安装多调用二进制文件: ``` make MULTICALL=y install ``` 设置安装父目录(默认值为 /usr/local): ``` # 也支持 DESTDIR make PREFIX=/my/path install ``` 使用 `make` 安装会为 `bash`、`fish` 和 `zsh` 安装所有已安装工具的 shell 补全。也可以生成 `elvish` 和 `powershell` 的补全;请参阅 `手动安装 shell 补全`。 要跳过补全和 manpages 的安装: ``` make COMPLETIONS=n MANPAGES=n install ``` ### 手动安装 shell 补全 `uudoc` 二进制文件为 `bash`、`elvish`、`fish`、`powershell` 和 `zsh` shell 生成补全并输出到 stdout。 通过以下方式安装 `uudoc` ``` cargo install --bin uudoc --features uudoc --path . ``` 然后使用已安装的二进制文件: ``` uudoc completion ``` 因此,要将 `ls` 在 `bash` 上的补全安装到 `/usr/local/share/bash-completion/completions/ls`,请运行: ``` uudoc completion ls bash > /usr/local/share/bash-completion/completions/ls.bash ``` 带有 `uu-` 前缀的 `cp` 在 `zsh` 上的补全由以下命令生成 ``` env PROG_PREFIX=uu- uudoc completion cp zsh ``` ### 手动安装 manpages 要生成 manpages,语法为: ``` uudoc manpage ``` 因此,要将 `ls` 的 manpage 安装到 `/usr/local/share/man/man1/ls.1`,请运行: ``` uudoc manpage ls > /usr/local/share/man/man1/ls.1 ``` ## 卸载 卸载方式取决于您安装 uutils 的方式。如果您使用 Cargo 安装,请使用 Cargo 卸载。如果您使用 GNU Make 安装,请使用 Make 卸载。 ### 使用 Cargo 卸载 卸载 uutils: ``` cargo uninstall coreutils ``` ### 使用 GNU Make 卸载 卸载所有工具: ``` make uninstall ``` 卸载所有带有设置前缀的程序: ``` make PROG_PREFIX=uu- uninstall ``` 卸载多调用二进制文件: ``` make MULTICALL=y uninstall ``` 从自定义父目录卸载: ``` # 也支持 DESTDIR make PREFIX=/my/path uninstall ``` ## GNU 测试套件兼容性 以下是 uutils 通过的 GNU 测试数量的演变。关于主分支 GNU 测试结果的更详细分类可以在[用户手册](https://uutils.github.io/coreutils/docs/test_coverage.html)中找到。 有关主要的 meta bugs,请参阅 (许多缺失)。 ![Evolution over time](https://github.com/uutils/coreutils-tracking/blob/main/gnu-results.svg?raw=true)
## 贡献 要为 uutils 做贡献,请参阅 [CONTRIBUTING](CONTRIBUTING.md)。 ## 许可证 uutils 根据 MIT 许可证授权 - 有关详细信息,请参阅 `LICENSE` 文件 GNU Coreutils 根据 GPL 3.0 或更高版本授权。
标签:Awesome, CLI, DNS解析, GNU Coreutils, Rust, Shell, Unix, uutils, WiFi技术, 内存安全, 可视化界面, 开源项目, 数字足迹, 文件管理, 文本处理, 系统工具, 系统核心组件, 系统管理, 网络流量审计, 通知系统, 重写