2023-03-14 20:53:22 +00:00
|
|
|
<!-- markdownlint-disable MD033 MD041 MD002 -->
|
|
|
|
<!-- markdownlint-disable commands-show-output no-duplicate-heading -->
|
2023-07-07 22:32:32 +00:00
|
|
|
<!-- spell-checker:ignore markdownlint ; (options) DESTDIR UTILNAME manpages reimplementation oranda -->
|
2023-07-05 14:00:16 +00:00
|
|
|
<div class="oranda-hide">
|
2023-03-14 16:09:49 +00:00
|
|
|
<div align="center">
|
|
|
|
|
|
|
|
![uutils logo](docs/src/logo.svg)
|
|
|
|
|
2021-04-08 01:20:48 +00:00
|
|
|
# uutils coreutils
|
2013-08-02 17:24:20 +00:00
|
|
|
|
2021-03-15 09:03:34 +00:00
|
|
|
[![Crates.io](https://img.shields.io/crates/v/coreutils.svg)](https://crates.io/crates/coreutils)
|
2019-04-28 02:14:22 +00:00
|
|
|
[![Discord](https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat)](https://discord.gg/wQVJbvJ)
|
2022-03-06 21:09:56 +00:00
|
|
|
[![License](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/uutils/coreutils/blob/main/LICENSE)
|
2018-05-02 16:50:42 +00:00
|
|
|
[![dependency status](https://deps.rs/repo/github/uutils/coreutils/status.svg)](https://deps.rs/repo/github/uutils/coreutils)
|
2019-04-28 02:14:22 +00:00
|
|
|
|
2021-04-08 01:36:51 +00:00
|
|
|
[![CodeCov](https://codecov.io/gh/uutils/coreutils/branch/master/graph/badge.svg)](https://codecov.io/gh/uutils/coreutils)
|
2023-09-04 05:18:18 +00:00
|
|
|
![MSRV](https://img.shields.io/badge/MSRV-1.70.0-brightgreen)
|
2019-04-28 02:14:22 +00:00
|
|
|
|
2023-03-14 16:09:49 +00:00
|
|
|
</div>
|
|
|
|
|
|
|
|
---
|
2015-07-23 00:46:58 +00:00
|
|
|
|
2023-07-05 14:00:16 +00:00
|
|
|
</div>
|
2021-04-08 01:32:58 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
uutils coreutils is a cross-platform reimplementation of the GNU coreutils in
|
|
|
|
[Rust](http://www.rust-lang.org). While all programs have been implemented, some
|
|
|
|
options might be missing or different behavior might be experienced.
|
2013-08-02 17:24:20 +00:00
|
|
|
|
2023-07-05 14:00:16 +00:00
|
|
|
<div class="oranda-hide">
|
|
|
|
|
2022-04-02 12:21:16 +00:00
|
|
|
To install it:
|
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo install coreutils
|
|
|
|
~/.cargo/bin/coreutils
|
2022-04-02 12:21:16 +00:00
|
|
|
```
|
|
|
|
|
2023-07-05 14:00:16 +00:00
|
|
|
</div>
|
|
|
|
|
2023-03-03 17:42:38 +00:00
|
|
|
<!-- markdownlint-disable-next-line MD026 -->
|
2013-08-02 17:24:20 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
## Goals
|
|
|
|
|
|
|
|
uutils aims to be a drop-in replacement for the GNU utils. Differences with GNU
|
|
|
|
are treated as bugs.
|
|
|
|
|
|
|
|
uutils aims to work on as many platforms as possible, to be able to use the same
|
|
|
|
utils on Linux, Mac, Windows and other platforms. This ensures, for example,
|
|
|
|
that scripts can be easily transferred between platforms.
|
2013-08-02 17:24:20 +00:00
|
|
|
|
2023-07-05 14:00:16 +00:00
|
|
|
<div class="oranda-hide">
|
|
|
|
|
2022-01-29 00:19:15 +00:00
|
|
|
## Documentation
|
|
|
|
uutils has both user and developer documentation available:
|
|
|
|
|
2024-04-04 12:51:47 +00:00
|
|
|
- [User Manual](https://uutils.github.io/coreutils/docs/)
|
2024-03-18 16:10:06 +00:00
|
|
|
- [Developer Documentation](https://docs.rs/crate/coreutils/)
|
2022-01-29 00:19:15 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
Both can also be generated locally, the instructions for that can be found in
|
|
|
|
the [coreutils docs](https://github.com/uutils/uutils.github.io) repository.
|
2022-01-29 00:19:15 +00:00
|
|
|
|
2023-07-05 14:00:16 +00:00
|
|
|
|
2022-10-14 15:11:27 +00:00
|
|
|
<!-- ANCHOR: build (this mark is needed for mdbook) -->
|
2023-03-14 16:19:12 +00:00
|
|
|
|
2021-04-08 01:20:48 +00:00
|
|
|
## Requirements
|
2017-12-04 14:22:41 +00:00
|
|
|
|
2023-03-03 17:42:38 +00:00
|
|
|
- Rust (`cargo`, `rustc`)
|
|
|
|
- GNU Make (optional)
|
2017-12-07 06:51:02 +00:00
|
|
|
|
2021-04-08 01:20:48 +00:00
|
|
|
### Rust Version
|
2017-12-07 06:51:02 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
uutils follows Rust's release channels and is tested against stable, beta and
|
2023-09-04 05:18:18 +00:00
|
|
|
nightly. The current Minimum Supported Rust Version (MSRV) is `1.70.0`.
|
2017-12-04 14:22:41 +00:00
|
|
|
|
2022-01-29 00:42:18 +00:00
|
|
|
## Building
|
2013-12-27 21:32:56 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
There are currently two methods to build the uutils binaries: either Cargo or
|
|
|
|
GNU Make.
|
2017-12-07 06:51:02 +00:00
|
|
|
|
2021-04-08 01:59:40 +00:00
|
|
|
> Building the full package, including all documentation, requires both Cargo
|
|
|
|
> and Gnu Make on a Unix platform.
|
|
|
|
|
|
|
|
For either method, we first need to fetch the repository:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
git clone https://github.com/uutils/coreutils
|
|
|
|
cd coreutils
|
2017-12-07 06:51:02 +00:00
|
|
|
```
|
|
|
|
|
2021-04-08 01:20:48 +00:00
|
|
|
### Cargo
|
2017-12-07 06:51:02 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
Building uutils using Cargo is easy because the process is the same as for every
|
|
|
|
other Rust program:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo build --release
|
2017-12-07 06:51:02 +00:00
|
|
|
```
|
|
|
|
|
2021-04-08 01:59:40 +00:00
|
|
|
This command builds the most portable common core set of uutils into a multicall
|
|
|
|
(BusyBox-type) binary, named 'coreutils', on most Rust-supported platforms.
|
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
Additional platform-specific uutils are often available. Building these expanded
|
|
|
|
sets of uutils for a platform (on that platform) is as simple as specifying it
|
|
|
|
as a feature:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo build --release --features macos
|
2021-04-08 01:59:40 +00:00
|
|
|
# or ...
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo build --release --features windows
|
2021-04-08 01:59:40 +00:00
|
|
|
# or ...
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo build --release --features unix
|
2018-05-02 16:50:42 +00:00
|
|
|
```
|
|
|
|
|
2017-12-07 06:51:02 +00:00
|
|
|
If you don't want to build every utility available on your platform into the
|
2023-03-14 16:19:12 +00:00
|
|
|
final binary, you can also specify which ones you want to build manually. For
|
|
|
|
example:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo build --features "base32 cat echo rm" --no-default-features
|
2013-12-27 21:32:56 +00:00
|
|
|
```
|
2017-12-07 06:51:02 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
If you don't want to build the multicall binary and would prefer to build the
|
|
|
|
utilities as individual binaries, that is also possible. Each utility is
|
|
|
|
contained in its own package within the main repository, named "uu_UTILNAME". To
|
|
|
|
build individual utilities, use cargo to build just the specific packages (using
|
|
|
|
the `--package` [aka `-p`] option). For example:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm
|
2013-12-27 21:32:56 +00:00
|
|
|
```
|
|
|
|
|
2021-04-08 01:20:48 +00:00
|
|
|
### GNU Make
|
2017-12-07 06:51:02 +00:00
|
|
|
|
|
|
|
Building using `make` is a simple process as well.
|
|
|
|
|
|
|
|
To simply build all available utilities:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make
|
2017-12-07 06:51:02 +00:00
|
|
|
```
|
2014-10-26 04:54:37 +00:00
|
|
|
|
2023-03-05 22:09:45 +00:00
|
|
|
In release mode:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
make PROFILE=release
|
|
|
|
```
|
|
|
|
|
2013-12-27 21:32:56 +00:00
|
|
|
To build all but a few of the available utilities:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make SKIP_UTILS='UTILITY_1 UTILITY_2'
|
2013-12-27 21:32:56 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
To build only a few of the available utilities:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make UTILS='UTILITY_1 UTILITY_2'
|
2014-07-20 08:27:47 +00:00
|
|
|
```
|
|
|
|
|
2022-01-29 00:42:18 +00:00
|
|
|
## Installation
|
2014-06-13 02:14:56 +00:00
|
|
|
|
2023-03-03 17:42:38 +00:00
|
|
|
### Install with Cargo
|
2017-12-07 06:51:02 +00:00
|
|
|
|
2017-12-30 06:17:54 +00:00
|
|
|
Likewise, installing can simply be done using:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-12 21:01:00 +00:00
|
|
|
cargo install --path . --locked
|
2014-06-13 02:14:56 +00:00
|
|
|
```
|
2017-12-30 06:17:54 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
This command will install uutils into Cargo's _bin_ folder (_e.g._
|
|
|
|
`$HOME/.cargo/bin`).
|
2017-12-30 06:17:54 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
This does not install files necessary for shell completion or manpages. For
|
|
|
|
manpages or shell completion to work, use `GNU Make` or see
|
|
|
|
`Manually install shell completions`/`Manually install manpages`.
|
2021-06-19 10:37:01 +00:00
|
|
|
|
2023-03-03 17:42:38 +00:00
|
|
|
### Install with GNU Make
|
2017-12-30 06:17:54 +00:00
|
|
|
|
|
|
|
To install all available utilities:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make install
|
2014-06-13 02:14:56 +00:00
|
|
|
```
|
|
|
|
|
2019-10-12 20:09:33 +00:00
|
|
|
To install using `sudo` switch `-E` must be used:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
sudo -E make install
|
2019-10-12 20:09:33 +00:00
|
|
|
```
|
|
|
|
|
2014-06-13 02:14:56 +00:00
|
|
|
To install all but a few of the available utilities:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make SKIP_UTILS='UTILITY_1 UTILITY_2' install
|
2014-06-13 02:14:56 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
To install only a few of the available utilities:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make UTILS='UTILITY_1 UTILITY_2' install
|
2014-06-13 02:14:56 +00:00
|
|
|
```
|
|
|
|
|
2015-12-24 04:14:55 +00:00
|
|
|
To install every program with a prefix (e.g. uu-echo uu-cat):
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make PROG_PREFIX=PREFIX_GOES_HERE install
|
2014-06-13 02:14:56 +00:00
|
|
|
```
|
|
|
|
|
2014-07-01 08:07:16 +00:00
|
|
|
To install the multicall binary:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make MULTICALL=y install
|
2015-12-24 04:14:55 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
Set install parent directory (default value is /usr/local):
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2017-12-07 06:51:02 +00:00
|
|
|
# DESTDIR is also supported
|
2023-03-03 17:42:38 +00:00
|
|
|
make PREFIX=/my/path install
|
2014-07-01 08:07:16 +00:00
|
|
|
```
|
|
|
|
|
2021-06-19 10:37:01 +00:00
|
|
|
Installing with `make` installs shell completions for all installed utilities
|
|
|
|
for `bash`, `fish` and `zsh`. Completions for `elvish` and `powershell` can also
|
|
|
|
be generated; See `Manually install shell completions`.
|
|
|
|
|
|
|
|
### Manually install shell completions
|
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
The `coreutils` binary can generate completions for the `bash`, `elvish`,
|
|
|
|
`fish`, `powershell` and `zsh` shells. It prints the result to stdout.
|
2021-06-19 10:37:01 +00:00
|
|
|
|
|
|
|
The syntax is:
|
2023-03-03 17:42:38 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2021-06-19 10:37:01 +00:00
|
|
|
cargo run completion <utility> <shell>
|
|
|
|
```
|
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
So, to install completions for `ls` on `bash` to
|
|
|
|
`/usr/local/share/bash-completion/completions/ls`, run:
|
2021-06-19 10:37:01 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2021-06-19 10:37:01 +00:00
|
|
|
cargo run completion ls bash > /usr/local/share/bash-completion/completions/ls
|
|
|
|
```
|
|
|
|
|
2023-03-04 18:40:58 +00:00
|
|
|
### Manually install manpages
|
|
|
|
|
|
|
|
To generate manpages, the syntax is:
|
2023-03-14 16:19:12 +00:00
|
|
|
|
2023-03-04 18:40:58 +00:00
|
|
|
```bash
|
|
|
|
cargo run manpage <utility>
|
|
|
|
```
|
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
So, to install the manpage for `ls` to `/usr/local/share/man/man1/ls.1` run:
|
2023-03-04 18:40:58 +00:00
|
|
|
|
|
|
|
```bash
|
|
|
|
cargo run manpage ls > /usr/local/share/man/man1/ls.1
|
|
|
|
```
|
|
|
|
|
2022-01-29 00:42:18 +00:00
|
|
|
## Un-installation
|
2014-06-13 02:14:56 +00:00
|
|
|
|
2023-03-14 16:19:12 +00:00
|
|
|
Un-installation differs depending on how you have installed uutils. If you used
|
|
|
|
Cargo to install, use Cargo to uninstall. If you used GNU Make to install, use
|
2017-12-30 06:17:54 +00:00
|
|
|
Make to uninstall.
|
2017-12-07 06:51:02 +00:00
|
|
|
|
2023-03-03 17:42:38 +00:00
|
|
|
### Uninstall with Cargo
|
2017-12-30 06:17:54 +00:00
|
|
|
|
|
|
|
To uninstall uutils:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
cargo uninstall uutils
|
2014-06-13 02:49:00 +00:00
|
|
|
```
|
2017-12-30 06:17:54 +00:00
|
|
|
|
2023-03-03 17:42:38 +00:00
|
|
|
### Uninstall with GNU Make
|
2017-12-30 06:17:54 +00:00
|
|
|
|
|
|
|
To uninstall all utilities:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make uninstall
|
2014-06-13 02:49:00 +00:00
|
|
|
```
|
|
|
|
|
2014-06-25 16:47:34 +00:00
|
|
|
To uninstall every program with a set prefix:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make PROG_PREFIX=PREFIX_GOES_HERE uninstall
|
2014-06-13 02:49:00 +00:00
|
|
|
```
|
2014-06-13 02:14:56 +00:00
|
|
|
|
2014-07-01 08:07:16 +00:00
|
|
|
To uninstall the multicall binary:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2023-03-03 17:42:38 +00:00
|
|
|
make MULTICALL=y uninstall
|
2015-12-24 04:14:55 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
To uninstall from a custom parent directory:
|
2021-04-08 01:22:33 +00:00
|
|
|
|
2023-03-04 17:36:12 +00:00
|
|
|
```shell
|
2017-12-07 06:51:02 +00:00
|
|
|
# DESTDIR is also supported
|
2023-03-03 17:42:38 +00:00
|
|
|
make PREFIX=/my/path uninstall
|
2014-07-01 08:07:16 +00:00
|
|
|
```
|
2023-03-03 17:42:38 +00:00
|
|
|
|
2022-10-14 15:11:27 +00:00
|
|
|
<!-- ANCHOR_END: build (this mark is needed for mdbook) -->
|
2014-07-01 08:07:16 +00:00
|
|
|
|
2023-03-14 16:16:10 +00:00
|
|
|
## GNU test suite compatibility
|
2021-05-21 16:31:21 +00:00
|
|
|
|
2022-02-17 09:27:13 +00:00
|
|
|
Below is the evolution of how many GNU tests uutils passes. A more detailed
|
|
|
|
breakdown of the GNU test results of the main branch can be found
|
2024-04-04 12:51:47 +00:00
|
|
|
[in the user manual](https://uutils.github.io/coreutils/docs/test_coverage.html).
|
2022-02-17 09:27:13 +00:00
|
|
|
|
2024-01-03 10:24:01 +00:00
|
|
|
See <https://github.com/orgs/uutils/projects/1> for the main meta bugs
|
2023-03-14 16:26:18 +00:00
|
|
|
(many are missing).
|
|
|
|
|
2021-05-21 16:31:21 +00:00
|
|
|
![Evolution over time](https://github.com/uutils/coreutils-tracking/blob/main/gnu-results.png?raw=true)
|
|
|
|
|
2023-07-05 14:00:16 +00:00
|
|
|
</div> <!-- close oranda-hide div -->
|
|
|
|
|
2022-01-29 00:42:18 +00:00
|
|
|
## Contributing
|
2013-11-30 23:07:22 +00:00
|
|
|
|
2017-12-07 06:51:02 +00:00
|
|
|
To contribute to uutils, please see [CONTRIBUTING](CONTRIBUTING.md).
|
2013-11-30 23:07:22 +00:00
|
|
|
|
2021-04-08 01:20:48 +00:00
|
|
|
## License
|
2013-08-02 17:24:20 +00:00
|
|
|
|
2014-02-16 20:44:50 +00:00
|
|
|
uutils is licensed under the MIT License - see the `LICENSE` file for details
|
2018-04-11 10:47:37 +00:00
|
|
|
|
2021-03-09 17:43:59 +00:00
|
|
|
GNU Coreutils is licensed under the GPL 3.0 or later.
|