Estou usando o shell bash e gostaria de canalizar o fora do comando openssl rand -base64 1000
para o comando dd
como dd if={output of openssl} of="sample.txt bs=1G count=1
. Acho que posso usar variáveis, mas não tenho certeza da melhor maneira de fazê-lo. O motivo pelo qual gostaria de criar o arquivo é porque gostaria de um arquivo de 1 GB com texto aleatório.
88
/dev/urandom
gera um arquivo binário e não um arquivo de texto verdadeiro.dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt
.dd
lê 750.000.000 bytes/dev/urandom
e os canalizauuencode
.uuencode
codifica sua entrada em uma forma de codificação base64 (não necessariamente consistente com outros programas). Em outras palavras, isso converte dados binários em texto. Eu usei o 750M porque confiei na afirmação do grawity de que a codificação base64 expande os dados em 33%, portanto você precisa solicitar quantos dados binários desejar em seu arquivo de texto.dd: warning: partial read (33554431 bytes); suggest iflag=fullblock
que criará um arquivo truncado; portanto, adicione oiflag=fullblock
sinalizador e funcionará.Crie um arquivo de conteúdo aleatório de 1 GB.bin:
fonte
iflag=fullblock
foi a adição necessária comparar com outras respostas.Se você deseja EXATAMENTE 1 GB, poderá usar o seguinte:
openssl rand -out $ testfile -base64 792917038; truncar -s-1 $ testfile
O comando openssl torna um arquivo exatamente 1 byte muito grande. O comando truncar apara esse byte.
fonte
Experimente este script.
Esse script pode funcionar desde que você não se importe em usá-lo
/dev/random
.fonte
/dev/random
isso, a menos que haja uma boa razão para fazê-lo./dev/urandom
é muito mais barato.$var=(command)
não é uma sintaxe válida neste contexto.random=$(openssl rand -base64 1000)
. Embora eu questionasse sebash
permitiria atribuir um valor de gigabyte de comprimento a uma variável. E mesmo se você disserrandom=$(openssl rand -base64 1000)
, o subsequenteif=$random
não faz sentido.