목차

, , ,

uuidgen

uuidgen은 새 UUID(Universally Unique Identifier)를 생성해 stdout에 출력하는 command-line 도구다. Linux의 util-linux 구현은 libuuid를 사용하며 random, time-based, name-based UUID를 지원한다.

Summary

Installation

Debian / Ubuntu

uuidgenuuid-runtime package에 포함된다. 이 package에는 time-based UUID의 고속·동시 생성을 보조하는 uuidd daemon도 함께 포함될 수 있다.

sudo apt update
sudo apt install uuid-runtime

RHEL / Fedora

Fedora에서는 util-linux package가 uuidgen을 제공한다.

sudo dnf install util-linux

macOS

macOS에는 별도 설치 없이 사용할 수 있는 BSD 계열 /usr/bin/uuidgen이 기본 제공되지만 util-linux 구현과 option이 다르다. util-linux 동작이 필요하면 Homebrew formula를 설치할 수 있다. 이 formula는 keg-only이므로 명시적인 경로로 실행한다.

brew install util-linux
"$(brew --prefix util-linux)/bin/uuidgen" --version

Windows

util-linux project는 공식 native Windows 또는 WinGet package를 제공하지 않는다. PowerShell에서는 New-Guid를 사용하고, util-linux와 같은 CLI가 필요하면 WSL distribution 안에서 uuid-runtime 또는 util-linux를 설치한다.

New-Guid

설치 확인

util-linux 구현은 다음과 같이 version과 실행 경로를 확인한다. macOS 기본 구현은 –version을 지원하지 않는다.

command -v uuidgen
uuidgen --version

Usage

uuidgen [OPTIONS]

Options

Examples

기본 random UUID 생성

uuidgen
uuidgen --random

argument 없는 실행은 일반적인 일회성 식별자 생성에 적합하다. 출력 끝에는 newline이 포함된다.

shell 변수에 저장

request_id=$(uuidgen) || exit 1
printf 'request_id=%s\n' "$request_id"

같은 입력에서 같은 UUID 생성

uuidgen --sha1 --namespace @dns --name 'www.example.com'
uuidgen --sha1 --namespace @url --name 'https://www.example.com/resource'

name-based UUID는 입력이 같으면 결과도 같다. 이는 password hashing이나 secret 생성 방식이 아니다.

여러 UUID 생성

최신 util-linux에서는 –count를 사용할 수 있다.

uuidgen --random --count 5

호환성이 더 중요하거나 –count를 지원하지 않는 구현에서는 shell loop를 사용한다.

for _ in 1 2 3 4 5; do
    uuidgen --random || exit 1
done

시간순 정렬 가능한 UUID 생성

최신 util-linux에서 version 7 UUID를 생성한다.

uuidgen --time-v7
–time, –time-v6, –time-v7, –count의 지원 여부는 설치된 util-linux version에 따라 다르다. 배포 script에서 사용하기 전에 uuidgen –help로 확인한다.

Troubleshooting

unrecognized option

설치된 util-linux가 오래되었거나 macOS 기본 uuidgen을 실행 중일 수 있다. 실행 경로, version, help를 확인한다.

command -v uuidgen
uuidgen --version
uuidgen --help

macOS에서 Homebrew util-linux를 설치했다면 keg-only 경로의 binary를 직접 실행한다.

"$(brew --prefix util-linux)/bin/uuidgen" --time-v7

같은 name인데 결과가 다름

–namespace, –name, hash algorithm이 모두 같아야 같은 name-based UUID가 생성된다. @dns@url은 서로 다른 namespace다.

output 검증

util-linux의 uuidparse가 설치되어 있으면 UUID의 variant, type, timestamp 정보를 확인할 수 있다.

uuidgen --random | uuidparse

Compatibility

Help

기존 page에 기록된 version 미상의 help와 현재 로컬 환경에서 확인한 util-linux 2.32.1 출력을 각각 보존한다. 최신 version의 –time-v6, –time-v7, –count는 아래 출력에 없을 수 있다.

기존 page의 uuidgen --help 기록 (version 미상)

uuidgen --help (util-linux 2.32.1)

See Also

History