%general-entities; ]> coreutils &coreutils-version;
&coreutils-url;
Coreutils-&coreutils-version; Coreutils <para>Coreutils 软件包包含用于显示和设定系统基本属性的工具。</para> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> <seg>&coreutils-ch6-sbu;</seg> <seg>&coreutils-ch6-du;</seg> </seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> <title>安装 Coreutils POSIX 要求 Coreutils 中的程序即使在多字节 locale 中也能正确识别字符边界。下面应用一个补丁, 以解决 Coreutils 不满足这项 POSIX 要求的问题, 并修复其他一些国际化相关的 bug: patch -Np1 -i ../&coreutils-i18n-patch; 在之前,这个补丁中找出了许多 bug。在向 Coreutils 维护者报告新 bug 前,请检查它们在不使用该补丁的情况下是否还会重现。 阻止一个在某些机器上会无限循环的测试: sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk 现在准备编译 Coreutils: autoreconf -fiv FORCE_UNSAFE_CONFIGURE=1 ./configure \ --prefix=/usr \ --enable-no-install-program=kill,uptime 配置选项的含义: autoreconf 该命令重新生成配置文件,使之与 automake 的最新版本一致。 FORCE_UNSAFE_CONFIGURE=1 该环境变量允许以 root 用户身份构建该软件包。 --enable-no-install-program=kill,uptime 这个开关的目的是防止 Coreutils 安装那些被其他软件包安装的二进制程序。 编译该软件包: FORCE_UNSAFE_CONFIGURE=1 make 如果不运行测试套件, 直接跳到 安装该软件包 现在测试套件已经可以运行了。首先运行那些设计为由 root 用户运行的测试: make NON_ROOT_USERNAME=nobody check-root 之后我们要以 nobody 用户身份运行其余测试。然而,某些测试要求测试用户属于至少一个组。 为了不跳过这些测试,我们添加一个临时组,并使得 nobody 用户成为它的成员: echo "dummy:x:1000:nobody" >> /etc/group 修正访问权限,使得非 root 用户可以编译和运行测试: chown -Rv nobody . 执行以下命令,确保 su 环境的 PATH 变量包含 /tools/bin 并运行测试: su nobody -s /bin/bash \ -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check" 已知测试程序 test-getlogin 在部分构建的系统环境(如这里的 chroot 环境)会失败,但是在本章的最后再运行即可通过。 另外已知测试程序 tty.sh 可能会失败。 删除临时组: 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 mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8 sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8 LFS-Bootscripts 软件包中的某些启动脚本依赖于 headsleepnice。由于 /usr 在引导早期阶段可能不可用, 需要把它们移动到根分区: BLFS 和 BLFS 之外的一些软件包预期下列程序位于 /bin 中, 因此必须保证它们被放置在那里: mv -v /usr/bin/{head,sleep,nice} /bin Coreutils 的内容 安装的程序 安装的库 安装的目录 [, base32, 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, 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 简要描述 base32 根据 base32 标准(RFC 4648)编码和解码数据 base64 base64 根据 base64 标准(RFC 4648)编码和解码数据 base64 basename 从文件名移除所有路径和一个给定后缀 basename cat 将文件合并到标准输出 cat chcon 修改文件和目录的 SELinux 安全上下文 chcon chgrp 修改文件和目录所属的组 chgrp chmod 修改给定文件的访问权限为指定模式; 模式可以是所需修改的符号表示,或新权限的八进制码 chmod chown 修改拥有文件的用户或组 chown chroot 将给定目录作为 / 目录,运行命令 chroot cksum 输出每个给定文件的循环冗余检查(CRC) 校验和及字节数 cksum comm 比较两个排好序的文件, 将两个文件特有的部分和它们共有的部分显示为三列 comm cp 复制文件 cp csplit 将给定文件分割为若干新文件,根据给定模式或行号进行分割, 并输出每个新文件的字节数 csplit cut 根据给定的域或位置,打印输入的分节和选定部分 cut date 以给定格式显示当前时间,或设定系统时间 date dd 以给定块大小和个数复制文件,同时可以进行转换 dd df 报告每个已挂载文件系统(或包含给定文件的文件系统) 的总大小和可用空间 df dir 列出给定目录的内容 (和 ls 命令相同) dir dircolors 输出用于设定 LS_COLOR 环境变量的命令,以修改 ls 的配色方案 dircolors dirname 从文件名中删掉非目录的后缀 dirname du 报告当前目录使用的磁盘空间, 给出当前目录下所有子目录和文件占用的空间 du echo 显示给定字符串 echo env 在修改的环境中运行命令 env expand 将制表符转换成空格 expand expr 计算表达式 expr factor 打印所有给定整数的质因数 factor false 什么也不做;总是以失败状态码退出; false fmt 重新格式化给定文件的段落 fmt fold 折叠给定文件中的行 fold groups 报告用户所属的组 groups head 打印文件的前 10 (或给定行数)行 head hostid 以十六进制格式打印主机数字标识符 hostid id 报告当前用户或给定用户的有效用户 ID、组 ID 和所属的组 id install 复制文件并设定它们的访问权限,以及(如果可能) 它们的所有者和属组 install join 将两个文件中拥有相同域的行合并 join link 以给定文件名创建硬链接 link ln 在文件之间创建硬链接或软(符号)链接 ln logname 报告当前用户登录名 logname ls 列出给定目录内容 ls md5sum 报告或检查消息摘要 5 (MD5)校验和 md5sum mkdir 以给定名称创建目录 mkdir mkfifo 以给定名称创建先进先出表(FIFO), 在 UNIX 惯用语中又称为 命名管道 mkfifo mknod 以给定名称创建设备节点;设备节点可能是字符特殊文件、 块特殊文件或 FIFO mknod mktemp 安全地创建临时文件,常用在脚本中 mktemp mv 移动或重命名文件或目录 mv nice 以修改的调度优先级运行程序 nice nl 标出给定文件的行 nl nohup 以免疫挂机信号的方式执行命令,同时将输出重定向到日志文件 nohup nproc 打印进程可用的处理单元数目 nproc numfmt 在数字和人类可读字符串之间互相转换 numfmt od 以八进制或其他格式转储文件 od paste 合并给定文件,将它们的对应行连接起来,以制表符分割 paste pathchk 检查文件名的有效性和可移植性 pathchk pinky 是轻量级 finger 客户端,报告给定用户的一些信息 pinky pr 对文件进行分页和分栏以便打印 pr printenv 打印环境变量 printenv printf 以给定格式打印给定参数,很像 C printf 函数 printf ptx 用文中的每个关键字,根据给定文件内容生成重排索引 ptx pwd 报告当前工作目录名 pwd readlink 报告给定符号链接的值 readlink realpath 打印解析过的目录 realpath rm 删除文件或目录 rm rmdir 如果目录是空的,删除它们 rmdir runcon 以给定 SELinux 安全上下文运行命令 runcon seq 以给定的范围和增量打印等差数列 seq sha1sum 打印或检查 160 位安全散列算法 1 (SHA1)校验和 sha1sum sha224sum 打印或检查 224 位安全散列算法校验和 sha224sum sha256sum 打印或检查 256 位安全散列算法校验和 sha256sum sha384sum 打印或检查 384 位安全散列算法校验和 sha384sum sha512sum 打印或检查 512 位安全散列算法校验和 sha512sum shred 将给定文件多次用复杂模式覆盖,增加恢复数据的难度 shred shuf 打乱文件中的行 shuf sleep 等待给定时间 sleep sort 对给定文件的行进行排序 sort split 根据大小或行数,将指定文件分割成若干部分 split stat 显示文件或文件系统状态 stat stdbuf 以修改的标准流缓冲操作运行命令 stdbuf stty 设置或报告终端行设定 stty sum 打印每个指定文件的校验和及块个数 sum sync 刷新文件系统缓冲;它将修改过的块强制写入磁盘, 并更新超级块 sync tac 逆序连接给定文件 tac tail 输出给定文件的最后 10 (或指定行数)行 tail tee 读取标准输入,并将内容同时写入标准输出和给定文件 tee test 比较两个值,或检查文件类型 test timeout 在限定时间内运行命令 timeout touch 修改文件时间戳,将每个给定文件的访问和修改时间设为当前时间; 以零长度创建当前不存在的文件 touch tr 从标准输入变换、压缩或删除给定字符 tr true 什么也不做;总是以成功状态码退出 true truncate 将文件截断或扩展到指定大小 truncate tsort 进行拓扑排序; 根据给定文件的部分顺序信息输出完整的排序列表 tsort tty 报告标准输入的终端文件名 tty uname 报告系统信息 uname unexpand 将空格转换成制表符 unexpand uniq 在连续的相同行中只保留一行,删除其他所有行 uniq unlink 删除给定文件 unlink users 报告当前登录系统的用户名 users vdir ls -l 相同 vdir wc 报告给定文件的行数、单词数和字节数 wc who 报告当前登录的用户 who whoami 报告与当前有效用户 ID 相关的用户名 whoami yes 不停输出 y 或给定字符串,直到被杀死 yes libstdbuf stdbuf 使用的库 libstdbuf