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 프로그램은 (3) 라이브러리를 사용하여 libuuid새로운 UUID(Universally Unique Identifier)를 생성(및 인쇄)합니다 . 새로운 UUID는 과거와 미래에 다른 시스템에서 생성된 UUID뿐만 아니라 로컬 시스템에서 생성된 모든 UUID 중에서 고유한 것으로 합리적으로 간주될 수 있습니다.

uuidgen은 시간 기반 UUID와 무작위 기반 UUID라는 두 가지 유형의 UUID를 생성할 수 있습니다. 기본적으로 uuidgen은 고품질 난수 생성기를 사용할 수 있는 경우 무작위 기반 UUID를 생성합니다. 그렇지 않으면 시간 기반 UUID를 선택합니다. -r또는 옵션을 사용하여 -t두 UUID 유형 중 하나를 강제로 생성할 수 있습니다.

부록: OP는 댓글에 링크를 제공했습니다.Presto DB 설명서. 몇번의 검색 끝에 발견한이 관련 토론node.id속성이 실제로 UUID임을 분명히 언급합니다 .


댓글에 Frostschutz가 제공한 정보를 추가합니다.

uuidgen/ 메소드 대신 libuuidLinux 커널 자체에서 노출하는 인터페이스를 활용하여 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))- 왼쪽에 있는 두 개의 임의의 비트를 다음으로 대체합니다.10부분 정의에 따르면4.4RFC.

관련 정보