さらに要求すると、ddは/ dev / randomから128バイトしかコピーしないのはなぜですか?


10

ddコマンドの出力を理解しようとしています。私は試した

dd if=/dev/zero of=/dev/null bs=512 count=1

そして得た(期待通り):

 1+0 records in
 1+0 records out
 512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s

しかし私が試したとき

dd if=/dev/random of=/dev/null bs=512 count=1

わかった

 0+1 records in
 0+1 records out
 128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s

なぜ128バイトしかコピーしないのですか?


/ dev / randomおよびurandomの詳細については、superuser.com /
questions

回答:


8

を使用する必要があります/dev/urandom、または「非ブロック化」ランダムソース。

/dev/random一種のエントロピープールを使用して、ビットソースのランダム性を高めます。このメソッドは、その時点でのエントロピープールの状態に基づいて返されるのと同じ数のランダムビット/バイトのみを返すため、ハードウェア乱数ジェネレーターが使用される場合、これは定数になることがあります。Linuxマンページから:

ジェネレーターは、エントロピープール内のノイズのビット数の推定値も保持します。このエントロピープールから乱数が作成されます。

/dev/urandomファイルには、限り、あなたは必要に番号を生成すること、であるとして内部プールを再利用し続けます。これの副作用 は、によって生成されるビットよりランダムではないため暗号化の目的には使用しないでください/dev/urandom/dev/random。詳細については、上記のマンページのリンクを参照してください。



3

読み取りでは、利用可能なバイト量/dev/randomのみが返されるため、ブロックサイズ1を指定する必要があります。この例では、ブロックサイズを512に設定し、最初の読み取り後に失敗します。

したがって、正確に512バイトを読み取る正しい引数は次のとおりです。

dd if=/dev/random of=filename bs=1 count=512

すべてのデータを生成するのに十分なエントロピーがシステムに存在するまで、コマンドがブロックすることに注意してください。それが機能する方法/dev/randomです。待ちたく/dev/urandomなく、エントロピーが少なくても問題ない場合は、代わりに使用してください。ほとんどの場合、使用すること/dev/urandomをお勧めします。


説明は+1ですが/dev/random、コマンドが完了するまでに数分かかることがあるため、バイト数が512に達すると、使用が事実上使用できなくなると言う必要があります。また、使用可能なバイトがない場合でもbs=512 count=1呼び出しブロックされているように見えますが、正しいですか?切り替えと値の代わりにを使用することです。すなわち、。bscountiflag=fullblockbs=512 count=1 iflag=fullblock
mklement0 2015

私見、この答えは@Breakthroughの答えにマージする必要があります。(それは私の問題に対する答えでしたが、ブレイクスルーはそうではありませんでした)。
スーパーボブ2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.