编译 Util-linux:从源码构建核心工具集
Util-linux 是 Linux 系统中最基础的工具集之一,包含了 lsblk、fdisk、mount、uname 等大量核心命令,通过从源码编译 Util-linux,不仅可以定制功能、优化性能,还能深入理解其内部结构,本文将详细介绍编译前的准备、依赖安装、配置选项、编译流程及常见问题解决,帮助您顺利完成构建。

编译环境准备
在开始编译前,需确保系统满足基本要求,推荐使用 Ubuntu 20.04+ 或 CentOS 7+ 等主流发行版,并安装以下基础工具:
- 编译器:GCC 7.0+ 或 Clang 10.0+
- 构建工具:
make、autoconf、automake、libtool - 版本控制:Git(用于获取最新源码)
以 Ubuntu 为例,可通过以下命令安装依赖:
sudo apt update && sudo apt install -y build-essential autoconf automake libtool git
获取源码
Util-linux 的源码托管在 Kernel.org 官方仓库,可通过 Git 克隆最新版本,或下载稳定版 tarball,以下是两种方式:
-
通过 Git 克隆(推荐获取开发版):
git clone https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git cd util-linux
-
下载稳定版 tarball(如 v2.38):
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.38/util-linux-2.38.tar.xz tar -xvf util-linux-2.38.tar.xz cd util-linux-2.38
配置编译选项
Util-linux 使用 configure 脚本生成 Makefile,支持丰富的自定义选项,通过 ./configure --help 可查看所有选项,以下为常用配置:
| 选项 | 说明 |
|---|---|
--prefix=/usr/local |
指定安装路径,默认为 /usr/local |
--disable-all |
禁用所有工具,后续按需启用 |
--enable-libblkid |
启用块设备 ID 库(依赖 uuid-dev) |
--enable-libmount |
启用挂点管理库(依赖 libmount-dev) |
--enable-uuid |
启用 UUID 支持(依赖 libuuid-dev) |
--enable-fsck |
启用文件系统检查工具(如 fsck.ext4) |
--with-systemd |
启用 systemd 集成(需安装 libsystemd-dev) |
--without-python |
禁用 Python 绑定(减少依赖) |
示例配置(最小化安装,仅保留核心工具):
./configure \ --prefix=/usr/local \ --disable-all \ --enable-mount \ --enable-fsck \ --enable-blkid \ --enable-losetup \ --enable-swaponoff \ --without-python
编译与安装
配置完成后,执行以下命令编译并安装:
-
清理临时文件(可选):

make clean
-
编译源码(多线程加速):
make -j$(nproc)
-j$(nproc)选项会自动检测 CPU 核心数,显著加快编译速度。 -
安装到系统:
sudo make install
若需覆盖系统原有工具,可使用
sudo make install,但建议先备份关键命令(如/bin/mount)。
验证与测试
安装完成后,可通过以下命令验证工具是否正常工作:
# 检查安装路径 ls /usr/local/bin | grep -E "mount|blkid|fdisk" # 测试 mount 命令 mount --version # 测试 blkid(需有块设备) sudo blkid /dev/sda1
若出现 command not found,可能是 PATH 未包含安装路径,可通过 export PATH=/usr/local/bin:$PATH 临时修复,或永久修改 /etc/profile。
常见问题与解决方案
-
依赖缺失
- 错误提示:
configure: error: uuid.h not found - 解决:安装
uuid-dev(Ubuntu)或libuuid-devel(CentOS)。
- 错误提示:
-
编译失败
- 错误提示:
undefined reference to 'blkid_get_cache' - 解决:确保
--enable-libblkid已启用,并检查libblkid是否安装。
- 错误提示:
-
运行时错误

- 错误提示:
mount: wrong fs type, bad option - 解决:编译时启用
--enable-libmount,并确保内核支持目标文件系统。
- 错误提示:
-
与系统工具冲突
- 现象:新编译的工具与系统默认工具行为不一致。
- 解决:通过
--prefix指定非标准路径(如/opt/util-linux),并手动配置PATH优先级。
进阶定制
对于高级用户,可通过以下方式进一步优化:
-
静态链接:生成独立可执行文件,适合嵌入式环境。
./configure --enable-static --disable-shared
-
交叉编译:为 ARM 等架构编译工具。
./configure --host=arm-linux-gnueabihf
-
裁剪功能:通过
--disable-xxx移除不需要的工具(如--disable-cal)。
从源码编译 Util-linux 是一项有价值的实践,既能满足定制需求,又能加深对 Linux 基础工具的理解,关键在于正确配置依赖选项、处理编译错误,以及合理验证结果,通过本文的步骤,您应能成功构建一个符合自身需求的工具集,并为后续的系统维护或开发打下基础。
















