6.15. Coreutils-5.2.1

Coreutils 软件包包括一整套基本的 shell 工具。

预计编译时间: 0.9 SBU
所需磁盘空间: 52.8 MB
安装依赖于: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed

6.15.1. 安装 Coreutils

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

patch -Np1 -i ../coreutils-5.2.1-uname-2.patch

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

patch -Np1 -i \
    ../coreutils-5.2.1-suppress_uptime_kill_su-1.patch

为编译 Coreutils 做准备:

DEFAULT_POSIX2_VERSION=199209 ./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:::/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

把一些程序移动到合适的位置:

mv /usr/bin/{[,basename,cat,chgrp,chmod,chown,cp,dd,df} /bin
mv /usr/bin/{date,echo,false,head,hostname,install,ln} /bin
mv /usr/bin/{ls,mkdir,mknod,mv,pwd,rm,rmdir,sync} /bin
mv /usr/bin/{sleep,stty,test,touch,true,uname} /bin
mv /usr/bin/chroot /usr/sbin

最后,创建一些必要的符号链接以符合FHS标准:

ln -s ../../bin/install /usr/bin

6.15.2. Contents of 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_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)。特殊文件是UNIX系统的一个术语,意思是能够产生或者接受数据的东西,也就是通常所说的设备文件。

mv

根据所给参数的不同,把文件或者目录移动到另外的目录或者将其改名。

nice

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

nl

把每个指定文件的内容写到标准输出,在每行加上行号。

nohup

使某个命令不被挂起。

od

以数字方式显示指定文件的内容,默认是八进制。

paste

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

pathchk

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

pinky

一个轻量级的finger工具,用来得到某个用户的信息。

pr

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

printenv

显示所有的环境变量。

printf

格式化输出数据。

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'字符串,直到被杀死。