1.10.14 6.14. Coreutils-5.96

优质
小牛编辑
126浏览
2023-12-01

Coreutils 软件包包括一套显示、设置基本系统属性的工具。

预计编译时间: 1.1 SBU所需磁盘空间: 58.3 MB

6.14.1. 安装 Coreutils

通常 uname 程序总是有点毛病的,比如 _-p_unknown 的结果。下面的补丁对 Intel 平台的机器能修正这个问题:

patch -Np1 -i ../coreutils-5.96-uname-1.patch

阻止 Coreutils 安装后面将由别的包安装的程序:

patch -Np1 -i ../coreutils-5.96-suppress_uptime_kill_su-1.patch

POSIX 要求 Coreutils 的程序即使在多字节环境下也能够识别出字符的边界。下面的这个patch能够解决这个问题以及其他的一些国际化相关的问题:

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

为了测试应用的patch能够运行,修改文件的权限:

chmod +x tests/sort/sort-mb-tests

注意

过去,在这个patch里面发现了很多bug。当你向 Coreutils 的维护者发送错误报告的时候,首先确认不应用这个patch错误会不会出现。

现在已经发现在使用who -Hu时,转换的信息有时会导致缓冲区溢出。增大缓冲区大小:

sed -i 's/_LEN 6/_LEN 20/' src/who.c

为编译 Coreutils 做准备:

./configure --prefix=/usr

编译软件包:

make

Coreutils 软件包的测试套件对系统进行了某些假设,比如要求有非 root 用户和组,但是我们目前的系统中尚不存在。如果你不想运行测试套件,就直接跳过下面将要进行的测试,直接从"安装软件包"那里继续。

下面的命令为我们做测试前的准备,创建两个 dummy(伪) 组和一个 dummy(伪) 用户:

echo "dummy1:x:1000:" >> /etc/group
echo "dummy2:x:1001:dummy" >> /etc/group
echo "dummy:x:1000:1000::/root:/bin/bash" >> /etc/passwd

现在已经准备好可以运行测试套件了,首先运行那些需要以 root 运行的测试:

make NON_ROOT_USERNAME=dummy check-root

然后以 dummy 用户运行剩余的测试:

src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"

测试结束后,删除 dummy 组和用户:

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

安装软件包:

make install

把一些程序移动到合适的位置以符合 FHS 标准:

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,hostname,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

一些 LFS-Bootscripts 包中的脚本依赖于 headsleep,和 nice 。由于 /usr 目录有可能在系统启动过程的早期不可用(比如尚未挂载),所以这些二进制程序需要放置在根分区上:

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

6.14.2. Coreutils 的内容

安装的程序: basename, cat, 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, hostname, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat, stty, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, yes

简要描述

basename去掉文件名中的目录和后缀
cat把文本文件的内容发送到标准输出
chgrp改变文件和目录属组,属组可以使用组名或者组识别号表示
chmod改变文件和目录的权限,权限可以使用符号或者八进制两种表达方式
chown改变文件和目录的所有权(包括用户和/或组)
chroot使用特定的目录作为执行某个命令或者交互 shell 的根目录(/)。在多数系统中,只有 root 用户能运行这个命令
cksum输出指定的每个文件的CRC(循环冗余校验)校验和与字节数
comm一行一行对两个已经排序的文件进行比较,在第三列中显示同一行是否相同
cp复制文件
csplit把一个文件按照给定的模式或者行号分成几块
cut从指定的文件中提取特定的列送到标准输出
date以特定的格式显示当前时间,或者设置系统日期
dd以可选块长度复制文件,默认情况下从标准输入设备输出到标准输出设备。复制过程中,还可以对文件进行一些转换
df显示参数中的文件所在分区磁盘空间的使用情况,如果没有给出文件参数就显示所有已经安装的文件系统的可用空间数量。
dir列出给定目录的内容 (同 ls 命令)
dircolors设置 LS_COLOR 环境变量(用来改变 ls 及相关工具默认颜色组合)
dirname显示从文件名去掉非目录后缀之后的内容
du显示参数使用的磁盘空间的数量,对于参数为目录还会列出每个子目录磁盘空间占用情况。
echo显示给定字符串或变量值
env在一个被修改的环境中运行一个程序
expand把 tab 转换为空格符
expr执行表达式计算
factor输出所有指定整数的质因数
false返回一个不成功或者逻辑假的结果
fmt重新格式化指定文件的段落
fold断开指定文件(默认是标准输入)较长的行,在屏幕上显示
groups显示一个用户所在的组
head显示每个指定文件的前几行(默认是10)
hostid以16进制方式,显示当前主机的数字标志符
hostname显示或设置主机名
id显示某个用户或者当前用户的真实和有效的 UID、GID 。
install复制文件,设置它们的权限,如果可能还设置拥有它们的用户和组
join合并两个文件的行
link创建从指定文件到指定名称的硬链接
ln创建文件之间的硬/软(符号)连接
logname显示当前用户的登录名
ls列出指定目录的所有内容。缺省是将文件和子目录按字母顺序排列。
md5sum显示或者校验 MD5 校验码。
mkdir建立目录,使用给定的参数作为目录名。
mkfifo以给定的参数作为名字建立FIFO(又叫"命名管道")文件。
mknod使用给出的文件名,建立一个设备节点,也就是:FIFO、字符特殊文件(special file)或者块特殊文件(special file)。
mv根据所给参数的不同,把文件或者目录移动到另外的目录或者将其改名
nice修改某个进程的调度优先级
nl把每个指定文件的内容写到标准输出,在每行加上行号
nohup使某个命令不被挂起,并将输出重定向到一个日志文件。
od以数字方式显示指定文件的内容,默认为八进制。
paste将字段连接在一起,在字段之间自动插入分割符,默认的分割符是 Tab 。
pathchk检查文件名是否是有效的或者是可移植的
pinky一个轻量级的 finger 客户端,用来得到某个用户的信息。
pr将文件分成适当大小的页送到打印机
printenv显示环境变量
printf根据给定的参数格式化输出数据,与 C 语言中的该函数相似。
ptx为指定的文件提供一个排序索引
pwd显示当前工作目录
readlink显示指定符号链接的值
rm删除文件或者目录
rmdir删除目录(目录必需为空)
seq以指定的步长输出一个数列
sha1sum显示或校验 160 位的 SHA1 校验码
shred安全删除一个文件,重写其占用的磁盘空间,使其无法恢复。
sleep延迟一段时间
sort对文件进行排序
split把文件分成固定大小(字节或行数)的片断
stat显示文件或者文件系统的状态
stty改变和显示终端行的设置
sum显示指定文件的校验和及块数
sync刷新文件系统缓冲区,使磁盘和内存的数据同步。
tac逆向显示指定的文件,最后一行在最前。
tail显示每个指定文件的最后几行(默认是10)。
tee从标准输入读取数据,输出到标准输出和指定的文件。
test检查文件类型,以及进行变量的比较。
touch把参数指定的文件的访问和修改时间改为当前的时间。如果文件不存在,它就建立一个空文件。
tr从标准输入读入正文,对字符进行转换、压缩或者删除,然后写到标准输出
true返回一个成功或者逻辑真的结果
tsort对给定的文件进行拓扑排序
tty显示标准输出设备连接终端的文件名
uname打印系统信息
unexpand把空格符转换成 tab
uniq抛弃指定文件或者标准输入中内容重复的行
unlink删除指定文件
users显示在当前主机登录的用户名
vdirls -l
wc统计文件中包含的字节数、单词数、行数
who显示有哪些用户登录
whoami打印当前用户的有效用户标志符
yes重复输出"y"字符,直到被杀死。