// Linux · 2026-06-12
Linux 命令工具箱:util-linux 与 GNU Coreutils 当你打开终端,输入 `ls` 查看文件、用 `cd` 切换目录、用 `mount` 挂载磁盘时,是否想过这些命令从何而来?在 Linux 生态中,这些基础命令主要来自两个核心工具集:**GNU Coreutils** 和 **util-linux**。
1. 引言:Linux 命令世界的两大基石
当你打开终端,输入 ls 查看文件、用 cd 切换目录、用 mount 挂载磁盘时,是否想过这些命令从何而来?在 Linux 生态中,这些基础命令主要来自两个核心工具集:GNU Coreutils 和 util-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) 查询:
# 查看 mount 命令属于哪个包(应是 util-linux)
dpkg -S $( which mount )
# 查看 ls 命令属于哪个包(应是 coreutils)
dpkg -S $( which ls ) bash 5 行 复制
5. 文档查阅方式
5.1 Coreutils 官方手册
info coreutils bash 1 行 复制
进入后,使用方向键浏览分组的命令列表,按 Enter 进入详情。
5.2 单个命令帮助
# 标准方式
man ls
# 简略方式(仅展示用法)
ls --help bash 5 行 复制
5.3 命令归属查询
# 查看命令类型(内置/外部/别名)
type ls
# 输出: ls is aliased to `ls --color=auto'
type -a mount
# 输出: mount is /usr/bin/mount bash 6 行 复制
6. 总结:两张“工具箱”覆盖了整个 Linux 操作
GNU Coreutils 和 util-linux 共同覆盖了 Linux 操作的核心需求 :
graph LR
subgraph GNU Coreutils
A1[文件操作]
A2[文本处理]
A3[Shell 交互]
end
subgraph util-linux
B1[磁盘分区]
B2[系统挂载]
B3[终端管理]
B4[硬件控制]
end
C[完整 Linux 操作]
A1 --> C
A2 --> C
A3 --> C
B1 --> C
B2 --> C
B3 --> C
B4 --> C
虽然它们常被忽略(“不就是 ls 嘛”),但这两个工具集支撑了从最简单的文件查看到最复杂的系统维护工作。下次使用 mount 或 ls 时,不妨想想背后这两个默默贡献了数十年的开源项目。
原文 https://blog.csdn.net/2301_79518550/article/details/161919563