GNU coreutils 를 rust 로 재구현한 uutils coreutils

개요

GNU coreutils 은 기본 GNU 명령어 세트를 묶은 패키지로 cat, basename, tr, ln 같은 시스템 기본 명령어를 제공합니다.

RHEL이나 CentOS 에서는 rpm -ql 명령어로 제공하는 파일의 목록을 확인할 수 있습니다.

 Click here to expand...
$ rpm -ql coreutils | grep bin

/usr/bin/[
/usr/bin/arch
/usr/bin/b2sum
/usr/bin/base32
/usr/bin/base64
/usr/bin/basename
/usr/bin/cat
/usr/bin/chcon
/usr/bin/chgrp
/usr/bin/chmod
/usr/bin/chown
/usr/bin/cksum
/usr/bin/comm
/usr/bin/cp
/usr/bin/csplit
/usr/bin/cut
/usr/bin/date
/usr/bin/dd
/usr/bin/df
/usr/bin/dir
/usr/bin/dircolors
/usr/bin/dirname
/usr/bin/du
/usr/bin/echo
/usr/bin/env
/usr/bin/expand
/usr/bin/expr
/usr/bin/factor
/usr/bin/false
/usr/bin/fmt
/usr/bin/fold
/usr/bin/groups
/usr/bin/head
/usr/bin/hostid
/usr/bin/id
/usr/bin/install
/usr/bin/join
/usr/bin/link
/usr/bin/ln
/usr/bin/logname
/usr/bin/ls
/usr/bin/md5sum
/usr/bin/mkdir
/usr/bin/mkfifo
/usr/bin/mknod
/usr/bin/mktemp
/usr/bin/mv
/usr/bin/nice
/usr/bin/nl
/usr/bin/nohup
/usr/bin/nproc
/usr/bin/numfmt
/usr/bin/od
/usr/bin/paste
/usr/bin/pathchk
/usr/bin/pinky
/usr/bin/pr
/usr/bin/printenv
/usr/bin/printf
/usr/bin/ptx
/usr/bin/pwd
/usr/bin/readlink
/usr/bin/realpath
/usr/bin/rm
/usr/bin/rmdir
/usr/bin/runcon
/usr/bin/seq
/usr/bin/sha1sum
/usr/bin/sha224sum
/usr/bin/sha256sum
/usr/bin/sha384sum
/usr/bin/sha512sum
/usr/bin/shred
/usr/bin/shuf
/usr/bin/sleep
/usr/bin/sort
/usr/bin/split
/usr/bin/stat
/usr/bin/stdbuf
/usr/bin/stty
/usr/bin/sum
/usr/bin/sync
/usr/bin/tac
/usr/bin/tail
/usr/bin/tee
/usr/bin/test
/usr/bin/timeout
/usr/bin/touch
/usr/bin/tr
/usr/bin/true
/usr/bin/truncate
/usr/bin/tsort
/usr/bin/tty
/usr/bin/uname
/usr/bin/unexpand
/usr/bin/uniq
/usr/bin/unlink
/usr/bin/users
/usr/bin/vdir
/usr/bin/wc
/usr/bin/who
/usr/bin/whoami
/usr/bin/yes
/usr/sbin/chroot

coreutils 은 유용하기때문에 Windows 나 OSX 에서도 사용하기를 원하는 경우가 많았고 OSX 는 FreeBSD 와 비슷하므로 사용하는데 큰 문제가 없습니다.

Windows는 구조가 너무 달라서 porting 하는 GNUwin32 같은 프로젝트가 존재했지만 몇 개 프로그램만 이식되었고 사용이 제한적인 문제가 있었습니다.


uutils coreutils은 Rust 언어로 GNU coreutils 을 재구현한 오픈소스로 다양한 OS 에서 사용할 수 있으며 rust 로 작성해 C 언어에 비해 안정성을 높였습니다.

uutils coreutils은 Busybox 처럼 하나의 프로그램으로 빌드되므로 작은 디바이스나 임베딩 장비에서도 사용하기 좋을 듯 합니다.

설치

Rust 의 빌드 툴인 cargo 를 먼저 설치해야 합니다.


github 저장소를 복제합니다.

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


buidl 명령어로 플랫폼에 맞는 바이너리를 빌드합니다.

$ cargo build --release


또는 직접 플랫폼을 지정해 줄 수도 있습니다.

$ cargo build --release --features windows
$ cargo build --release --features macos
$ cargo build --release --features unix


성공적으로 빌드가 끝나면 다음 명령어로 설치해 줍니다. 바이너리는 $HOME/.cargo/bin 에 설치되므로 PATH 환경 변수에 이 경로를 추가하면 됩니다.

$ cargo install --path .


사용

Busybox 처럼 단일 app 으로 나오므로 coreutils 명령어 뒤에 실행할 command 를 지정하면 됩니다.

$ coreutils ls


옵션없이 사용하면 지원하는 명령어를 출력합니다.

$ coreutils

coreutils 0.0.8 (multi-call binary)

Usage: coreutils [function [arguments...]]

Currently defined functions:

    [, base32, base64, basename, basenc, cat, cksum, comm, cp, csplit, cut, date, dd, df,
    dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, hashsum, head,
    join, link, ln, ls, md5sum, mkdir, mktemp, more, mv, nl, numfmt, od, paste, pr, printenv,


다음은 cat README.md 와 동일한 역할을 수행합니다.

$ coreutils cat README.md


같이 보기

Ref