35

How can I use /dev/(u)random on Ubuntu or any *nix sistems?

I tried this but it says permission denied.
Note : I also tried as root.

/dev/(u)random
sudo /dev/(u)random
sudo -s; /dev/(u)random
  • 2
    Please notice that these commands should be used only, when you really need high quality random data, typically in order to create good passwords. Otherwise there are more light-weight alternatives, for example the shell environment 'variable' RANDOM to create random positive integer numbers: echo $RANDOM, and the program shuf to generate random permutations, for example play in random order from a playlist. – sudodus Apr 18 '18 at 20:31
59

It's a file like device, so you can do things like cat it or copy from it. For instance:

dd if=/dev/urandom of=~/urandom_test count=4 bs=1024

Creates a file containing 4K of random bytes.

cat /dev/urandom > ~/urandom_test2 

Will continue to write random bytes to that file until you hit Ctrl-C. Don't do this on a low performing system...

head -30 /dev/urandom > ~/urandom_test3

Will write 30 lines of random bytes

| improve this answer | |
  • 1
    Feel free to upvote then! – aychedee Sep 23 '12 at 19:36
  • 5
    I would if my rep > 15 – Caner Korkmaz Sep 23 '12 at 19:38
  • 1
    Note : Don't do cat /dev/urandom > ~/urandom_test2 on low-performance systems -> that freezes the system – Caner Korkmaz Sep 23 '12 at 19:44
  • 1
    Well.. that really depends on your definition of a line. My definition is bytes terminated by a \n. What's yours? head -30 /dev/urandom will give you 30 lines of random bytes. The length of those lines will certainly be random. Try running wc -l on your output file if you aren't convinced. – aychedee May 11 '15 at 12:37
  • 3
    Note that /dev/urandom is limited to 32 MiB per read() and dd will not retry to read more once /dev/urandom yields those 32 MiB, so you have to call dd with iflag=fullblock. See dd is producing a 32 MB random file instead of 1 GB – Sergiy Kolodyazhnyy Dec 28 '18 at 23:49
16

Get random bytes

If you need a certain number of random bytes, read that number of bytes from /dev/urandom.
It is a "special file" that is made to be like a file to read random numbers from.

Using cat to read from /dev/urandom is a bad idea, because it will try to read /dev/urandom to the end - but it does not end.

You can use head. But take care to read by byte, not by line - because lines would be randomly separated by random newline bytes.

So, to read 30 random bytes into a file random.bytes, use:

head -c 30 /dev/urandom > random.bytes

You can read from it as a normal user.

Leave alone /dev/random

Normally, you want to use /dev/urandom, not /dev/random.

The problem is that /dev/random is hard to use in the right way - and easy to use in a wrong way. Using it wrong works at first, but creates strange - even random - performance problems later. Sometimes.

When you use /dev/urandom, it makes use of /dev/random internally, taking care of the tricky parts.

| improve this answer | |
6

If you want to just read it with recognized numbers you can do

od -d /dev/random
| improve this answer | |
1

I personally use this for generating tokens:

dd if=/dev/urandom  count=1 bs=128 | sha512sum
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.