我想创建随机唯一编号(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.4和4.1.3RFC 的。
$(($随机 & 0x3fff | 0x8000))- 将左边的两个随机位替换为10按照部分定义4.4RFC 的。