linuxfromscratch:12.1:127-coreutils-9.4

Linux From Scratch - Version 12.1-systemd
Chapter 8. Instqlling Basic System Software
이전 위로 / 처음으로 다음
Meson-1.3.2 Check-0.15.2

Coreutils 패키지에는 모든 운영 체제에 필요한 기본 유틸리티 프로그램이 포함되어 있습니다.

  • 빌드 시간: 1.0 SBU
  • 디스크 공간: 175 MB

POSIX에서는 멀티바이트 로캘에서도 Coreutils의 프로그램이 문자 경계를 올바르게 인식해야 합니다. 다음 패치는 이 규정 미준수 및 기타 국제화 관련 버그를 수정합니다.

patch -Np1 -i ../coreutils-9.4-i18n-1.patch

참고
이 패치에서 많은 버그가 발견되었습니다. Coreutils 유지 관리자에게 새로운 버그를 보고할 때는 먼저 이 패치 없이도 재현 가능한 버그인지 확인해 주세요.

split 유틸리티의 보안 취약점을 수정합니다.

sed -e '/n_out += n_hold/,+4 s|.*bufsize.*|//&|' \
    -i src/split.c

Coreutils 패키지를 컴파일할 준비를 합니다.

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

configure 옵션의 의미

  • autoreconf
    국제화 패치로 빌드 시스템이 수정되었으므로 구성 파일을 다시 생성해야 합니다.
  • force_unsafe_configure=1
    루트 사용자가 패키지를 빌드할 수 있습니다.
  • –enable-no-install-program=kill, uptime
    다른 패키지에 의해 설치될 프로그램을 Coreutils가 설치하지 못하도록 합니다.

패키지를 컴파일합니다.

make

테스트 스위트를 실행하지 않는 경우 “패키지 설치”로 건너뛰세요.

이제 테스트 스위트를 실행할 준비가 되었습니다. 먼저 root 사용자로 테스트를 실행합니다.

make NON_ROOT_USERNAME=tester check-root

나머지 테스트는 tester 사용자로 실행하겠습니다. 특정 테스트에서는 사용자가 둘 이상의 그룹의 구성원이어야 합니다. 이러한 테스트가 건너뛰지 않도록 임시 그룹을 추가하고 사용자 tester를 임시 그룹의 일부로 만드세요.

groupadd -g 102 dummy -U tester

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

chown -R tester .

테스트를 진행합니다.1)

su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"

임시 그룹을 삭제합니다.

groupdel dummy

패키지를 설치합니다.

make install

FHS에 부합하는 위치로 프로그램을 이동합니다.

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"/' /usr/share/man/man8/chroot.8


  • 설치된 프로그램:
    [, 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, and yes
  • 설치된 라이브러리:
    libstdbuf.so (in /usr/libexec/coreutils)
  • 설치된 디렉토리:
    /usr/libexec/coreutils

간략한 설명

  • [
    실제 명령인 /usr/bin/[; test 명령의 동의어입니다.
  • base32
    base32 사양(RFC 4648)에 따라 데이터를 인코딩 및 디코딩합니다.
  • base64
    base64 사양(RFC 4648)에 따라 데이터를 인코딩 및 디코딩합니다.
  • b2sum
    BLAKE2(512비트) 체크섬을 출력하거나 확인합니다.
  • basename
    파일 이름에서 경로와 지정된 접미사를 제거합니다.
  • basenc
    다양한 알고리즘을 사용하여 데이터를 인코딩 또는 디코딩합니다.
  • cat
    파일을 표준 출력으로 연결합니다.
  • chcon
    파일 및 디렉터리의 보안 컨텍스트를 변경합니다
  • chgrp
    파일 및 디렉터리의 그룹 소유권을 변경합니다.
  • chmod
    각 파일의 권한을 지정된 모드로 변경합니다. 모드는 변경할 내용을 기호로 표현하거나 새 권한을 나타내는 8진수일 수 있습니다.
  • chown
    파일 및 디렉터리의 사용자 및 그룹 소유권을 변경합니다.
  • chroot
    지정한 디렉터리를 “/” 디렉터리로 변경합니다.
  • cksum
    순환 중복 검사(CRC) 체크섬과 지정한 각 파일의 바이트 수를 출력합니다.
  • comm
    정렬된 두 파일을 비교하여 고유한 줄과 공통된 줄을 세 개의 열에 출력합니다.
  • cp
    파일 복사
  • csplit
    주어진 파일을 여러 개의 새 파일로 분할하여 주어진 패턴이나 줄 번호에 따라 분리하고 각 새 파일의 바이트 수를 출력합니다.
  • cut
    주어진 필드 또는 위치에 따라 부분을 선택하여 줄의 섹션을 인쇄합니다.
  • date
    현재 날짜와 시간을 지정된 형식으로 표시하거나 시스템 날짜와 시간을 설정합니다.
  • dd
    주어진 블록 크기와 개수를 사용하여 파일을 복사하고 선택적으로 변환을 수행합니다.
  • df
    마운트된 모든 파일 시스템 또는 선택한 파일이 있는 파일 시스템에서만 사용 가능한 (그리고 사용된) 디스크 공간의 양을 보고합니다.
  • dir
    지정된 각 디렉터리의 내용을 나열합니다 (ls 명령과 동일).
  • dircolors
    ls에서 사용하는 색 구성표를 변경하기 위해 LS_COLOR 환경 변수를 설정하는 명령을 출력합니다.
  • dirname
    주어진 이름의 디렉터리 부분을 추출합니다.
  • du
    현재 디렉토리, 지정된 각 디렉토리(모든 하위 디렉토리 포함) 또는 지정된 각 파일에서 사용하는 디스크 공간의 양을 보고합니다.
  • echo
    주어진 문자열을 표시합니다
  • env
    수정된 환경에서 명령을 실행합니다
  • expand
    탭을 공백으로 변환합니다
  • expr
    표현식을 평가합니다
  • factor
    지정된 정수의 소인수를 출력합니다.
  • false
    아무것도 수행하지 않고 실패하며, 항상 실패를 나타내는 상태 코드와 함께 종료됩니다.
  • fmt
    지정된 파일에서 단락의 서식을 다시 지정합니다.
  • fold
    주어진 파일에서 정해진 너비로 줄 바꿈합니다.
  • groups
    사용자의 그룹 멤버십을 보고합니다.
  • head
    지정된 각 파일의 처음 10줄(또는 지정된 줄 수)을 인쇄합니다.
  • hostid
    호스트의 숫자 식별자(16진수)를 보고합니다.
  • id
    현재 사용자 또는 지정한 사용자의 유효 사용자 ID, 그룹 ID 및 그룹 멤버십을 보고합니다.
  • install
    권한 모드와 가능한 경우 소유자 및 그룹을 설정하면서 파일을 복사합니다.
  • join
    두 개의 개별 파일에서 동일한 조인 필드를 가진 행을 조인합니다.
  • link
    파일에 대한 하드 링크(지정된 이름)를 만듭니다.
  • ln
    파일 간에 하드 링크 또는 소프트(심볼릭) 링크를 만듭니다.
  • logname 현재 사용자의 로그인 이름을 보고합니다.
  • ls
    지정된 각 디렉토리의 내용을 나열합니다
  • md5sum
    메시지 다이제스트 5(MD5) 체크섬을 보고하거나 확인합니다.
  • mkdir
    주어진 이름으로 디렉터리를 만듭니다.
  • mkfifo
    주어진 이름으로 FIFO(First-In, First-Out), 즉 UNIX 용어로 “명명된 파이프”를 만듭니다.
  • 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비트 보안 해시 알고리즘 1(SHA1) 체크섬을 인쇄하거나 확인합니다.
  • sha224sum
    224비트 보안 해시 알고리즘 체크섬을 출력하거나 확인합니다.
  • sha256sum
    256비트 보안 해시 알고리즘 체크섬을 출력하거나 확인합니다.
  • sha384sum
    384비트 보안 해시 알고리즘 체크섬을 출력하거나 확인합니다.
  • sha512sum
    512비트 보안 해시 알고리즘 체크섬을 출력하거나 확인합니다.
  • shred
    주어진 파일을 복잡한 패턴으로 반복적으로 덮어쓰기 때문에 데이터를 복구하기 어렵게 만듭니다.
  • shuf
    텍스트 줄을 섞습니다.
  • sleep
    지정된 시간 동안 일시 정지
  • sort
    지정된 파일에서 줄을 정렬합니다
  • split
    주어진 파일을 크기 또는 줄 수에 따라 분할합니다.
  • stat
    파일 또는 파일 시스템 상태 표시
  • stdbuf
    표준 스트림에 대해 변경된 버퍼링 작업으로 명령을 실행합니다.
  • stty
    터미널 회선 설정을 설정하거나 보고합니다
  • sum
    주어진 각 파일의 체크섬과 블록 수를 출력합니다.
  • sync
    파일 시스템 버퍼를 플러시하고, 변경된 블록을 강제로 디스크에 저장하고 슈퍼 블록을 업데이트합니다.
  • tac
    주어진 파일을 역순으로 연결합니다.
  • tail
    지정된 각 파일의 마지막 10줄(또는 지정된 줄 수)을 인쇄합니다.
  • 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에서 사용하는 라이브러리

—-

사소한 정정
2024년 5월 24일 기준
Coreutils 테스트 스위트에서 test-getlogin 및 test/tty/tty.sh라는 이름의 두 가지 테스트가 실패하는 것으로 알려져 있지만 책에는 언급되어 있지 않습니다. 테스트 스위트를 실행할 때 표준 입력을 리디렉션하여 이러한 오류를 억제할 수 있습니다.


1)
아래의 구문을 익혀두면 sudo가 설치되기 전까지 유용하게 사용 가능합니다.
  • linuxfromscratch/12.1/127-coreutils-9.4.txt
  • 마지막으로 수정됨: 2024/06/18 01:57
  • 저자 baecy