uutils/coreutils
GitHub: uutils/coreutils
跨平台 Rust 语言重制的 GNU 核心工具集,提供内存安全的系统基础命令替代方案。
Stars: 22861 | Forks: 1786

# uutils coreutils
[](https://crates.io/crates/coreutils)
[](https://discord.gg/wQVJbvJ)
[](https://github.com/uutils/coreutils/blob/main/LICENSE)
[](https://deps.rs/repo/github/uutils/coreutils)
[](https://codecov.io/gh/uutils/coreutils)
[](https://hosted.weblate.org/projects/rust-coreutils/)
我们在 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,请参阅 (许多缺失)。

## 贡献
要为 uutils 做贡献,请参阅 [CONTRIBUTING](CONTRIBUTING.md)。
## 许可证
uutils 根据 MIT 许可证授权 - 有关详细信息,请参阅 `LICENSE` 文件
GNU Coreutils 根据 GPL 3.0 或更高版本授权。标签:Awesome, CLI, DNS解析, GNU Coreutils, Rust, Shell, Unix, uutils, WiFi技术, 内存安全, 可视化界面, 开源项目, 数字足迹, 文件管理, 文本处理, 系统工具, 系统核心组件, 系统管理, 网络流量审计, 通知系统, 重写