How do I create a 1GB random file in Linux?
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.
Solution 1:
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 dd
– this 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
Solution 2:
Create a 1GB.bin random content file:
dd if=/dev/urandom of=1GB.bin bs=64M count=16 iflag=fullblock
Solution 3:
Since, your goal is to create a 1GB file with random content, you could also use yes
command instead of dd
:
yes [text or string] | head -c [size of file] > [name of file]
Sample usage:
yes this is test file | head -c 100KB > test.file
Solution 4:
If you want EXACTLY 1GB, then you can use the following:
openssl rand -out $testfile -base64 792917038; truncate -s-1 $testfile
The openssl
command makes a file exactly 1 byte too big. The truncate command trims that byte off.
Solution 5:
If you just need a somewhat random file which is not used for security related things, like benchmarking something, then the following will be significantly faster:
truncate --size 1G foo
shred --iterations 1 foo
It's also more convenient because you can simply specify the size directly.