Estoy tratando de entender la salida del dd
comando. Lo intenté
dd if=/dev/zero of=/dev/null bs=512 count=1
y obtuve (como se esperaba):
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s
Sin embargo cuando lo intenté
dd if=/dev/random of=/dev/null bs=512 count=1
tengo
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s
¿Por qué solo está copiando 128 bytes?
linux
command-line
fo_x86
fuente
fuente
Respuestas:
Debe usar
/dev/urandom
, o la fuente aleatoria "desbloqueo"./dev/random
usa un tipo de grupo de entropía para aumentar la aleatoriedad de la fuente de bits. Este método solo devolverá tantos bits / bytes aleatorios como se pueda devolver en función del estado del grupo de entropía en ese momento, por lo que si se usa un generador de números aleatorios de hardware, esto a veces puede ser una constante. Desde la página de manual de Linux :El
/dev/urandom
archivo sigue reutilizando el grupo interno tal como está para generar un número todo el tiempo que lo necesite. El efecto secundario de esto es: no utilizar/dev/urandom
con fines criptográficos , ya que es menos aleatorio que los bits producidos por/dev/random
. Vea el enlace de la página de manual arriba para más detalles.fuente
Como la lectura
/dev/random
solo devuelve la cantidad de bytes disponibles, debe especificar el tamaño de bloque 1 . En su ejemplo, establece el tamaño de bloque en 512, que falla después de la primera lectura.Por lo tanto, los argumentos correctos que leen exactamente 512 bytes son:
Tenga en cuenta que el comando se bloqueará hasta que haya suficiente entropía en el sistema para generar todos los datos. Así es como
/dev/random
funciona. Si no quiere esperar y está bien con menos entropía, use/dev/urandom
en su lugar. En la gran mayoría de los casos/dev/urandom
se prefiere el uso.fuente
/dev/random
vuelve prácticamente inutilizable, porque el comando puede tardar muchos minutos en finalizar. Además, inclusobs=512 count=1
si parece que la llamada sigue bloqueándose si no hay bytes disponibles, ¿correcto? Una alternativa al cambiobs
y loscount
valores es usariflag=fullblock
; es decir,bs=512 count=1 iflag=fullblock
.