Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am using the bash shell and would like to pipe the out of the command openssl rand -base64 1000 to the command dd such as dd if={output of openssl} of="sample.txt bs=1G count=1. I think I can use variables but I am however unsure how best to do so. The reason I would like to create the file is because I would like a 1GB file with random text.

share|improve this question
up vote 68 down vote accepted

if= is not required, you can pipe something into dd instead:

something... | dd of=sample.txt bs=1G count=1

It wouldn't be useful here since openssl rand requires specifying the number of bytes anyway. So you don't actually need ddthis would work:

openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))

1 gigabyte is usually 230 bytes (though you can use 10**9 for 109 bytes instead). The * 3/4 part accounts for Base64 overhead, making the encoded output 1 GB.

Alternatively, you could use /dev/urandom, but it would be a little slower than OpenSSL:

dd if=/dev/urandom of=sample.txt bs=1G count=1

Personally, I would use bs=64M count=16 or similar:

dd if=/dev/urandom of=sample.txt bs=64M count=16
share|improve this answer
2  
I posted a question regarding compressing large files at superuser.com/questions/467697/… and was advised that using /dev/urandom generates a binary file and not a true text file. – PeanutsMonkey Sep 6 '12 at 19:10
1  
@PeanutsMonkey: Right; you would need something like dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt. – Scott Sep 6 '12 at 19:33
1  
@PeanutsMonkey: There's no single "real world scenario", some scenarios might be dealing with gigabytes of text, others – with gigabytes of JPEGs, or gigabytes of compiled software... If you want a lot of text, download a Wikipedia dump for example. – grawity Sep 6 '12 at 20:06
2  
@PeanutsMonkey: The dd reads 750,000,000 bytes from /dev/urandom and pipes them into uuencode. uuencode encodes its input into a form of base64 encoding (not necessarily consistent with other programs). In other words, this converts binary data to text. I used 750M because I trusted grawity's statement that base64 encoding expands data by 33⅓%, so you need to ask for ¾ as much binary data as you want in your text file. – Scott Sep 6 '12 at 20:07
1  
@leighmcc: FYI: using > redirection does not make the writes pass through bash – it is equivalent to having the program open the file directly. – grawity May 10 '13 at 14:03

Create a 1GB.bin random content file:

dd if=/dev/urandom of=1GB.bin bs=64M count=16 iflag=fullblock

share|improve this answer

Try this script.

#!/bin/bash
$random=(openssl rand -base64 1000)
dd if=$random of="sample.txt bs=1G count=1"

This script might work as long as you don't mind using /dev/random.

#!/bin/bash
dd if=/dev/random of="sample.txt bs=1G count=1"
share|improve this answer
5  
I wouldn't recommend wasting /dev/random on this unless there's a very good reason to do so. /dev/urandom is much cheaper. – Ansgar Wiechers Sep 6 '12 at 18:22
1  
Also, $var=(command) isn't valid syntax in this context. – grawity Sep 6 '12 at 18:58
    
@grawity - When you say it isn't valid, what do you mean? – PeanutsMonkey Sep 6 '12 at 19:08
    
I mean exactly that – it's incorrect. – grawity Sep 6 '12 at 19:22
3  
@grawity, @PeanutsMonkey: He made a typo; he meant random=$(openssl rand -base64 1000). Although I would question whether bash would let you assign a gigabyte-long value to a variable. And even if you do say random=$(openssl rand -base64 1000), the subsequent if=$random doesn't make sense. – Scott Sep 6 '12 at 19:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .