6.22. Coreutils-8.4

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

预计编译时间: 3.2 SBU 包括测试
所需磁盘空间: 98 MB 包括测试

6.22.1. 安装 Coreutils

这个软件包中的uname 程序有一个已知的问题,就是在使用 -p 选项时,总是返回unknown。 下面的补丁对 Intel 平台的机器能修正这个问题:

case `uname -m` in
 i?86 | x86_64) patch -Np1 -i ../coreutils-8.4-uname-1.patch ;;
esac

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

patch -Np1 -i ../coreutils-8.4-i18n-1.patch
[Note]

注意

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

现在为编译 Coreutils 做准备:

./configure --prefix=/usr \
    --enable-no-install-program=kill,uptime

配置选项的含义:

--enable-no-install-program=kill,uptime

这个选项的目的是阻止 Coreutils安装二进制文件,它以后会在其他软件包中安装。

编译这个软件包:

make

如果不运行测试程序,请直接跳到 “安装软件包”。

现在准备运行测试程序。首先运行那些需要以 root 运行的测试:

make NON_ROOT_USERNAME=nobody check-root

然后,我们以nobody 用户运行剩下的测试。然而, Certain 测试需要这个用户是一个以上组的成员, 所以我们要添加一个临时组,并把nobody 用户加入这个组:

echo "dummy:x:1000:nobody" >> /etc/group

为了非root用户可以编译并运行测设程序,要修改一些权限:

chown -Rv nobody . 

现在运行测试程序:

su-tools nobody -s /bin/bash -c "make RUN_EXPENSIVE_TESTS=yes check"

删除临时组:

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

安装这个软件包:

make install

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

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,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 包中的脚本依赖于 head, sleep nice。由于 /usr 目录有 可能在系统启动过程的早期不可用,所以这些二进制程序需要放置在根分区上:

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

6.22.2. Coreutils 的内容

安装的程序: base64, basename, 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, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, 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

简要描述

base64

按照base64 (RFC 3548)规范,对数据进行编码和解码

basename

去掉文件名中的目录和后缀

cat

把文本文件的内容发送到标准输出

chcon

改变文件和目录的安全内容

chgrp

改变文件和目录属组

chmod

改变每个文件的权限到指定模式;该模式或者将权限改变成符号形式, 或者变成八进制数字形式

chown

改变文件和目录的属主和/或属主组

chroot

使用特定的目录作为执行某个命令的根( /) 目录

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

显示当前主机的数字标志符(以十六进制)

id

显示某个用户或者当前用户的真实和有效的 UID、GID 和组成员

install

复制文件,设置它们的权限,如果可能还设置拥有它们的用户和组

join

合并两个文件的行

link

创建从文件到指定名称的硬链接

ln

创建文件之间的硬/软(符号)连接

logname

显示当前用户的登录名

ls

列出指定目录的内容。

md5sum

显示或者校验 MD5 校验码

mkdir

使用给定的参数作为目录名来建立目录

mkfifo

使用给定名称建立先进,现出(FIFO),在UNIX术语中叫“命名管道”

mknod

使用给出的文件名,建立一个设备节点;设备节点是字符特殊文件(character special file),块特殊文本(block special file),或FIFO

mktemp

以一种安全方式建立临时文件;用于脚本中

mv

移动或重命名文件或目录

nice

修改某个进程的调度优先级

nl

给指定的文件加上行号

nohup

使某个命令不被挂起,并将输出重定向到一个日志文件。

nproc

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

od

以八进制或其他格式显示文件内容

paste

将字段连接在一起,在字段之间自动插入分割符,默认的分割符是 Tab 。

pathchk

检查文件名是否是有效的或者可移植

pinky

一个轻量级的 finger 客户端,用来得到某个用户的信息

pr

将文件分成适当大小的页送到打印机

printenv

显示环境变量

printf

根据给定的参数格式化输出数据,与 C 语言中的该函数相似。

ptx

为指定的文件提供一个排序索引

pwd

显示当前工作目录的名称

readlink

显示给定符号链接的值

rm

删除文件或目录

rmdir

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

runcon

运行带有特殊安全内容的命令

seq

以指定的步长输出一个数列

sha1sum

显示或校验 160 位的安全散列算法(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

把空格符转换成 tab

uniq

抛弃指定文件或者标准输入中内容重复的行

unlink

删除指定文件

users

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

vdir

ls -l

wc

统计给定文件的字节数、单词数、行数,再给出多个文件时,统计总行数

who

显示有哪些用户登录

whoami

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

yes

重复输出"y"或给定的字符,直到被杀死。