Ich versuche die Ausgabe des dd
Befehls zu verstehen . Ich habe es versucht
dd if=/dev/zero of=/dev/null bs=512 count=1
und bekam (wie erwartet):
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s
Als ich es jedoch versuchte
dd if=/dev/random of=/dev/null bs=512 count=1
ich habe
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s
Warum werden nur 128 Bytes kopiert?
linux
command-line
fo_x86
quelle
quelle
Antworten:
Sie müssen
/dev/urandom
oder die "Entsperrung" zufällige Quelle verwenden./dev/random
verwendet eine Art Entropiepool, um die Zufälligkeit der Bitquelle zu erhöhen. Diese Methode gibt nur so viele zufällige Bits / Bytes zurück, wie je nach dem aktuellen Zustand des Entropiepools zurückgegeben werden können. Wenn also ein Hardware-Zufallszahlengenerator verwendet wird, kann dies manchmal eine Konstante sein. Aus der Linux-Manpage :Die
/dev/urandom
Datei verwendet den internen Pool so, wie er ist, um eine Zahl zu generieren, so lange Sie dies benötigen. Der Nebeneffekt davon ist: Nicht/dev/urandom
für kryptografische Zwecke verwenden , da es weniger zufällig ist als die Bits, die von erzeugt werden/dev/random
. Weitere Informationen finden Sie oben auf der Manpage.quelle
Da beim Lesen
/dev/random
nur die Anzahl der verfügbaren Bytes zurückgegeben wird, müssen Sie die Blockgröße 1 angeben . In Ihrem Beispiel setzen Sie die Blockgröße auf 512, was nach dem ersten Lesen fehlschlägt.Daher lauten die richtigen Argumente, die genau 512 Byte lesen, wie folgt:
Beachten Sie, dass der Befehl blockiert wird, bis im System genügend Entropie vorhanden ist, um alle Daten zu generieren. So
/dev/random
funktioniert es. Wenn Sie nicht warten möchten und mit weniger Entropie zufrieden sind, verwenden Sie/dev/urandom
stattdessen. In den allermeisten Fällen wird die Verwendung/dev/urandom
bevorzugt.quelle
/dev/random
praktisch unbrauchbar wird, da der Befehl viele Minuten dauern kann, bis er beendet ist. Auch wennbs=512 count=1
es den Anschein hat, dass der Aufruf immer noch blockiert, wenn überhaupt keine Bytes verfügbar sind, richtig? Eine Alternative zu Switchingbs
undcount
Werten ist die Verwendung voniflag=fullblock
; dhbs=512 count=1 iflag=fullblock
.