
1. 引言Linux 命令世界的两大基石当你打开终端输入ls查看文件、用cd切换目录、用mount挂载磁盘时是否想过这些命令从何而来在 Linux 生态中这些基础命令主要来自两个核心工具集GNU Coreutils和util-linux。这两个工具集的分工简单而清晰工具集维护者核心定位典型命令GNU CoreutilsGNU 项目文件操作、文本处理、Shell 交互ls,cp,cat,greputil-linuxLinux 内核组织系统底层管理磁盘、挂载、终端、日志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文件操作、shellutilsShell 相关和textutils文本处理。如今它包含102 个核心命令。2.2 功能分类全览根据 GNU 官方手册的分类Coreutils 命令按功能分为以下组别2.2.1 文件输出与查看命令功能典型用法cat连接并输出文件内容cat file.txttac反向输出文件行序反转tac file.txtnl给文件加行号nl script.shod八进制/十六进制转储od -x binary.binbase32/base64Base32/64 编解码base64 file.zip2.2.2 文件格式化命令功能fmt重新格式化段落pr将文本分页/分列打印fold折行按宽度截断2.2.3 文件部分提取命令功能示例head取文件开头head -n 20 log.txttail取文件末尾支持-f实时跟踪tail -f /var/log/syslogsplit分割文件split -l 1000 big.csv part_csplit按上下文分割csplit file /regex/2.2.4 文件统计与校验命令功能wc统计行、词、字节数sum/cksum传统/现代校验和md5sum/sha1sum/sha256sum哈希校验b2sumBLAKE2 哈希2.2.5 排序与去重命令功能sort排序支持-n数字、-r反向、-k按字段shuf随机打乱行序uniq去重需预先排序comm逐行比较两个已排序文件tsort拓扑排序2.2.6 字段操作与字符转换命令功能cut提取字段按列或分隔符paste横向合并文件列join按公共字段连接两个文件tr字符替换/删除expand/unexpandTab 与空格互转2.2.7 目录列表命令功能ls列出目录内容dirls -C的同义词列式输出vdirls -l的同义词长格式dircolors配置ls的颜色方案2.2.8 基础文件操作命令功能cp复制文件dd底层复制指定块大小常用于刻录install复制并设置属性用于 Makefilemv移动/重命名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/GIDlogname显示登录名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/GPTsudo fdisk /dev/sdacfdisk基于 ncurses 的交互式分区工具sudo cfdisk /dev/sdasfdisk脚本化分区工具用于自动化sfdisk -d /dev/sda part.txtpartx解析分区表并设备映射partx -a /dev/sdaresizepart调整分区大小resizepart /dev/sda 2 100Gdelpart/addpart删除/添加分区底层blkdiscard丢弃设备块TRIM 操作blkdiscard /dev/sda3.2.2 文件系统挂载与管理命令功能说明mount挂载文件系统mount /dev/sda1 /mntumount卸载文件系统umount /mntmountpoint检查是否为挂载点mountpoint /homeswapon/swapoff启用/禁用交换分区swapon /dev/sda2findmnt查找挂载点树形输出findmntlsblk树形列出块设备lsblk -fblkid显示块设备属性UUID、TYPEblkid /dev/sda1wipefs擦除文件系统签名wipefs /dev/sda13.2.3 文件系统创建命令功能mkfs通用创建文件系统实际调用具体 mkfs 变体mkfs.bfs创建 BFS 文件系统mkfs.cramfs创建 CRAMFS 压缩只读文件系统mkfs.minix创建 MINIX 文件系统mkswap创建交换分区3.2.4 文件系统检查命令功能fsck文件系统检查调用具体 fsck 变体fsck.cramfsCRAMFS 一致性检查fsck.minixMINIX 文件系统检查3.2.5 终端与登录管理命令功能说明agetty打开 TTY 端口并提示登录常由 systemd 自动调用login启动登录会话su切换用户su - rootrunuser以指定用户运行不触发 PAM 会话用于服务脚本sulogin单用户模式登录紧急 shellsetterm设置终端属性setterm -blank 10mesg控制写权限write命令mesg n拒绝消息wall向所有终端广播消息wall System will rebootwrite向特定用户发送消息write bob3.2.6 终端文本处理命令功能col过滤反向换行符处理 nroff 输出colcrt为 CRT 终端过滤 nroff 输出处理粗体和下划线colrm删除指定列column将输入格式化为多列rev反转每行字符顺序hexdump十六进制转储more分页查看less的功能超集ul将下划线转换为终端转义序列pg分页查看较古老3.2.7 日志与内核消息命令功能说明dmesg查看/控制内核环形缓冲区dmesglogger向系统日志发送消息logger Script started3.2.8 硬件与时钟命令功能说明hwclock读写硬件时钟RTC/BIOS 时钟hwclock --systohcarch显示机器架构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移动根文件系统用于 initramfsswitch_root切换到新根文件系统3.2.11 权限与安全命令功能setpriv以指定特权运行程序setarch改变架构报告如 32 位兼容chfn修改 GECOS 字段用户信息chsh修改登录 Shellnewgrp切换主组nologin拒绝登录的显示程序3.2.12 循环设备管理命令功能losetup设置/控制循环设备zramctl管理 zRAM 设备3.2.13 其他实用工具命令功能cal显示日历rename批量重命名文件支持表达式whereis定位命令的二进制、源码和手册script记录终端会话scriptreplay回放记录的会话getopt解析命令行选项flock文件锁用于 Shell 脚本同步ipcmk/ipcrm/ipcsSystem V IPC 管理uuidgen生成 UUIDuuiddUUID 生成守护进程fallocate预分配文件空间eject弹出光驱mcookie生成 xauth “magic cookie”4. 两大工具集对比4.1 功能域对照表功能域GNU Coreutilsutil-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✅lscpu4.2 重叠与模糊边界某些命令似乎本应属于某个工具集但实际归属可能出人意料命令实际归属直觉归属说明moreutil-linuxCoreutils历史原因more在 util-linux 中killCoreutilsutil-linuxCoreutils 的进程控制组包含killloggerutil-linuxCoreutils系统日志工具非文本处理calutil-linuxCoreutils日历显示与系统配置相关renameutil-linuxCoreutils不同版本功能差异大4.3 选择建议日常文件与文本操作→ 查阅info coreutils磁盘、系统、底层管理→ 查阅man commandutil-linux 命令如果需要查看某个命令的归属可以使用dpkg -S(Debian/Ubuntu) 或rpm -qf(RHEL) 查询# 查看 mount 命令属于哪个包应是 util-linuxdpkg-S$(whichmount)# 查看 ls 命令属于哪个包应是 coreutilsdpkg-S$(whichls)5. 文档查阅方式5.1 Coreutils 官方手册info coreutils进入后使用方向键浏览分组的命令列表按 Enter 进入详情。5.2 单个命令帮助# 标准方式manls# 简略方式仅展示用法ls--help5.3 命令归属查询# 查看命令类型内置/外部/别名typels# 输出: ls is aliased to ls --colorautotype-amount# 输出: mount is /usr/bin/mount6. 总结两张工具箱覆盖了整个 Linux 操作GNU Coreutils 和 util-linux 共同覆盖了 Linux 操作的核心需求util-linuxGNU Coreutils文件操作文本处理Shell 交互磁盘分区系统挂载终端管理硬件控制完整 Linux 操作虽然它们常被忽略“不就是 ls 嘛”但这两个工具集支撑了从最简单的文件查看到最复杂的系统维护工作。下次使用mount或ls时不妨想想背后这两个默默贡献了数十年的开源项目。