以下のようにランダムな固有番号(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プログラムは、(3)ライブラリを使用して
libuuid
新しいUUID(Universally Unique Identifier)を作成(および印刷)します。新しいUUIDは、過去および将来の他のシステムで生成されたUUIDだけでなく、ローカルシステムで生成されたすべてのUUIDの中で一意であると合理的に見なすことができます。uuidgenは、時間ベースのUUIDとランダムベースのUUIDの2種類の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
Raspberry Pi(および他の場合もあります)では、コマンドは簡単です。
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))- 残りの4つのランダムビットを次に置き換えます。0100部分として定義4.4そして4.1.3RFC。
$(($ランダム& 0x3fff | 0x8000))- 左側の2つのランダムビットを次に置き換えます。10部分定義によると4.4RFC。