GNU 核心实用程序简介
GNU 核心实用程序(coreutils)是 Linux 系统中不可或缺的一部分,为系统管理员和用户提供了一系列基本且常用的工具。这些工具涵盖了文本文件处理、目录管理、数据流操作、存储介质管理、进程控制以及文件系统操作等多个方面。
一、GNU 核心实用程序的起源与发展
GNU 核心实用程序的起源可以追溯到 Unix 的早期。Unix 最初是为了让 Ken Thompson、Dennis Ritchie 等人在 Multics 项目上继续工作而开发的,但受限于当时的条件,Unix 的功能相对有限。随着时间的推移,Unix 取得了巨大的成功,并在大学和公司之间广泛传播。然而,随着 AT&T 决定在 Unix 上盈利,并开始使用限制更多的许可证,一些开发者开始不满,并致力于开发一个开放的、自由的操作系统,即 GNU 操作系统。
GNU 实用程序就是在这样的背景下诞生的。虽然 GNU 实用程序的开发者们努力编写了一个完整的操作系统,但一直没有产生一个可行的内核。直到 Linus Torvalds 开始编写和编译 Linux 内核,并使用了 GNU 核心实用程序,才使得 Linux 系统得以完整。
二、GNU 核心实用程序的功能
GNU 核心实用程序包含了大量的工具,这些工具按照功能进行了分组,以方便用户查找和使用。以下是一些主要的功能分组及其包含的实用程序:
- 输出整个文件:cat、tac、nl、od、base32、base64 等,用于查看和转换文件内容。
- 格式化文件内容:fmt、pr、fold 等,用于调整文件的格式和布局。
- 输出文件的部分内容:head、tail、split、csplit 等,用于查看文件的开头、结尾或分割文件。
- 总结文件:wc、sum、cksum、b2sum、md5sum、sha1sum、sha2 等,用于计算文件的统计信息或校验和。
- 对排序后的文件进行操作:sort、shuf、uniq、comm、ptx、tsort 等,用于对文件进行排序和比较。
- 对字段进行操作:cut、paste、join 等,用于提取、合并或连接文件中的字段。
- 对字符进行操作:tr、expand、unexpand 等,用于转换或扩展字符。
- 目录列表:ls、dir、vdir、dircolors 等,用于列出目录内容。
- 基本操作:cp、dd、install、mv、rm、shred 等,用于复制、删除、移动或覆盖文件。
- 特殊文件类型:mkdir、rmdir、unlink、mkfifo、mknod、ln、link、readlink 等,用于创建、删除或链接文件。
- 更改文件属性:chgrp、chmod、chown、touch 等,用于更改文件的权限、所有者或时间戳。
- 磁盘使用情况:df、du、stat、sync、truncate 等,用于查看磁盘使用情况或同步文件。
- 打印文本:echo、printf、yes 等,用于在终端打印文本。
- 条件判断:false、true、test、expr 等,用于进行条件判断或表达式计算。
- 重定向:tee 等,用于将输入重定向到多个输出。
- 文件名操作:dirname、basename、pathchk、mktemp、realpath 等,用于处理文件名。
- 工作上下文:pwd、stty、printenv、tty 等,用于查看或设置当前工作目录、终端设置或环境变量。
- 用户信息:id、logname、whoami、groups、users、who 等,用于查看用户信息。
- 系统上下文:date、arch、nproc、uname、hostname、hostid、uptime 等,用于查看系统信息。
- SELinux 上下文:chcon、runcon 等,用于设置或运行 SELinux 策略。
- 修改命令调用:chroot、env、nice、nohup、stdbuf、timeout 等,用于修改命令的执行环境或行为。
- 进程控制:kill 等,用于终止进程。
- 延迟:sleep 等,用于暂停执行。
- 数值操作:factor、numfmt、seq 等,用于进行数值计算或格式化。
三、GNU 核心实用程序与 util-linux 的关系
虽然 GNU 核心实用程序提供了大量的工具,但仍有一些基本的实用程序不在其中,如 mount 和 umount 命令。这些命令以及其他许多不在 GNU 核心实用程序中的命令可以在 util-linux 中找到。util-linux 实用程序包包含了许多系统管理员常用的其它命令,这些命令由 Linux 内核组织发布,并涵盖了文件管理、磁盘管理、系统信息等多个方面。
四、总结
GNU 核心实用程序和 util-linux 共同提供了管理 Linux 系统所需的基本实用程序。这些工具涵盖了文本文件处理、目录管理、数据流操作、存储介质管理、进程控制以及文件系统操作等多个方面,是 Linux 系统中不可或缺的一部分。通过学习和掌握这些工具,系统管理员和用户可以更加高效地完成各种任务。