uuidgen

关注
义项:UUID 生成命令
uuidgen

uuidgen是类 Unix 系统中用于生成并输出一个通用唯一标识符(UUID)的命令行工具,它借助 libuuid 库完成取值[1]。该命令默认在系统具备高质量随机数来源时生成随机型 UUID,否则改用时间型 UUID[2]。它被广泛用于为文件系统、分区、数据库主键和软件组件分配不易冲突的标识符,是操作系统与应用程序中常见的标识符生成入口之一[1]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

uuidgen 是一个命令行程序,负责创建一个通用唯一标识符(UUID)并把它打印到标准输出[1]。它的基本调用形式为 uuidgen [options],不带参数运行时即输出一个 UUID 字符串[2]。按手册表述,这样得到的取值在本机以及过去、未来其他系统所生成的 UUID 中都可以合理视为唯一[1]。

该命令归属于 util-linux 软件包,实现上依赖 libuuid 库[1]。手册同时说明它遵循 OSF DCE 1.1 的相关约定[3]。

原理

UUID 在格式上为 128 位,文本形式写成 5 组以连字符分隔的十六进制数字,各组长度依次为 8、4、4、4、12 位。其中若干比特被固定用作版本号与变体号,其余字段的含义随版本不同而变化[4]。

uuidgen 能够生成 3 类 UUID:基于时间的、基于随机的以及基于散列的[2]。当系统提供了高质量的随机数发生器时,命令默认给出随机型值;若该条件不满足,则退回到时间型值。使用 --random 或 --time 参数可以强制指定前两类中的某一类[1]。

随机型值主要由随机比特构成,因此要求操作系统具备类似 /dev/random 的高质量随机源[2]。时间型值则以系统时钟与系统的以太网硬件地址(如存在)为基础构造[1]。第三类值需配合 --md5 或 --sha1 以及 --namespace、--name 一起使用,做法是把命名空间 UUID 与名称字符串拼接后取散列,因而结果是可以预测的[2]。命名空间既可以直接给出一个 UUID,也可以使用 RFC 4122 中定义的 @dns、@url、@oid、@x500 等别名[5]。

发展历程

该命令的手册页版权标注为 1999 年,由安德烈亚斯·迪尔格(Andreas Dilger)为 libuuid 编写,最早的手册页面向 libuuid.so.1.1 与 e2fsprogs-1.14[6]。早期版本属于 e2fsprogs 软件包中 libuuid 的一部分[7]。

早期手册只描述时间型与随机型两种 UUID,并通过 -r、-t 两个选项在两者之间切换[8]。后来的版本把可生成的类型扩展为时间型、随机型与散列型 3 种,并加入 --md5、--sha1、--namespace、--name、--hex 等选项[3]。

近期的 util-linux 版本又为该命令补充了 --time-v6 与 --time-v7 选项,用于生成按时间戳可进行字典序排序的时间型 UUID,以及 --count 选项以批量生成[1]。

应用

该命令用于在脚本或交互式环境中快速取得一个标识符,其输出可直接被其他程序通过标准输出读取[1]。在文件系统与分区管理中,UUID 常被用作设备的稳定标识;UUID 与 GUID 在概念上指同一类标识符[4]。

基于散列的类型适用于把命名空间与名称映射为固定值,手册指出这类可预测结果在把 UUID 当作更复杂取值的句柄或一次性随机数(nonce)时可能有用[2]。--count 选项借助 libuuid 对时间型 UUID 的缓存能力一次输出多个值,从而改善性能,但对其他类型没有意义[1]。

局限

随机型 UUID 仅由本机采集的随机数产生,并不具备全局唯一的保证,只是冲突概率极低[9]。当系统缺少高质量的随机数来源时,默认行为会退回到时间型,取值方式随之改变[1]。

时间型 UUID 会把节点标识写入取值中,早期做法直接使用 MAC 地址,这可能暴露主机网络接口信息;规范也指出,在虚拟机和容器普及后 MAC 地址的唯一性已不再得到保证[10]。另外,时间型所用的时间基准并非通行的纪元,且非时间有序的版本在数据库索引中局部性较差[10]。

基于 MD5 的散列类型属于可预测取值,其主要用途是向后兼容,规范不再建议在新建的 UUID 中使用[11]。同一命名空间与同一名称必然得到相同结果,这一性质在需要每次获得不同标识符的场合并不适用[5]。

参见

  • UUID —— uuidgen 所生成的对象,一种 128 位的通用唯一标识符。

  • RFC 4122 —— 定义 UUID 命名空间及其各版本格式的技术规范。

  • libuuid —— uuidgen 在实现上依赖的 UUID 操作库。

  • util-linux —— 提供 uuidgen 命令的软件包集合。

  • e2fsprogs —— 早期收录该命令及其 libuuid 的软件包。

  • 命令行界面 —— uuidgen 所属的交互与脚本操作方式。

参考资料

  1. uuidgen.1.en [引用日期2026-10-14]
  2. uuidgen.1 [引用日期2026-10-14]
  3. uuidgen.1 [引用日期2026-10-14]
  4. ietf.org 上的网页 [引用日期2026-10-14]
  5. ietf.org 上的网页 [引用日期2026-10-14]
  6. uuidgen.1 « misc-utils - index : tools/util-linux [引用日期2026-10-14]
  7. Cross Reference: /external/e2fsprogs/misc/uuidgen.1.in [引用日期2026-10-14]
  8. index : tools/util-linux [引用日期2026-10-14]
  9. uuid.3ossp.en [引用日期2026-10-14]
  10. Universally Unique IDentifiers (UUIDs) [引用日期2026-10-14]
  11. dologin_pub [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T18:31:50Z

历史版本

本条目引用的词条
UUID RFC 4122 libuuid util-linux e2fsprogs 命令行界面