Como posso preencher um arquivo com dados aleatórios?

124

Como posso criar um novo arquivo e preenchê-lo com dados aleatórios de 1 Gigabyte? Eu preciso disso para testar algum software.

Eu preferiria usar /dev/randomou /dev/urandom.

Stefan Lasiewski
fonte
74
Abra vicom vi -w randomfilee pergunte a alguém que nunca viu visair do programa. ;)
Caractere curinga
1
Acabei de gostar de comentar acima do post no Facebook! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

Respostas:

171

Na maioria das unidades:

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

Se você headnão entender o Gsufixo, poderá especificar o tamanho em bytes:

head -c 1073741824 </dev/urandom >myfile

Se você headnão entende a -copção (é comum, mas não POSIX; você provavelmente possui o OpenBSD):

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

Não use /dev/randomno Linux, use /dev/urandom.

Gilles
fonte
1
Pelo que vale, headnão entende -cna minha máquina Solaris 10.
rahmu
2
Interessante que headpode ler /dev/urandom, mas tailnão pode.
Stefan Lasiewski 31 /
22
O @StefanLasiewski tailtenta primeiro chegar ao final do arquivo de entrada, o que leva uma eternidade (literalmente).
Gilles
Ah, como 'tail / dev / infinito', se houvesse esse dispositivo.
Stefan Lasiewski 31 /
3
@StefanLasiewski Você também tem /dev/zero, se não gosta de variedade.
Gilles
35

Supondo que dados pseudo-aleatórios sejam suficientes, dd if=/dev/urandom of=target-file bs=1M count=1000fará o que você deseja.

O dd (1) lê blocos de dados de um arquivo de entrada e os grava em um arquivo de saída. A linguagem da linha de comando é um pouco peculiar, mas é uma daquelas ferramentas realmente úteis que valem a pena dominar o básico.

Nesse caso, ifé o arquivo de entrada, ofo arquivo de saída, o bs"tamanho do bloco" - e eu usei a extensão GNU para definir o tamanho mais convenientemente. (Você também pode usar 1048576 se ddnão tiver extensão GNU.) countÉ o número de blocos para ler ife gravar of.

/dev/urandomé uma escolha melhor do que /dev/randomporque, no Linux, ele voltará a fortes dados pseudo-aleatórios em vez de bloquear quando os dados genuinamente aleatórios estiverem esgotados.

Você também pode considerar http://www.random.org/ como outro caminho para obter alguns dados aleatórios sem precisar gerá-los.

Daniel Pittman
fonte
3
Uma observação - especificações da unidade, como 1Mnão estão disponíveis em todas as ddvariantes padrão . Se sua versão do ddé afetada, use bs=1048576.
Chris Baixo
4
O comando de exemplo criará um arquivo de contagem 1.000.000 de blocos, cada um com tamanho de 1 MB. Isso equivale a 1 TB (1M x 1MB), não 1 GB (que seria 1K x 1MB). Como um aparte, até certo ponto, aumentar o tamanho do bloco e reduzir a contagem de blocos tende a produzir melhor rendimento para uma determinada quantidade de dados de saída.
um CVn
2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Usado para gerar 5 MB de dados aleatórios de caracteres. Se você precisar de tamanho diferente, altere o -cvalor do cabeçalho, altere o nome do arquivo externo, execute e aguarde até a execução ser concluída.

James Jithin
fonte