Estou tentando entender a saída do dd
comando. eu tentei
dd if=/dev/zero of=/dev/null bs=512 count=1
e obteve (como esperado):
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s
No entanto, quando eu tentei
dd if=/dev/random of=/dev/null bs=512 count=1
Eu tenho
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s
Por que ele está apenas copiando 128 bytes?
linux
command-line
fo_x86
fonte
fonte
Respostas:
Você precisa usar
/dev/urandom
ou a fonte aleatória "desbloqueando"./dev/random
usa um tipo de pool de entropia para aumentar a aleatoriedade da fonte de bits. Esse método retornará apenas quantos bits / bytes aleatórios puderem ser retornados com base no estado do pool de entropia no momento; portanto, se um gerador de números aleatórios de hardware for usado, isso às vezes pode ser uma constante. Na página de manual do Linux :O
/dev/urandom
arquivo continua reutilizando o pool interno para gerar um número pelo tempo que você precisar. O efeito colateral disso é: não use/dev/urandom
para fins criptográficos , pois é menos aleatório do que os bits produzidos por/dev/random
. Consulte o link da página de manual acima para obter detalhes.fonte
Como a leitura
/dev/random
retorna apenas a quantidade de bytes disponível, você deve especificar o tamanho do bloco 1 . No seu exemplo, você define o tamanho do bloco como 512, que falha após a primeira leitura.Portanto, os argumentos corretos que lê exatamente 512 bytes são:
Observe que o comando será bloqueado até que haja entropia suficiente no sistema para gerar todos os dados. É assim que
/dev/random
funciona. Se você não quiser esperar e estiver bem com menos entropia, use/dev/urandom
. Na grande maioria dos casos, o uso/dev/urandom
é preferido.fonte
/dev/random
se torna praticamente inutilizável, porque o comando pode levar muitos minutos para ser concluído. Além disso, mesmobs=512 count=1
que pareça que a chamada ainda bloqueia se não houver bytes disponíveis, correto? Uma alternativa para comutaçãobs
ecount
valores é usariflag=fullblock
; ou seja,bs=512 count=1 iflag=fullblock
.