web-dev-qa-db-ja.com

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
7
yael

Linuxでは、util-linux/util-linux-ngパッケージはUUIDを生成するコマンドuuidgenを提供します。

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

manual を引用するには:

Uuidgenプログラムは、libuuid(3)ライブラリを使用して、新しい汎用一意識別子(UUID)を作成(および出力)します。新しいUUIDは、ローカルシステムで作成されたすべてのUUIDの間、および過去と将来に他のシステムで作成されたUUIDの間で合理的に一意であると見なすことができます。

Uuidgenが生成できるUUIDには、時間ベースのUUIDとランダムベースのUUIDの2つのタイプがあります。高品質の乱数ジェネレータが存在する場合、デフォルトでuuidgenはランダムベースのUUIDを生成します。それ以外の場合は、時間ベースのUUIDを選択します。 -rまたは-tオプションを使用して、これら2つのUUIDタイプのいずれかを強制的に生成することが可能です。

補遺:OPはコメントに Presto DBのドキュメント へのリンクを提供していました。少し検索したところ、 この関連ディスカッション が見つかりました。ここで、node.idプロパティは確かにUUIDであることが明示的に言及されています。


Frostschutzによって提供された情報をコメントに追加します。

uuidgen/libuuidアプローチの代わりに、Linuxカーネル自体によって公開されているインターフェースを使用してUUIDを生成できます。

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

UUIDはリクエストごとに再生成されます。

30
Haxiel