#跨平台 #uutils #工具 #命令行工具 #shell-completion #cli

app coreutils

coreutils ~ GNU coreutils (更新);作为通用(跨平台)工具实现,用 Rust 编写

25 个版本

0.0.27 2024 年 6 月 22 日
0.0.25 2024 年 3 月 23 日
0.0.23 2023 年 11 月 15 日
0.0.20 2023 年 7 月 14 日
0.0.0 2019 年 9 月 28 日

#10 in 命令行工具

Download history 126/week @ 2024-05-03 101/week @ 2024-05-10 92/week @ 2024-05-17 69/week @ 2024-05-24 70/week @ 2024-05-31 75/week @ 2024-06-07 68/week @ 2024-06-14 454/week @ 2024-06-21 134/week @ 2024-06-28 70/week @ 2024-07-05 59/week @ 2024-07-12 93/week @ 2024-07-19 239/week @ 2024-07-26 89/week @ 2024-08-02 72/week @ 2024-08-09 47/week @ 2024-08-16

每月 468 次下载

MIT 许可证

2.5MB
27K SLoC

包含 (ELF exe/lib, 465KB) tests/fixtures/install/helloworld_linux,(ELF exe/lib, 440KB) helloworld_android,(ELF exe/lib, 315KB) helloworld_freebsd,(Mach-o exe, 425KB) tests/fixtures/install/helloworld_macos

uutils logo

uutils coreutils

Crates.io Discord License dependency status

CodeCov MSRV


uutils coreutils 是 GNU coreutils 的跨平台重实现,使用 Rust 编写。虽然所有程序都已实现,但某些选项可能缺失或可能遇到不同的行为。

要安装它

cargo install coreutils
~/.cargo/bin/coreutils

目标

uutils 的目标是成为 GNU 工具的直接替代品。与 GNU 的差异被视为错误。

uutils 的目标是尽可能在更多平台上工作,以便能够在 Linux、Mac、Windows 和其他平台上使用相同的工具。这确保,例如,脚本可以轻松地在平台之间传输。

文档

uutils 提供用户和开发者文档

这两个文档也可以在本地生成,具体说明可以在 coreutils 文档 仓库中找到。

要求

  • Rust (cargo, rustc)
  • GNU Make (可选)

Rust 版本

uutils 遵循 Rust 的发布渠道,并针对稳定版、测试版和夜间版进行了测试。当前最低支持的 Rust 版本 (MSRV) 为 1.70.0

构建

目前有两种方法可以构建 uutils 二进制文件:Cargo 或 GNU Make。

构建完整包(包括所有文档)需要在 Unix 平台上同时使用 Cargo 和 Gnu Make。

对于任何一种方法,我们首先需要获取仓库

git clone https://github.com/uutils/coreutils
cd coreutils

Cargo

使用 Cargo 构建 uutils 很容易,因为过程与其他 Rust 程序相同

cargo build --release

此命令在大多数Rust支持的平台上构建最便携的通用核心集uutils到一个多调用(BusyBox类型)的二进制文件中,命名为“coreutils”。

通常还有额外的平台特定uutils可用。在平台上构建这些扩展的uutils集(在该平台上)就像指定它作为功能一样简单。

cargo build --release --features macos
# or ...
cargo build --release --features windows
# or ...
cargo build --release --features unix

如果您不想将平台上可用的所有工具都构建到最终二进制文件中,也可以手动指定要构建的工具。例如

cargo build --features "base32 cat echo rm" --no-default-features

如果您不想构建多调用二进制文件,而想构建独立的工具二进制文件,这也是可能的。每个工具都包含在主仓库中自己的包内,命名为“uu_UTILNAME”。要构建单个工具,请使用cargo仅构建特定的包(使用--package [又称-p]选项)。例如

cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm

GNU Make

使用make构建也是一个简单的过程。

简单地构建所有可用的工具

make

在发布模式下

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补全或man页面。为了使man页面或shell补全工作,请使用GNU Make或参阅手动安装shell补全/手动安装man页面

使用GNU Make安装

安装所有可用的工具

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=PREFIX_GOES_HERE install

安装多调用二进制文件

make MULTICALL=y install

设置安装父目录(默认值是/usr/local)

# DESTDIR is also supported
make PREFIX=/my/path install

使用make安装将为所有已安装工具安装bashfishzsh的shell补全。也可以生成elvishpowershell的补全;请参阅手动安装shell补全

手动安装shell补全

coreutils二进制文件可以为bashelvishfishpowershellzshshell生成补全。它将结果打印到标准输出。

语法是

cargo run completion <utility> <shell>

因此,要将lsbash上的补全安装到/usr/local/share/bash-completion/completions/ls,请运行

cargo run completion ls bash > /usr/local/share/bash-completion/completions/ls

手动安装man页面

生成man页面的语法是

cargo run manpage <utility>

因此,要将ls的man页面安装到/usr/local/share/man/man1/ls.1,请运行

cargo run manpage ls > /usr/local/share/man/man1/ls.1

卸载

卸载方式取决于您如何安装uutils。如果您使用Cargo进行安装,请使用Cargo进行卸载。如果您使用GNU Make进行安装,请使用Make进行卸载。

使用Cargo卸载

要卸载uutils

cargo uninstall uutils

使用GNU Make卸载

卸载所有工具

make uninstall

卸载带有特定前缀的每个程序

make PROG_PREFIX=PREFIX_GOES_HERE uninstall

卸载多调用二进制文件

make MULTICALL=y uninstall

从自定义父目录卸载

# DESTDIR is also supported
make PREFIX=/my/path uninstall

GNU测试套件兼容性

以下展示了 uutils 通过的 GNU 测试的演变过程。主分支的 GNU 测试结果的更详细分析可以在用户手册中找到。

请参阅https://github.com/orgs/uutils/projects/1了解主要元错误(许多已缺失)。

Evolution over time

贡献

要为 uutils 贡献,请参阅CONTRIBUTING

许可证

uutils 采用 MIT 许可证 - 详细内容请参阅 LICENSE 文件

GNU Coreutils 采用 GPL 3.0 或更高版本。

依赖关系

~6–37MB
~589K SLoC