2012-09-06 18:03:06 +0000 2012-09-06 18:03:06 +0000
91
91

Como posso criar um ficheiro aleatório de 1GB no Linux?

Estou a utilizar a shell bash e gostaria de canalizar o comando openssl rand -base64 1000 para o comando dd, tal como o dd if={output of openssl} of="sample.txt bs=1G count=1. Penso que posso usar variáveis, mas não tenho a certeza da melhor forma de o fazer. A razão pela qual gostaria de criar o ficheiro é porque gostaria de um ficheiro de 1GB com texto aleatório.

Respostas (4)

139
139
139
2012-09-06 18:17:14 +0000

if= não é necessário, pode canalizar algo para dd:

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

Não seria útil aqui uma vez que openssl rand requer a especificação do número de bytes de qualquer forma. Assim, não precisa de dd - this would work:

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

1 gigabyte é normalmente 230 bytes (embora possa usar 10**9 para 109 bytes em vez disso). A parte * 3/4 é responsável pelo overhead Base64, tornando a saída encoded 1 GB.

Em alternativa, poderia usar /dev/urandom, mas seria um pouco mais lento que OpenSSL:

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

Pessoalmente, eu usaria bs=64M count=16 ou similar:

dd if=/dev/urandom of=sample.txt bs=64M count=16
26
26
26
2015-05-21 14:52:41 +0000

Criar um ficheiro de conteúdo aleatório de 1GB.bin:

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

2
2
2
2017-07-06 21:48:13 +0000

Se pretende EXATAMENTE 1GB, então pode usar o seguinte:

openssl rand -out $testfile -base64 792917038; truncado -s-1 $testfile

O comando openssl torna um ficheiro exactamente 1 byte demasiado grande. O comando truncado apaga esse byte.

-1
-1
-1
2012-09-06 18:12:03 +0000

Experimente este guião.

#!/bin/bash
openssl rand -base64 1000 | dd of=sample.txt bs=1G count=1

Este guião pode funcionar desde que não se importe de usar /dev/random.

#!/bin/bash
dd if=/dev/random of="sample.txt bs=1G count=1"