문서 보기이전 판역링크Fold/unfold all맨 위로 이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요. ^ Linux From Scratch - Version 12.1-systemd ^^^ ^ Chapter 8. Instqlling Basic System Software ^^^ |[[.:126-meson-1.3.2|이전]] | [[.:01-introduction|위로]] / [[.:12.1|처음으로]] | [[.:128-check-0.15.2|다음]]| |Meson-1.3.2 | Check-0.15.2| ------ ===== 8.57. Coreutils-9.4 ===== Coreutils 패키지에는 모든 운영 체제에 필요한 기본 유틸리티 프로그램이 포함되어 있습니다. * **빌드 시간:** 1.0 SBU * **디스크 공간:** 175 MB ------ ==== 8.57.1. Coreutils 설치 ==== POSIX에서는 멀티바이트 로캘에서도 Coreutils의 프로그램이 문자 경계를 올바르게 인식해야 합니다. 다음 패치는 이 규정 미준수 및 기타 국제화 관련 버그를 수정합니다. <code bash> patch -Np1 -i ../coreutils-9.4-i18n-1.patch </code> <WRAP info center round 90%> **참고** \\ 이 패치에서 많은 버그가 발견되었습니다. Coreutils 유지 관리자에게 새로운 버그를 보고할 때는 먼저 이 패치 없이도 재현 가능한 버그인지 확인해 주세요. </WRAP> **split** 유틸리티의 보안 취약점을 수정합니다. <code bash> sed -e '/n_out += n_hold/,+4 s|.*bufsize.*|//&|' \ -i src/split.c </code> Coreutils 패키지를 컴파일할 준비를 합니다. <code bash> autoreconf -fiv FORCE_UNSAFE_CONFIGURE=1 ./configure \ --prefix=/usr \ --enable-no-install-program=kill,uptime </code> === configure 옵션의 의미 === * **autoreconf** \\ 국제화 패치로 빌드 시스템이 수정되었으므로 구성 파일을 다시 생성해야 합니다. * **force_unsafe_configure=1** \\ 루트 사용자가 패키지를 빌드할 수 있습니다. * **--enable-no-install-program=kill, uptime** \\ 다른 패키지에 의해 설치될 프로그램을 Coreutils가 설치하지 못하도록 합니다. 패키지를 컴파일합니다. <code bash> make </code> 테스트 스위트를 실행하지 않는 경우 "패키지 설치"로 건너뛰세요. 이제 테스트 스위트를 실행할 준비가 되었습니다. 먼저 //root// 사용자로 테스트를 실행합니다. <code bash> make NON_ROOT_USERNAME=tester check-root </code> 나머지 테스트는 //tester// 사용자로 실행하겠습니다. 특정 테스트에서는 사용자가 둘 이상의 그룹의 구성원이어야 합니다. 이러한 테스트가 건너뛰지 않도록 임시 그룹을 추가하고 사용자 //tester//를 임시 그룹의 일부로 만드세요. <code bash> groupadd -g 102 dummy -U tester </code> //root//가 아닌 사용자도 테스트를 컴파일하고 실행할 수 있도록 일부 권한을 수정합니다. <code bash> chown -R tester . </code> 테스트를 진행합니다.((아래의 구문을 익혀두면 ''sudo''가 설치되기 전까지 유용하게 사용 가능합니다.)) <code bash> su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check" </code> 임시 그룹을 삭제합니다. <code bash> groupdel dummy </code> 패키지를 설치합니다. <code bash> make install </code> FHS에 부합하는 위치로 프로그램을 이동합니다. <code bash> 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 </code> ---- ==== 8.57.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, 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**에서 사용하는 라이브러리 ---- [[https://www.linuxfromscratch.org/lfs/errata/stable-systemd/|사소한 정정]] \\ 2024년 5월 24일 기준 \\ Coreutils 테스트 스위트에서 test-getlogin 및 test/tty/tty.sh라는 이름의 두 가지 테스트가 실패하는 것으로 알려져 있지만 책에는 언급되어 있지 않습니다. 테스트 스위트를 실행할 때 표준 입력을 리디렉션하여 이러한 오류를 억제할 수 있습니다. linuxfromscratch/12.1/127-coreutils-9.4.txt 마지막으로 수정됨: 2024/06/18 01:57저자 baecy