this post was submitted on 24 May 2025
112 points (97.5% liked)

Linux

7659 readers
274 users here now

A community for everything relating to the GNU/Linux operating system

Also check out:

Original icon base courtesy of lewing@isc.tamu.edu and The GIMP

founded 2 years ago
MODERATORS
 

That's all. I just found this in a random script. Generates a random UUID every time it's called. I didn't know.

Of course I can also use uuidgen or pipe /dev/(u)random into something to get a random alphanumeric string - but this is built right into the kernel!

In /proc/sys/kernel/random/, there's also boot_id which ~~seems to do the same~~ is static, and some tweakable parameters.

❤️🐧

all 28 comments
sorted by: hot top controversial new old
[–] Redjard@lemmy.dbzer0.com 15 points 2 weeks ago (2 children)

boot_id seems to be static, probably set at boot.
So don't use it for a random uuid.

[–] nibbler@discuss.tchncs.de 4 points 1 week ago

it's fine as long as you reboot before each call

[–] A_norny_mousse@feddit.org 1 points 1 week ago

Oops you’re correct. Editing OP.

[–] bleistift2@sopuli.xyz 12 points 2 weeks ago (1 children)

That’s what you get when you define a file system as “a system that names things”.

[–] timhh@programming.dev 11 points 2 weeks ago (1 children)

Yeah but please don't actually use this. Use a proper UUID library that works cross-platform and lets you choose the UUID type and can be seeded etc.

[–] A_norny_mousse@feddit.org 3 points 1 week ago* (last edited 1 week ago) (1 children)

Can you explain?
Use for what?
Also it is being seeded, according to the file urandom_min_reseed_secs which is also writeable. Here are the other files:

-r--r--r-- 1 root root 0 25. 5. 11:13 boot_id
-r--r--r-- 1 root root 0 25. 5. 11:19 entropy_avail
-r--r--r-- 1 root root 0 25. 5. 11:19 poolsize
-rw-r--r-- 1 root root 0 25. 5. 11:19 urandom_min_reseed_secs
-r--r--r-- 1 root root 0 25. 5. 11:19 uuid
-rw-r--r-- 1 root root 0 25. 5. 11:19 write_wakeup_threshold

edit: the type is always DCE/random

[–] timhh@programming.dev 1 points 4 days ago

There are a few reasons you shouldn't use this in proper programs. If you're the sort of person that thinks hacky Bash scripts are acceptable then sure, use it there.

  1. It isn't cross-platform. Not available on Mac/Windows.
  2. There are several types of UUID with different properties. This doesn't let you choose which one to use.
  3. To make programs deterministic (really useful for testing!) you want to be able to seed all their randomness with a specific seed so that it generates the same UUID each time you run it. (Obviously in normal use you would use a random seed.)
[–] clif@lemmy.world 5 points 2 weeks ago

This is awesome. Thank you

[–] lnxtx@feddit.nl 5 points 1 week ago* (last edited 1 week ago)

Interesting,
non-scientific speed test:

kernel 6.1.0-37-amd64:

$ time for i in $(seq 1 100000); do cat /proc/sys/kernel/random/uuid > /dev/null; done

real    3m53,388s
user    1m37,366s
sys     2m13,847s

$ for i in $(seq 1 100000); do cat /proc/sys/kernel/random/uuid ; done | wc -l
100000

vs. uuid 1.6.2-1.5+b11:

$ time for i in $(seq 1 100000); do uuid -v4 > /dev/null; done

real    4m44,854s
user    1m37,867s
sys     3m4,414s

$ for i in $(seq 1 100000); do uuid -v4 ; done | wc -l
100000

EDIT: I'm blind (wrong result).

[–] pelya@lemmy.world 4 points 2 weeks ago

Works in Termux on Android

[–] kionite231@lemmy.ca 4 points 2 weeks ago

Thank you so much for sharing this!

[–] sorrybookbroke@sh.itjust.works 3 points 1 week ago (1 children)

My guy you've just given me the same sense of wonder you got yourself. Fuck man I love linux

[–] A_norny_mousse@feddit.org 3 points 1 week ago

When writing shell scripts that run in a loop I always look for files in /sys or /proc before using standard utilities. There's a lot

  • /proc/mounts instead of the mount command
  • /sys/class/..../backlight to influence screen brightness
  • /sys/class/net to get info and stats about interfaces
  • ....

Someone should make a comprehensive list I guess.

[–] Hamartiogonic@sopuli.xyz -1 points 2 weeks ago (1 children)

See also: /dev/null

It’s basically a black hole where you can throw anything.

[–] victorz@lemmy.world 9 points 2 weeks ago* (last edited 1 week ago) (4 children)
cat /proc/sys/kernel/random/uuid > /dev/null
[–] A_norny_mousse@feddit.org 3 points 1 week ago* (last edited 1 week ago)

while :; do cat /proc/sys/kernel/random/uuid > /dev/null; done

edit: on all cores for maximum "efficiency"

[–] henfredemars@infosec.pub 3 points 1 week ago (1 children)

The information will be evenly distributed upon its surface and some believe one day it will be be radiated back out into the rest of the system.

[–] Hamartiogonic@sopuli.xyz 2 points 1 week ago

That's a horrifying concept. Better not think about it.

[–] Hamartiogonic@sopuli.xyz 1 points 1 week ago (3 children)

That reminds me of the CPU stress test I ran many years ago.

dd if=/dev/random of=/dev/null

If you have 8 cores, just open 8 terminals, and run that code in each of them.

[–] YerbaYerba@lemm.ee 4 points 1 week ago

/dev/urandom should stress the CPU more. /dev/random can be entropy limited

[–] lime@feddit.nu 3 points 1 week ago* (last edited 1 week ago) (1 children)
for i in {1..n}  # where n == number of cores
do
  dd if=/dev/urandom of=/dev/null &
done

# to stop:
jobs -p | xargs kill
[–] Hamartiogonic@sopuli.xyz 1 points 1 week ago (1 children)

Oh yeah. This looks like a much better way to do it. My solution is pretty bare bones by comparison.

[–] lime@feddit.nu 1 points 1 week ago

the advantage of yours is that you can actually see the performance number afterwards.

[–] victorz@lemmy.world 2 points 1 week ago (1 children)

Can you guarantee that each process will run on its own core?

[–] Hamartiogonic@sopuli.xyz 2 points 1 week ago

Absolutely not, quite the opposite actually. However, the end result is close to 100% CPU load, which is good enough for some purposes. Let’s say you want to test the performance of your CPU cooler, or overclock stability, this should good enough. There are also dedicated tools for people with more advanced needs.