《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.29. Coreutils-8.23

简介:

             Coreutils 软件包包含用于显示和设置基本系统特性的工具。

大概编译时间: 2.5 SBU
需要磁盘空间: 193 MB

6.29.1. 安装 Coreutils

POSIX 要求 Coreutils 中的程序即使在多字节语言环境也能正确识别字符边界。下面的补丁修复这个不兼容性以及其它一些和国际化相关的 错误。之后确保 Makefile.in 文件的时间戳比其它所有文件都晚以免出现 make 错误:

patch -Np1 -i ../coreutils-8.23-i18n-1.patch 
touch Makefile.in
[Note]

注意

之前在这个补丁中发现了很多错误。当向 Coreutils 维护者报告新错误的时候,请先检查没有该补丁是否可以重现该错误。

现在准备编译 Coreutils:

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

配置选项的含义:

FORCE_UNSAFE_CONFIGURE=1

该环境变量允许以 root 用户权限编译软件包。

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

该选项的目的是防止 Coreutils 安装其它软件包后面会安装的二进制包。

编译软件包:

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"

已知在虚拟主控台中 stty-pairs 测试会失败,而在 X 终端中则能通过。

移除临时组:

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

BLFS 以及上游中的一些软件包希望如下的程序放在 /bin 中,确保把它们放到了那里:

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

6.29.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, 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

简要介绍

base64

根据 base64(RFC3548)规范编码和解码数据

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

输出指定文件的前十行(或指定数目行数)

hostid

报告主机的数字标识符(以十六进制)

id

报告当前用户或指定用户的有效 用户 ID、组 ID 以及组成员

install

复制文件的同时设置权限模式,如果可以的话包括用户和组

join

从两个单独的文件中连接有相同域的行

link

用指定的名称创建到一个文件的硬链接

ln

在文件之间建立硬链接或软(符号)链接

logname

报告当前用户的登录名

ls

列出给定目录的内容

md5sum

报告或检查消息摘要 5(MD5) 校验码

mkdir

用指定的名称新建目录

mkfifo

用指定的名称在 UNIX 中创建先进先出(FIFOs) 的 “命名管道”

mknod

用指定的名称创建设备结点;设备结点是一个特殊字符文件、特殊块文件或先进先出

mktemp

以安全方式新建临时文件;在脚本中使用

mv

移动或重命名文件或目录

nice

以更改后的调度优先级运行程序

nl

标记指定文件的行号

nohup

以不能被挂起方式运行命令,输出重定向到一个日志文件

nproc

输出进程可用的处理单元数目

numfmt

转换数字为人可读字符串或者相反

od

以十进制或其他格式转储文件

paste

合并指定文件,用 tab 字符分隔,以行并列方式连续合并

pathchk

检查文件名是否可用

pinky

轻量级的 finger 客户端;报告指定用户的信息

pr

对文件进行分页分行用于打印

printenv

输出环境

printf

根据指定格式打印指定参数,类似于 C 语言的 printf 函数

ptx

用文中的每个关键字,根据文件的内容中建立重排索引

pwd

报告当前工作目录的名称

readlink

报告指定符号链接的值

realpath

打印解释后路径

rm

删除文件或目录

rmdir

如果目录为空则删除

runcon

以指定安全上下文运行命令

seq

用指定的范围和增长步长输出一序列数字

sha1sum

打印或检查 160-bit 安全哈希算法1(SHA1) 校验码

sha224sum

打印或检查 224-bit 安全哈希算法校验码

sha256sum

打印或检查 256-bit 安全哈希算法校验码

sha384sum

打印或检查 384-bit 安全哈希算法校验码

sha512sum

打印或检查 512-bit 安全哈希算法校验码

shred

用复杂形式多次重写指定文件,使得难以恢复其中的数据

shuf

打乱文本行

sleep

暂停指定时间

sort

排序给定文件的行

split

根据大小或行数分割文件为多个块

stat

显示文件或文件系统状态

stdbuf

用改变后的缓冲操作在标准流上运行命令

stty

设置或报告终端行设置

sum

打印指定文件的校验码和块数目

sync

清空文件系统缓存;强制更改块到磁盘并更新超级块

tac

反向输出给定文件

tail

输出每个给定文件的最后十行(或给定数目的行)

tee

从标准输入读入并写出到标准输出和指定文件

test

比较值并检查文件类型

timeout

有限时间内运行命令

touch

更改文件时间戳,设置指定文件的访问和修改时间为当前时间; 如果文件不存在则创建空文件

tr

从标准输入转换、压缩并删除指定字符

true

不做任何事情,总是成功;总是以表示成功的状态码退出

truncate

压缩或扩展文件到特定大小

tsort

进行拓扑排序;根据指定文件的部分排序写出完全有序列表

tty

报告链接到标准输入的终端文件名称

uname

报告系统信息

unexpand

转换空格为 tab 键

uniq

忽略所有除非出现连续相同的行

unlink

移除指定文件

users

报告当前登录的用户名

vdir

ls -l 相同

wc

报告给定文件的行数、单词数和字节数,以及给定多个文件时总的行数

who

报告谁登录了

whoami

报告和当前有效用户 ID 关联的用户名

yes

重复输出 “y” 或指定的字符串直到被杀死

libstdbuf

stdbuf 使用的库

目录
打赏
0
0
0
0
16429
分享
相关文章
|
14天前
|
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
89 27
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
92 21
YashanDB Linux客户端安装
本文详细介绍了YashanDB客户端在Linux系统中的安装、使用与卸载步骤。安装方法包括适用于所有Linux平台的脚本安装和专用于CentOS的rpm安装。脚本安装需解压软件包并配置环境变量,而rpm安装则需以root用户执行相关命令。此外,文章还说明了如何通过yasql连接YashanDB并进行数据库操作,以及两种安装方式对应的卸载方法,帮助用户顺利完成客户端的管理与维护。
Linux 手动安装快速部署 LNMP 环境实战
本文详细记录了在阿里云ECS上手动搭建LNMP环境的过程,系统选用Ubuntu 24.04。主要内容包括:1) 使用`apt`安装Nginx和MySQL,并更新软件源;2) 编译安装PHP 8.4.5,配置PHP-FPM及环境路径;3) 配置MySQL root用户密码;4) 调整Nginx支持PHP解析并测试整体环境。通过此过程,重现手动配置服务器的细节,帮助熟悉各组件的安装与协同工作。
|
18天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
80 10
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
19天前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
50 0
|
11天前
|
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
100 56
|
14天前
|
Linux基础:文件和目录类命令分析。
总的来说,这些基础命令,像是Linux中藏匿的小矮人,每一次我们使用他们,他们就把我们的指令准确的传递给Linux,让我们的指令变为现实。所以,现在就开始你的Linux之旅,挥动你的命令之剑,探索这个充满神秘而又奇妙的世界吧!
59 19
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等