How can I populate a file with random data?

How can I create a new file and fill it with 1 Gigabyte worth of random data? I need this to test some software.

I would prefer to use /dev/random or /dev/urandom.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

On most unices:

head -c 1G </dev/urandom >myfile

If your head doesn’t understand the G suffix you can specify the size in bytes:

head -c 1073741824 </dev/urandom >myfile

If your head doesn’t understand the -c option (it’s common but not POSIX; you probably have OpenBSD):

dd bs=1024 count=1048576 </dev/urandom >myfile

Do not use /dev/random on Linux, use /dev/urandom.

Method 2

Assuming that pseudo-random data is sufficient, dd if=/dev/urandom of=target-file bs=1M count=1000 will do what you want.

dd(1) will read blocks of data from an input file and write them to an output file. The command line language is a little quirky, but it is one of those really useful tools worth mastering the basics of.

In this case if is input file, of is output file, bs is “block size” – and I used the GNU extension to set the size more conveniently. (You can also use 1048576 if your dd doesn’t have GNU extension.) count is the number of blocks to read from if and write to of.

/dev/urandom is a better choice than /dev/random becuase, on Linux, it will fall back to strong pseudo-random data rather than blocking when genuinely random data is exhausted.

You may also want to look at http://www.random.org/ as another path to getting some random data without having to generate it yourself.

Method 3

An alternative to using /dev/random/ and/or /dev/urandom with an excellent Cryptographically Secure PseudoRandom Number Generator (CSPRNG) is given by openssl. You can even choose the algorithm and encrypting method in such rare cases that that is needed:

size=$( echo 1G | numfmt --from=iec )         # 1 G ==> 1073741824

openssl rand -out myfile "$size"

If you need base64:

openssl rand -base64 -out myfile "$size"

Read man rand for the details.

Method 4

while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Used this to generate 5MB random character data. If you need different size, change the -c value of head, change the outfile name, execute and wait until the execution completes.

Method 5

The solution doesn’t use random but I use man pages to create sizable data. This does not however guarantee the max size so we might have to loop through a few cats to get the desired size,

man curl > /tmp/man-curl

Or if the size required is larger,

for i in {1..10}; do man curl >> /tmp/man-curl; done

Method 6

The UNIX tool jot can do exactly that. No need to pipe data from /dev/urandom into a file with dd.

jot -r -c $FILESIZE > $FILE

The flag -r generates random data based on arc4random(3), -c generates a char based on the ASCII table. Other data can be specified based on printf format types with the -w flag.

By default jot returns to stdout.


Edit:

Another use case of jot could be to generate random passwords:

$ jot -rcs '''' 128 33 126
wFv/Fb7F}iO'|!cGy>?8yyez2$f,vy5vYqa;?s$-wBlVU^QX0|y~M.VeRq7}Jh!l/0'CcveuLTL][email protected]_yV#P)h8VZA~,s{|69P{YwlL?;U{_yC3$m*:H2V66RpdJ^
$ jot -rcs '''' 128 33 126
X`&kh3[Z2'ej)w`7z'[email protected]^[email protected]/iu)&g1|Y}%8;r>o>e5$UcyX]Q([email protected]!<}CqI1Ff],7#;kb!GpZ^Ai85NaA,ya|YF+EuH]{FUgC0G7;


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x