6.54. Coreutils-8.31

Coreutils 패키지는 기본적인 시스템 특성을 보여주고 설정하기 위한 유틸리티를 포함하고 있다.

예상 빌드 시간: 2.3 SBU
필요 디스크 공간: 202 MB

6.54.1. Coreutils 설치

POSIX를 사용하려면 Coreutils의 프로그램들이 멀티바이트 문자에서도 문자 경계를 정확하게 인식해야 한다. 다음 패치는 이 미준수 사항과 기타 다국어화 관련 버그를 수정한다.

patch -Np1 -i ../coreutils-8.31-i18n-1.patch
[참고]

참고

과거에는 이 패치에서 많은 버그가 발견되었다. Coreutils 관리자에게 새 버그를 보고하려면 이 패치 없이도 버그가 재현 가능한지 먼저 확인해주기 바란다.

일부 시스템에서 무한 루프에 빠질 수 있는 한 테스트를 숨긴다:

sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk

이제 Coreutils 컴파일을 준비한다:

autoreconf -fiv
FORCE_UNSAFE_CONFIGURE=1 ./configure \
            --prefix=/usr            \
            --enable-no-install-program=kill,uptime

Configure 옵션들의 의미:

autoreconf

생성된 설정 파일들을 최신 버전의 automake와 일치하도록 업데이트한다.

FORCE_UNSAFE_CONFIGURE=1

패키지를 root 유저로 빌드할 수 있도록 한다.

--enable-no-install-program=kill,uptime

나중에 다른 패키지가 설치할 바이너리를 Coreutils가 설치하지 않도록 한다.

패키지를 컴파일한다:

make

테스트 스위트를 실행하지 않으려면 패키지 설치로 이동하라.

이제 테스트 스위트를 실행할 준비가 되었다. 먼저 root 유저로 실행해야 하는 테스트를 실행하라:

make NON_ROOT_USERNAME=nobody check-root

나머지 테스트는 nobody 유저로 실행할 것이다. 그러나 어떤 테스트들은 유저가 둘 이상의 그룹 구성원이어야 한다. 이런 테스트들을 건너뛰지 않도록 임시 그룹을 추가해서 nobody 유저가 해당 그룹에 속하도록 만든다:

echo "dummy:x:1000:nobody" >> /etc/group

root 사용자가 아닌 유저도 다음 테스트를 컴파일하고 실행할 수 있도록 일부 권한을 수정한다:

chown -Rv nobody . 

이제 검사를 실행한다. su 환경의 PATH에 /tools/bin이 포함되어 있는지 확인하라.

su nobody -s /bin/bash \
          -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"

테스트 프로그램인 test-getlogin은 chroot 환경처럼 부분적으로 빌드된 시스템 환경에서 실패한다고 알려져 있지만, 이 장을 마치고 실행하면 통과될 것이다. 테스트 프로그램 tty.sh도 실패한 것으로 알려져 있다.

임시 그룹을 삭제하라:

sed -i '/dummy/d' /etc/group

패키지를 설치한다:

make install

프로그램을 FHS에서 지정한 위치로 이동한다:

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8

LFS-부트스크립트 패키지의 스크립트 중 몇 가지는 head, nice, sleep, touch가 필요하다. 부팅 중에는 /usr에 접근할 수 없으므로 FHS를 준수하기 위해서는 이 바이너리들이 root 파티션에 있어야 한다:

mv -v /usr/bin/{head,nice,sleep,touch} /bin

6.54.2. Coreutils의 내용

설치된 프로그램들: [, b2sum, base32, base64, basename, basenc, cat, chcon, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc, numfmt, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, realpath, rm, rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, sync, tac, tail, tee, test, timeout, touch, tr, true, truncate, tsort, tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, yes
설치된 라이브러리: (/usr/libexec/coreutils의) libstdbuf.so
설치된 디렉토리: /usr/libexec/coreutils

요약

base32

base32 사양에 따라 데이터 인코딩 및 디코딩(RFC 4648)

base64

base64 사양에 따라 데이터 인코딩 및 디코딩(RFC 4648)

b2sum

BLAKE2 (512-bit) 체크섬을 출력하거나 확인

basename

파일 이름에서 경로 및 지정된 접미사 제거

basenc

다양한 알고리즘을 사용하여 데이터 인코딩 또는 디코딩

cat

파일을 표준 출력에 연결

chcon

파일 및 디렉토리에 대한 보안 설정 변경

chgrp

파일 및 디렉토리의 그룹 소유권 변경

chmod

각 파일의 사용 권한을 지정된 모드로 변경; 이 모드는 변경 사항을 뜻하는 문자나 새 사용 권한을 설명하는 8진수로 나타낼 수 있다.

chown

파일 및 디렉토리의 유저 및/또는 그룹 소유권 변경

chroot

지정된 디렉토리를 / 디렉토리인 것처럼 인식하게 해서 명령 실행

cksum

순환 중복 검사(Cyclic Redundancy Check, CRC) 체크섬과 지정된 각 파일의 바이트 수 출력

comm

두 개의 정렬된 파일을 비교하여 고유한 행과 공통적으로 갖는 행을 세 열로 출력

cp

파일들을 복사

csplit

지정된 파일을 여러 개의 새 파일로 분할하여 지정된 패턴 또는 행 번호에 따라 분리하고 각 새 파일의 바이트 수를 출력

cut

주어진 필드나 위치에 따라 행의 일부를 골라서 출력

date

현재 시간을 지정된 형식으로 표시하거나 시스템 날짜를 설정

dd

지정된 블록 크기와 갯수를 사용해서 파일을 복사. 동시에 데이터를 변환하는 것도 가능하다.

df

마운트된 모든 파일 시스템이나, 지정한 파일이 포함된 파일 시스템의 사용 가능한 디스크 공간을 출력

dir

지정된 각 디렉토리의 내용을 나열(ls 명령과 동일)

dircolors

LS_COLOR 환경 변수를 설정해서 ls에서 사용하는 색 설정을 변경하는 명령 출력

dirname

파일 이름에서 디렉토리 이외의 접미사 제거

du

현재 디렉토리, 지정된 디렉토리(모든 하위 디렉토리 포함) 또는 지정된 파일 각각에 사용되는 디스크 공간 출력

echo

지정된 문자열 표시

env

변경된 환경에서 명령 실행

expand

탭 문자를 공백 문자로 변환

expr

정규 표현식의 값을 표준 출력으로 출력

factor

지정된 모든 정수의 소인수를 출력

false

아무 작업도 수행하지 않음; 항상 실패를 나타내는 상태 코드와 함께 종료됨

fmt

지정된 파일의 단락 형식을 수정

fold

지정된 파일에서 줄 바꿈을 수행

groups

유저의 그룹 구성원 자격 출력

head

지정된 각 파일의 처음 열 줄(또는 지정된 줄 수) 출력

hostid

호스트의 숫자 식별자(16진수) 출력

id

현재 사용자나 지정된 사용자의 유효한 유저 ID, 그룹 ID, 그룹 구성원 자격 출력

install

권한 모드와 가능하면 소유자 및 그룹을 설정하면서 파일을 복사

join

두 개의 개별 파일에서 동일한 결합 필드를 가진 행끼리 합침

link

파일에 지정된 이름으로 하드 링크 생성

ln

파일 간의 하드 링크 또는 소프트(심볼릭) 링크 생성

logname

현재 사용자의 로그인 이름 출력

ls

지정된 각 디렉토리의 내용 나열

md5sum

Message Digest 5 (MD5) 체크섬 출력 또는 확인

mkdir

지정된 이름으로 디렉토리 생성

mkfifo

지정된 이름을 사용하여 UNIX 용어로 "named pipe"인 FIFO(First-In, First-Outs) 생성

mknod

지정된 이름으로 장치 노드 생성; 장치 노드는 문자 특수 파일, 블록 특수 파일 또는 FIFO이다.

mktemp

안전한 방식으로 임시 파일 생성; 스크립트에 사용됨

mv

파일 또는 디렉토리 이동 또는 이름 변경

nice

수정된 예약 우선 순위로 프로그램 실행

nl

지정된 파일로부터 줄 번호를 매김

nohup

프로세스가 중단되지 않도록 명령을 백그라운드에서 실행하고 출력을 로그 파일로 저장

nproc

사용할 수 있는 프로세싱 유닛의 갯수 출력

numfmt

숫자를 사람이 읽기 쉬운 문자열로 또는 문자열을 숫자로 변환

od

8진수 및 기타 형식의 파일 덤프

paste

지정된 파일들을 병합하여 각각의 행들을 탭 문자로 구분해 나란히 결합

pathchk

파일 이름이 유효한지 또는 이식 가능한지 확인

pinky

가벼운 finger 클라이언트; 지정된 유저에 대한 몇 가지 정보들을 출력

pr

인쇄할 파일 페이지와 열 형식 지정

printenv

환경 변수들을 출력

printf

C printf 함수처럼 지정된 형식에 따라 지정된 인수 출력

ptx

지정된 파일의 내용에서 각 키워드를 포함하는 순열 인덱스 생성

pwd

현재 작업 디렉토리의 이름 출력

readlink

지정된 심볼릭 링크의 값을 출력

realpath

실제 경로 출력

rm

파일이나 디렉토리 삭제

rmdir

디렉토리가 비어있으면 삭제

runcon

지정된 보안 설정을 사용해서 명령 실행

seq

지정된 범위 내에서 지정된 공차를 갖는 수열 출력

sha1sum

160비트 Secure Hash Algorithm 1 (SHA1) 체크섬 출력 또는 확인

sha224sum

224비트 Secure Hash Algorithm 1 체크섬 출력 또는 확인

sha256sum

256비트 Secure Hash Algorithm 1 체크섬 출력 또는 확인

sha384sum

384비트 Secure Hash Algorithm 1 체크섬 출력 또는 확인

sha512sum

512비트 Secure Hash Algorithm 1 체크섬 출력 또는 확인

shred

지정된 파일을 복잡한 패턴으로 반복적으로 덮어써서 데이터 복구가 어렵게 함

shuf

텍스트 행 순서를 섞음

sleep

지정된 시간 동안 일시 중지

sort

지정된 파일에서 행 정렬

split

지정된 파일을 크기 또는 줄 수에 따라 여러 개로 분할

stat

파일이나 파일 시스템의 상태 표시

stdbuf

표준 스트림에 대해 버퍼링 작업을 수정해서 명령 실행

stty

터미널 라인 설정을 변경 또는 출력

sum

지정된 각 파일에 대한 체크섬 및 블록 수 출력

sync

파일 시스템 버퍼를 비움; 변경된 블록들을 디스크에 기록하고 수퍼 블록을 업데이트함

tac

지정된 파일들을 역순으로 연결

tail

지정된 각 파일의 마지막 열 줄(또는 지정된 줄 수) 출력

tee

표준 입력을 읽어서 표준 출력과 지정된 파일로 동시에 기록

test

값을 비교하고 파일 형식 확인

timeout

시간 제한과 함께 명령 실행

touch

파일 타임스탬프 변경; 주어진 파일의 접근 및 수정 시간을 현재 시간으로 설정; 존재하지 않는 파일이면 시간을 0으로 생성

tr

표준 입력에서 지정된 문자를 치환, 압축 및 삭제

true

아무 작업도 수행하지 않음; 항상 성공을 나타내는 상태 코드와 함께 종료됨

truncate

지정된 크기로 파일 축소 또는 확장

tsort

토폴로지 정렬을 수행; 지정된 파일의 부분 순서에 따라 완전히 정렬된 목록을 작성

tty

표준 입력에 연결된 터미널의 파일 이름 출력

uname

시스템 정보 출력

unexpand

공백 문자를 탭 문자로 변환

uniq

중복된 행들을 하나만 제외하고 모두 제거

unlink

지정된 파일 삭제

users

현재 로그온한 유저의 이름 출력

vdir

ls -l와 동일

wc

지정된 파일의 행, 단어 및 바이트 수 출력. 둘 이상의 파일이 주어진 경우 행 갯수의 합계도 함께 출력

who

로그온 한 유저 출력

whoami

현재 실행 중인 유저 ID에 해당하는 유저 이름 출력

yes

종료될 때까지 y 또는 지정된 문자열을 반복해서 출력

libstdbuf

stdbuf에서 사용하는 라이브러리