6.14. Coreutils-5.96

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

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

6.14.1. 安装 Coreutils

通常 uname 程序总是有点毛病的,比如 -punknown 的结果。下面的补丁对 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
[Note]

注意

过去,在这个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

显示在当前主机登录的用户名

vdir

ls -l

wc

统计文件中包含的字节数、单词数、行数

who

显示有哪些用户登录

whoami

打印当前用户的有效用户标志符

yes

重复输出"y"字符,直到被杀死。