Linux 命令工具箱:util-linux 与 GNU Coreutils

1. 引言:Linux 命令世界的两大基石

当你打开终端,输入 ls 查看文件、用 cd 切换目录、用 mount 挂载磁盘时,是否想过这些命令从何而来?在 Linux 生态中,这些基础命令主要来自两个核心工具集:GNU Coreutilsutil-linux

这两个工具集的分工简单而清晰:

工具集 维护者 核心定位 典型命令
GNU Coreutils GNU 项目 文件操作、文本处理、Shell 交互 ls, cp, cat, grep
util-linux Linux 内核组织 系统底层管理(磁盘、挂载、终端、日志) mount, fdisk, dmesg, hwclock

你可以这样理解:GNU Coreutils 是 Linux 的"双手",负责日常的文件和文本操作;util-linux 是 Linux 的"五脏六腑",负责管理系统底层资源

有趣的历史是:Linus Torvalds 在 1991 年写出 Linux 内核后,内核本身无法做任何有用的事------没有 Shell、没有 ls、没有文件复制命令。他使用了自由软件基金会(FSF)开发的 GNU 工具集来填补这个空白,这也是为什么许多人主张 Linux 系统应称为 GNU/Linux

2. GNU Coreutils:日常操作的瑞士军刀

2.1 工具集概况

GNU Coreutils 是一个大杂烩,由三个历史工具集合并而来:fileutils (文件操作)、shellutils (Shell 相关)和 textutils (文本处理)。如今它包含 102 个核心命令

2.2 功能分类全览

根据 GNU 官方手册的分类,Coreutils 命令按功能分为以下组别:

2.2.1 文件输出与查看
命令 功能 典型用法
cat 连接并输出文件内容 cat file.txt
tac 反向输出文件(行序反转) tac file.txt
nl 给文件加行号 nl script.sh
od 八进制/十六进制转储 od -x binary.bin
base32/base64 Base32/64 编解码 base64 file.zip
2.2.2 文件格式化
命令 功能
fmt 重新格式化段落
pr 将文本分页/分列打印
fold 折行(按宽度截断)
2.2.3 文件部分提取
命令 功能 示例
head 取文件开头 head -n 20 log.txt
tail 取文件末尾(支持 -f 实时跟踪) tail -f /var/log/syslog
split 分割文件 split -l 1000 big.csv part_
csplit 按上下文分割 csplit file /regex/
2.2.4 文件统计与校验
命令 功能
wc 统计行、词、字节数
sum/cksum 传统/现代校验和
md5sum/sha1sum/sha256sum 哈希校验
b2sum BLAKE2 哈希
2.2.5 排序与去重
命令 功能
sort 排序(支持 -n 数字、-r 反向、-k 按字段)
shuf 随机打乱行序
uniq 去重(需预先排序)
comm 逐行比较两个已排序文件
tsort 拓扑排序
2.2.6 字段操作与字符转换
命令 功能
cut 提取字段(按列或分隔符)
paste 横向合并文件列
join 按公共字段连接两个文件
tr 字符替换/删除
expand/unexpand Tab 与空格互转
2.2.7 目录列表
命令 功能
ls 列出目录内容
dir ls -C 的同义词(列式输出)
vdir ls -l 的同义词(长格式)
dircolors 配置 ls 的颜色方案
2.2.8 基础文件操作
命令 功能
cp 复制文件
dd 底层复制(指定块大小,常用于刻录)
install 复制并设置属性(用于 Makefile)
mv 移动/重命名
rm 删除
shred 安全删除(多次覆写)
2.2.9 特殊文件操作
命令 功能
ln 创建硬/软链接
mkdir/rmdir 创建/删除目录
mkfifo 创建命名管道
mknod 创建设备文件
readlink 显示符号链接目标
unlink 调用 unlink() 删除文件
2.2.10 文件属性修改
命令 功能
chown 修改属主/属组
chgrp 修改属组
chmod 修改权限
touch 修改时间戳或创建空文件
2.2.11 磁盘与空间
命令 功能
df 查看文件系统磁盘使用
du 查看目录/文件占用
stat 显示详细文件状态
sync 刷新缓存到磁盘
truncate 截断/扩展文件
2.2.12 文本输出
命令 功能
echo 输出字符串
printf 格式化输出
yes 无限输出 "y"(用于自动化确认)
2.2.13 条件测试
命令 功能
true 始终返回 0(成功)
false 始终返回 1(失败)
test / [ ] 条件测试
expr 表达式求值
2.2.14 重定向与上下文
命令 功能
tee 同时输出到文件和控制台
pwd 显示当前目录
stty 设置终端特性
printenv 打印环境变量
tty 显示终端文件名
2.2.15 用户信息
命令 功能
id 显示用户 UID/GID
logname 显示登录名
whoami 显示当前有效用户
groups 显示用户所属组
users 显示登录用户列表
who 详细登录信息
2.2.16 系统信息
命令 功能
date 显示/设置日期时间
arch 显示硬件架构
nproc 显示 CPU 核心数
uname 显示系统信息
hostname 显示/设置主机名
uptime 显示运行时间和负载
2.2.17 进程控制与延迟
命令 功能
kill 发送信号到进程
sleep 延迟指定秒数
2.2.18 数值与序列
命令 功能
factor 因数分解
numfmt 数字格式转换(如易读格式)
seq 生成数字序列
2.2.19 修改命令执行
命令 功能
chroot 改变根目录执行命令
env 修改环境执行命令
nice/renice 调整进程优先级
nohup 忽略挂断信号执行
stdbuf 修改缓冲区行为
timeout 设置超时

2.3 GNU Coreutils 的设计哲学

GNU Coreutils 遵循 Unix 哲学的核心:每个命令做好一件事。例如:

  • sort 只负责排序
  • uniq 只负责去重
  • 通过管道 | 将多个小工具串联成复杂数据处理流水线

这也解释了为什么 Coreutils 命令在 Shell 脚本中如此常见------它们是数据流处理的"积木块"。

3. util-linux:系统底层的全能管家

3.1 工具集概况

util-linux 由 Linux 内核组织 维护,是 Linux 系统底层管理的核心工具包。它最初由三个独立集合(fileutils、shellutils、textutils)中未被合并入 Coreutils 的部分组成,2003 年左右整合为统一的 util-linux。

3.2 功能分类全览

3.2.1 磁盘分区与格式化
命令 功能 典型用法
fdisk 传统分区工具(MBR/GPT) sudo fdisk /dev/sda
cfdisk 基于 ncurses 的交互式分区工具 sudo cfdisk /dev/sda
sfdisk 脚本化分区工具(用于自动化) sfdisk -d /dev/sda > part.txt
partx 解析分区表并设备映射 partx -a /dev/sda
resizepart 调整分区大小 resizepart /dev/sda 2 100G
delpart/addpart 删除/添加分区(底层)
blkdiscard 丢弃设备块(TRIM 操作) blkdiscard /dev/sda
3.2.2 文件系统挂载与管理
命令 功能 说明
mount 挂载文件系统 mount /dev/sda1 /mnt
umount 卸载文件系统 umount /mnt
mountpoint 检查是否为挂载点 mountpoint /home
swapon/swapoff 启用/禁用交换分区 swapon /dev/sda2
findmnt 查找挂载点(树形输出) findmnt
lsblk 树形列出块设备 lsblk -f
blkid 显示块设备属性(UUID、TYPE) blkid /dev/sda1
wipefs 擦除文件系统签名 wipefs /dev/sda1
3.2.3 文件系统创建
命令 功能
mkfs 通用创建文件系统(实际调用具体 mkfs 变体)
mkfs.bfs 创建 BFS 文件系统
mkfs.cramfs 创建 CRAMFS 压缩只读文件系统
mkfs.minix 创建 MINIX 文件系统
mkswap 创建交换分区
3.2.4 文件系统检查
命令 功能
fsck 文件系统检查(调用具体 fsck 变体)
fsck.cramfs CRAMFS 一致性检查
fsck.minix MINIX 文件系统检查
3.2.5 终端与登录管理
命令 功能 说明
agetty 打开 TTY 端口并提示登录 常由 systemd 自动调用
login 启动登录会话
su 切换用户 su - root
runuser 以指定用户运行(不触发 PAM 会话) 用于服务脚本
sulogin 单用户模式登录(紧急 shell)
setterm 设置终端属性 setterm -blank 10
mesg 控制写权限(write 命令) mesg n 拒绝消息
wall 向所有终端广播消息 wall "System will reboot"
write 向特定用户发送消息 write bob
3.2.6 终端文本处理
命令 功能
col 过滤反向换行符(处理 nroff 输出)
colcrt 为 CRT 终端过滤 nroff 输出(处理粗体和下划线)
colrm 删除指定列
column 将输入格式化为多列
rev 反转每行字符顺序
hexdump 十六进制转储
more 分页查看(less 的功能超集)
ul 将下划线转换为终端转义序列
pg 分页查看(较古老)
3.2.7 日志与内核消息
命令 功能 说明
dmesg 查看/控制内核环形缓冲区 `dmesg
logger 向系统日志发送消息 logger "Script started"
3.2.8 硬件与时钟
命令 功能 说明
hwclock 读写硬件时钟(RTC/BIOS 时钟) hwclock --systohc
arch 显示机器架构
lscpu 显示 CPU 架构信息
lsirq 显示中断请求信息
lslocks 显示锁文件信息
lslogins 显示用户登录信息
3.2.9 进程管理
命令 功能
kill 向进程发送信号
renice 调整运行中进程的优先级
taskset 设置进程的 CPU 亲和性
chrt 设置实时调度属性
ionice 设置 I/O 调度类/优先级
prlimit 获取/设置资源限制
3.2.10 会话与命名空间
命令 功能 说明
setsid 在新会话中运行程序 后台脱离终端
unshare 运行程序于新命名空间 容器底层
nsenter 进入其他进程的命名空间
pivot_root 移动根文件系统 用于 initramfs
switch_root 切换到新根文件系统
3.2.11 权限与安全
命令 功能
setpriv 以指定特权运行程序
setarch 改变架构报告(如 32 位兼容)
chfn 修改 GECOS 字段(用户信息)
chsh 修改登录 Shell
newgrp 切换主组
nologin 拒绝登录的显示程序
3.2.12 循环设备管理
命令 功能
losetup 设置/控制循环设备
zramctl 管理 zRAM 设备
3.2.13 其他实用工具
命令 功能
cal 显示日历
rename 批量重命名文件(支持表达式)
whereis 定位命令的二进制、源码和手册
script 记录终端会话
scriptreplay 回放记录的会话
getopt 解析命令行选项
flock 文件锁(用于 Shell 脚本同步)
ipcmk/ipcrm/ipcs System V IPC 管理
uuidgen 生成 UUID
uuidd UUID 生成守护进程
fallocate 预分配文件空间
eject 弹出光驱
mcookie 生成 xauth "magic cookie"

4. 两大工具集对比

4.1 功能域对照表

功能域 GNU Coreutils util-linux
文件复制/移动/删除 cp, mv, rm
文件内容查看 cat, head, tail
目录列表 ls
文本处理(排序、去重) sort, uniq
权限修改 chmod, chown
链接创建 ln
目录创建/删除 mkdir, rmdir
磁盘分区 fdisk, cfdisk
文件系统挂载 mount, umount
文件系统创建 mkfs.*
交换空间 swapon/swapoff
终端登录 agetty, login
硬件时钟 hwclock
内核消息 dmesg
会话与命名空间 unshare, nsenter
用户信息 id, who lslogins
系统信息 uname lscpu

4.2 重叠与模糊边界

某些命令似乎"本应"属于某个工具集,但实际归属可能出人意料:

命令 实际归属 直觉归属 说明
more util-linux Coreutils 历史原因,more 在 util-linux 中
kill Coreutils util-linux Coreutils 的进程控制组包含 kill
logger util-linux Coreutils 系统日志工具,非文本处理
cal util-linux Coreutils 日历显示与系统配置相关
rename util-linux Coreutils 不同版本功能差异大

4.3 选择建议

日常文件与文本操作 → 查阅 info coreutils

磁盘、系统、底层管理 → 查阅 man <command>(util-linux 命令)

如果需要查看某个命令的归属,可以使用 dpkg -S (Debian/Ubuntu) 或 rpm -qf (RHEL) 查询:

bash 复制代码
# 查看 mount 命令属于哪个包(应是 util-linux)
dpkg -S $(which mount)

# 查看 ls 命令属于哪个包(应是 coreutils)
dpkg -S $(which ls)

5. 文档查阅方式

5.1 Coreutils 官方手册

bash 复制代码
info coreutils

进入后,使用方向键浏览分组的命令列表,按 Enter 进入详情。

5.2 单个命令帮助

bash 复制代码
# 标准方式
man ls

# 简略方式(仅展示用法)
ls --help

5.3 命令归属查询

bash 复制代码
# 查看命令类型(内置/外部/别名)
type ls
# 输出: ls is aliased to `ls --color=auto'

type -a mount
# 输出: mount is /usr/bin/mount

6. 总结:两张"工具箱"覆盖了整个 Linux 操作

GNU Coreutils 和 util-linux 共同覆盖了 Linux 操作的核心需求
#mermaid-svg-ADMvQWLjw2YXc7aE{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ADMvQWLjw2YXc7aE .error-icon{fill:#552222;}#mermaid-svg-ADMvQWLjw2YXc7aE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ADMvQWLjw2YXc7aE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ADMvQWLjw2YXc7aE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ADMvQWLjw2YXc7aE .marker.cross{stroke:#333333;}#mermaid-svg-ADMvQWLjw2YXc7aE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ADMvQWLjw2YXc7aE p{margin:0;}#mermaid-svg-ADMvQWLjw2YXc7aE .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ADMvQWLjw2YXc7aE .cluster-label text{fill:#333;}#mermaid-svg-ADMvQWLjw2YXc7aE .cluster-label span{color:#333;}#mermaid-svg-ADMvQWLjw2YXc7aE .cluster-label span p{background-color:transparent;}#mermaid-svg-ADMvQWLjw2YXc7aE .label text,#mermaid-svg-ADMvQWLjw2YXc7aE span{fill:#333;color:#333;}#mermaid-svg-ADMvQWLjw2YXc7aE .node rect,#mermaid-svg-ADMvQWLjw2YXc7aE .node circle,#mermaid-svg-ADMvQWLjw2YXc7aE .node ellipse,#mermaid-svg-ADMvQWLjw2YXc7aE .node polygon,#mermaid-svg-ADMvQWLjw2YXc7aE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ADMvQWLjw2YXc7aE .rough-node .label text,#mermaid-svg-ADMvQWLjw2YXc7aE .node .label text,#mermaid-svg-ADMvQWLjw2YXc7aE .image-shape .label,#mermaid-svg-ADMvQWLjw2YXc7aE .icon-shape .label{text-anchor:middle;}#mermaid-svg-ADMvQWLjw2YXc7aE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ADMvQWLjw2YXc7aE .rough-node .label,#mermaid-svg-ADMvQWLjw2YXc7aE .node .label,#mermaid-svg-ADMvQWLjw2YXc7aE .image-shape .label,#mermaid-svg-ADMvQWLjw2YXc7aE .icon-shape .label{text-align:center;}#mermaid-svg-ADMvQWLjw2YXc7aE .node.clickable{cursor:pointer;}#mermaid-svg-ADMvQWLjw2YXc7aE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ADMvQWLjw2YXc7aE .arrowheadPath{fill:#333333;}#mermaid-svg-ADMvQWLjw2YXc7aE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ADMvQWLjw2YXc7aE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ADMvQWLjw2YXc7aE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ADMvQWLjw2YXc7aE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ADMvQWLjw2YXc7aE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ADMvQWLjw2YXc7aE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ADMvQWLjw2YXc7aE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ADMvQWLjw2YXc7aE .cluster text{fill:#333;}#mermaid-svg-ADMvQWLjw2YXc7aE .cluster span{color:#333;}#mermaid-svg-ADMvQWLjw2YXc7aE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ADMvQWLjw2YXc7aE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ADMvQWLjw2YXc7aE rect.text{fill:none;stroke-width:0;}#mermaid-svg-ADMvQWLjw2YXc7aE .icon-shape,#mermaid-svg-ADMvQWLjw2YXc7aE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ADMvQWLjw2YXc7aE .icon-shape p,#mermaid-svg-ADMvQWLjw2YXc7aE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ADMvQWLjw2YXc7aE .icon-shape .label rect,#mermaid-svg-ADMvQWLjw2YXc7aE .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ADMvQWLjw2YXc7aE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ADMvQWLjw2YXc7aE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ADMvQWLjw2YXc7aE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} util-linux
GNU Coreutils
文件操作
文本处理
Shell 交互
磁盘分区
系统挂载
终端管理
硬件控制
完整 Linux 操作

虽然它们常被忽略("不就是 ls 嘛"),但这两个工具集支撑了从最简单的文件查看到最复杂的系统维护工作。下次使用 mountls 时,不妨想想背后这两个默默贡献了数十年的开源项目。

相关推荐
AIex-YH2 小时前
三域贯通11/12:生物制造的“死亡之谷“,CDMO 是桥还是船?
运维·制造·策略模式
荒--2 小时前
MSF 使用
linux·运维·服务器
明航咨询-程老师2 小时前
信创运维困局:“救火队”模式走到尽头,平台工程如何重塑CISAW安全体系?
运维·安全·数据安全官,ccrc 认证,数据合规,职业发展规划
狮子再回头2 小时前
relhat9.1 sshd配置
linux·服务器·网络
w3296362712 小时前
八、OpenCode 高阶玩法:CLI 自动化、CI/CD 集成与远程协作
运维·ci/cd·自动化·ai编程·开发工具·opencode
烁3472 小时前
liunx命令不完整版
linux·运维·服务器
vsropy2 小时前
cmake版本不对不能直接删/无法source
linux·运维·服务器
xcLeigh3 小时前
鸿蒙平台 gThumb 图片查看器适配实战:从 Linux GTK 到 Electron 鸿蒙壳工程
linux·electron·harmonyos·gnome·桌面环境·gthumb
wuminyu3 小时前
Java世界中StringTable源码剖析
java·linux·c语言·jvm·c++