Create unique random numbers (UUIDs) in bash

25,959

Solution 1

On Linux, the util-linux/util-linux-ng package offers a command to generate UUIDs: uuidgen.

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

To quote the manual:

The uuidgen program creates (and prints) a new universally unique identifier (UUID) using the libuuid(3) library. The new UUID can reasonably be considered unique among all UUIDs created on the local system, and among UUIDs created on other systems in the past and in the future.

There are two types of UUIDs which uuidgen can generate: time-based UUIDs and random-based UUIDs. By default uuidgen will generate a random-based UUID if a high-quality random number generator is present. Otherwise, it will choose a time-based UUID. It is possible to force the generation of one of these two UUID types by using the -r or -t options.

Addendum: The OP had provided a link in the comments to the documentation for Presto DB. After a bit of searching, I found this related discussion where it is explicitly mentioned that the node.id property is indeed a UUID.


Adding the information provided by frostschutz in a comment:

As an alternative to the uuidgen/libuuid approach, you can make use of an interface exposed by the Linux kernel itself to generate UUIDs:

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

The UUID is re-generated on each request.

Solution 2

On a raspberry PI, and probably others, the command is simply:

uuid

It should be preinstalled, but if not, this should do it: sudo apt install uuid

Share:
25,959

Related videos on Youtube

yael
Author by

yael

Updated on September 18, 2022

Comments

  • yael
    yael over 1 year

    I want to create random unique numbers (UUIDs) as the following

    node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
    

    First I tried this

    $ rndnum=` echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM`
    
    $ echo $rndnum
    30380-echo 21875-echo 14791-echo 32193-echo 11503
    

    What is the right way to create the following (where f is any number)?

    ffffffff-ffff-ffff-ffff-ffffffffffff
    
    • JdeBP
      JdeBP about 5 years
      Random numbers are not necessarily unique.
    • yael
      yael about 5 years
      yes , seems , this number is from presto configuration ( prestodb.github.io/docs/current/installation/deployment.html )
    • Kusalananda
      Kusalananda about 5 years
      Note that UUIDs are not just random numbers stringed together.
    • Philip Couling
      Philip Couling about 5 years
      I've spent too many hours debugging scripts which assume "unlikely" is the same as "won't happen". If this is supposed to be a UUID then please do use an actual UUID, there are strict constraints on the way they are generated. If you could elaborate the reason you need this we might be able to help more.
  • Kusalananda
    Kusalananda about 5 years
    The final touch would be printf 'node.id=%s\n' "$( uuidgen )"
  • yael
    yael about 5 years
    well done , this is very good answer
  • frostschutz
    frostschutz about 5 years
    possible fallback if uuidgen is unavailable: cat /proc/sys/kernel/random/uuid
  • mosvy
    mosvy about 5 years
    @frostschutz that's much better -- that should've been the answer
  • Haxiel
    Haxiel about 5 years
    @frostschutz I have added the information on this kernel interface to my answer. Thank you.
  • Illegal Operator
    Illegal Operator about 4 years
    You saved me all the headaches, thanks.
  • Philip Couling
    Philip Couling over 3 years
    I think you perhaps mean Raspberry PI OS (AKA Raspbian). Remember that a Raspberry Pi can run many different operating systems.