8.58. Coreutils-9.5

Coreutils 软件包包含各种操作系统都需要提供的基本工具程序。

估计构建时间: 1.1 SBU
需要硬盘空间: 173 MB

8.58.1. 安装 Coreutils

POSIX 要求 Coreutils 中的程序即使在多字节 locale 中也能正确识别字符边界。下面应用一个补丁,以解决 Coreutils 不满足该要求的问题,并修复其他一些国际化相关的 bug:

patch -Np1 -i ../coreutils-9.5-i18n-2.patch
[注意]

注意

在之前,这个补丁中找出了许多 bug。在向 Coreutils 维护者报告新 bug 前,请检查这些 bug 在不使用该补丁的情况下是否还会重现。

现在准备编译 Coreutils:

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

配置选项的含义:

autoreconf

国际化补丁修改了构建系统,因此需要重新生成配置文件:

FORCE_UNSAFE_CONFIGURE=1

该环境变量允许以 root 用户身份构建该软件包。

--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 . 

现在运行测试 (使用 /dev/null 作为标准输入,否则在图形终端,SSH 会话,或者 GNU Screen 构建 LFS 时,由于标准输入连接到了宿主发行版的 PTY,而该 PTY 的设备节点无法在 LFS chroot 环境中访问,两项测试无法正常工作):

su tester -c "PATH=$PATH make -k RUN_EXPENSIVE_TESTS=yes check" \
   < /dev/null

删除临时组:

groupdel dummy

已知 tests/cp/preserve-mode.shtests/mv/acl.sh 这两项测试在 chroot 环境中会失败,但在构建完成的系统中能正常通过。

安装该软件包:

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

8.58.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
安装的库: libstdbuf.so (在 /usr/libexec/coreutils 中)
安装的目录: /usr/libexec/coreutils

简要描述

[

这是一个真实存在的命令,/usr/bin/[;它和 test 命令的功能相同

base32

根据 base32 标准 (RFC 4648) 编码和解码数据

base64

根据 base64 标准 (RFC 4648) 编码和解码数据

b2sum

打印或检查 BLAKE2 (512 位) 校验和

basename

从文件名移除所有路径和一个给定后缀

basenc

使用一些算法编码或解码数据

cat

将文件合并到标准输出

chcon

修改文件和目录的 SELinux 安全上下文

chgrp

修改文件和目录所属的组

chmod

修改给定文件的访问权限为指定模式;模式可以是所需修改的符号表示,或新权限的八进制码

chown

修改拥有文件的用户或组

chroot

将给定目录作为 / 目录,运行命令

cksum

输出每个给定文件的循环冗余检查 (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

打印文件的前 10 (或给定行数) 行

hostid

以十六进制格式打印主机数字标识符

id

报告当前用户或给定用户的有效用户 ID、组 ID 和所属的组

install

复制文件并设定它们的访问权限,以及 (如果可能) 它们的所有者和属组

join

将两个文件中拥有相同域的行合并

link

(以给定文件名) 创建硬链接

ln

在文件之间创建硬链接或软 (符号) 链接

logname

报告当前用户登录名

ls

列出给定目录内容

md5sum

报告或检查消息摘要 5 (MD5) 校验和

mkdir

以给定名称创建目录

mkfifo

以给定名称创建先进先出 (FIFO),在 UNIX 惯用语中又称为 “命名管道”

mknod

以给定名称创建设备节点;设备节点可能是字符特殊文件、块特殊文件或 FIFO

mktemp

安全地创建临时文件,常用在脚本中

mv

移动或重命名文件或目录

nice

以修改的调度优先级运行程序

nl

标出给定文件的行

nohup

执行命令并使其忽略挂机信号,同时将输出重定向到日志文件

nproc

打印进程可用的处理单元数目

numfmt

在数字和人类可读字符串之间互相转换

od

以八进制或其他格式转储文件

paste

合并给定文件,将它们的对应行连接起来,以制表符分割

pathchk

检查文件名的有效性和可移植性

pinky

是轻量级 finger 客户端,报告给定用户的一些信息

pr

对文件进行分页和分栏以便打印

printenv

打印环境变量

printf

以给定格式打印给定参数,很像 C printf 函数

ptx

用文中的每个关键字,根据给定文件内容生成重排索引

pwd

报告当前工作目录名

readlink

报告给定符号链接的值

realpath

打印解析过的目录

rm

删除文件或目录

rmdir

如果目录是空的,删除它们

runcon

以给定 SELinux 安全上下文运行命令

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

修改文件时间戳,将每个给定文件的访问和修改时间设为当前时间; 以零长度创建当前不存在的文件

tr

从标准输入变换、压缩或删除给定字符

true

什么也不做;总是以成功状态码退出

truncate

将文件截断或扩展到指定大小

tsort

进行拓扑排序;根据给定文件的部分顺序信息输出完整的排序列表

tty

报告标准输入的终端文件名

uname

报告系统信息

unexpand

将空格转换成制表符

uniq

在连续的相同行中只保留一行,删除其他所有行

unlink

删除给定文件

users

报告当前登录系统的用户名

vdir

ls -l 相同

wc

报告给定文件的行数、单词数和字节数,如果给定了多个文件,还会输出这些统计值的总和

who

报告当前登录的用户

whoami

报告与当前有效用户 ID 相关的用户名

yes

不停输出 y,或给定的字符串,直到被杀死

libstdbuf

stdbuf 使用的库