在 bash 中创建唯一的随机数 (UUID)

在 bash 中创建唯一的随机数 (UUID)

我想创建随机唯一编号(UUID),如下所示

node.id=ffffffff-ffff-ffff-ffff-ffffffffffff

首先我尝试了这个

$ rndnum=` echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM`

$ echo $rndnum
30380-echo 21875-echo 14791-echo 32193-echo 11503

创建以下内容的正确方法是什么(其中f有任何数字)?

ffffffff-ffff-ffff-ffff-ffffffffffff

答案1

在 Linux 上,util-linux/util-linux-ng包提供了生成 UUID 的命令:uuidgen

$ uuidgen
5528f550-6559-4d61-9054-efb5a16a4de0

引用手动的:

uuidgen 程序使用libuuid(3) 库创建(并打印)一个新的通用唯一标识符 (UUID)。新的 UUID 可以合理地被认为在本地系统上创建的所有 UUID 以及过去和将来在其他系统上创建的 UUID 中是唯一的。

uuidgen 可以生成两种类型的 UUID:基于时间的 UUID 和基于随机的 UUID。默认情况下,如果存在高质量随机数生成器,uuidgen 将生成基于随机的 UUID。否则,它将选择基于时间的 UUID。可以使用-r-t选项强制生成这两种 UUID 类型之一。

附录:OP 在评论中提供了一个链接Presto DB 的文档。经过一番搜索,我发现这个相关讨论其中明确提到该node.id属性确实是 UUID。


在评论中添加由frostschutz提供的信息:

uuidgen作为/方法的替代方法libuuid,您可以利用 Linux 内核本身公开的接口来生成 UUID:

$ cat /proc/sys/kernel/random/uuid
00db2531-365c-415c-86f7-503a35fafa58

UUID 会根据每个请求重新生成。

答案2

正如 @frostschutz 提到的,您可以使用无依赖的解决方案:

cat /proc/sys/kernel/random/uuid

或保存变量

UUID=$(cat /proc/sys/kernel/random/uuid)

在 Bash 中你可以简化为:

UUID=$(< /proc/sys/kernel/random/uuid)

答案3

在树莓派(也可能是其他)上,命令很简单:

uuid

它应该是预安装的,但如果没有,应该这样做: sudo apt install uuid

答案4

下面是根据以下内容生成 UUID 版本 4 的 bash 脚本RFC 4122

UUID 版本 4 意味着它基于真随机数或伪随机数。

#! /bin/bash

printf "%04x%04x-%04x-%04x-%04x-%04x%04x%04x\n" \
$RANDOM $RANDOM \
$RANDOM \
$(($RANDOM & 0x0fff | 0x4000)) \
$(($RANDOM & 0x3fff | 0x8000)) \
$RANDOM $RANDOM $RANDOM

$(($随机 & 0x0fff | 0x4000))- 将剩下的四个随机位替换为0100由零件定义4.44.1.3RFC 的。

$(($随机 & 0x3fff | 0x8000))- 将左边的两个随机位替换为10按照部分定义4.4RFC 的。

相关内容