/ dev / randomから読み取っても、データは生成されません

アーロンJラング|

私はよくコマンドを使います

cat /dev/urandom | strings --bytes 1 | tr -d '\n\t ' | head --bytes 32

疑似ランダムパスワードを生成します。これはでは機能しません/dev/random

具体的には

  • cat /dev/urandom | strings --bytes 1 | tr -d '\n\t ' 出力を生成します
  • cat /dev/random | strings --bytes 1 出力を生成します
  • cat /dev/random | strings --bytes 1 | tr -d '\n\t ' 出力を生成しません

注意:使用/dev/randomする場合、エントロピーを生成するために、マウスを小刻みに動かすか、キー(Ctrl、Shiftなど)を押す必要がある場合があります。

最後の例が機能しないのはなぜですか?ないtrことを大きな内部バッファのいくつかの種類を持って/dev/urandomすぐに塗りつぶししかしが/dev/randomないのですか?

PS私はCentOS6.5を使用しています

cat /proc/version
Linux version 2.6.32-431.3.1.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Jan 3 21:39:27 UTC 2014
ステファン・チャゼラス

最終的にはそうなるでしょう。

に:

cat /dev/random | strings --bytes 1 | tr -d '\n\t '

cat バッファリングすることはありませんが、ここで連結するものがないため、とにかく不要です。

< /dev/random strings --bytes 1 | tr -d '\n\t '

stringsただし、その出力はもはやないため、端末は、出力が端末に送られるときに、ラインではなくブロック(4または8kBなど)によって出力をバッファリングします

したがって、出力する4kB相当の文字が蓄積されたときにのみ、stdoutへの書き込みが開始されます。これに/dev/randomはしばらく時間がかかります。

tr出力は端末に送られるため(端末のシェルプロンプトで実行している場合)、出力は行ごとにバッファリングされます。を削除しているため\n、書き込む行が完全になることはありません。代わりに、ブロック全体が蓄積されるとすぐに書き込みます(出力が端末に送信されない場合など)。

したがって、8kB(2ブロックはおそらくはるかに多い)のデータを書き込むのに十分な量を読み取るtrまで、何も書き込まない可能性があります(最初のブロックには改行文字、タブ文字、またはスペース文字が含まれる可能性があるため)。strings/dev/random

私がこれを試しているこのシステムでは、/dev/random(の12MiBとは対照的に/dev/urandomから1秒あたり平均3バイトを取得できるため、最良のシナリオ(からの最初の4096バイト/dev/randomはすべて印刷可能なものです)では、 22分前に話しているとtr何かが出力され始めます。しかし、それは数時間になる可能性が高いです(簡単なテストでは、strings1〜2ブロックの読み取りごとにブロック書き込むことがわかり、出力ブロックには改行文字の約30%が含まれているため、読み取る必要があると思います少なくとも3ブロック前にtrは、出力する4096文字があります)。

これを回避するには、次のようにします。

< /dev/random stdbuf -o0 strings --bytes 1 | stdbuf -o0 tr -d '\n\t '

stdbuf LD_PRELOADトリックを介してコマンドのstdioバッファリングを変更するGNUコマンド(一部のBSDにもあります)です。

の代わりにstringstr -cd '[:graph:]'タブ、改行、スペースを除外するを使用できることに注意してください

CUTF-8文字で将来起こりうる驚きを避けるために、ロケールもに修正することをお勧めします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

/ dev / randomから読み取っても、データは生成されません

分類Dev

/ dev / ttyUSB0からシリアルデータを読み取れません

分類Dev

/ dev / rfcommから読み取ることができません

分類Dev

/ dev / iio:deviceXのLSM330からデータを読み取る方法は?

分類Dev

/ dev / sdcは読み取り専用で開かれているため、書き込めません

分類Dev

suloginは/ dev / tty1権限を読み取ることができません拒否されました

分類Dev

データセットerrnoの/ devソースから正常に読み取るのはなぜですか?

分類Dev

/ dev / randomからの読み取りがブロックされるかどうかを確認する方法

分類Dev

/ dev / randomからの読み取りがブロックされるかどうかを確認する方法

分類Dev

C- / dev / urandomからuint64_t変数にデータを読み取る方法は?

分類Dev

/ dev / pts / 5から読み取り、/ dev / pts / 6に出力します

分類Dev

symfonyが「routing_dev.ym」の正しいパスを読み取っていません

分類Dev

Keychain Xcode9シミュレータから読み取っても何も返されません

分類Dev

/ dev / random、/ dev / urandomを使用してランダムデータを生成する

分類Dev

Google AppEngineのdev_appserver.pyによって生成されたローカルデータを削除します

分類Dev

読み取りがnullによって行われる場合、正確には `</ dev / null`とは何ですか?

分類Dev

undefinedのプロパティ「search」を読み取れません-webpack-dev-server

分類Dev

致命的:「https://[email protected]」のパスワードを読み取れませんでした:ターミナルプロンプトが無効になっています

分類Dev

ルート権限なしで/ dev / inputデバイスから読み取る

分類Dev

マウント:/ dev / mapper / centos-home:スーパーブロックを読み取れません

分類Dev

/ dev / randomに書き込むと、/ dev / randomからの並列読み取りが速くならないのはなぜですか?

分類Dev

/ dev / randomに書き込むと、/ dev / randomからの並列読み取りが速くならないのはなぜですか?

分類Dev

4000x「wpa_supplicant [1885]:ランダム:/ dev / randomから読み取ることができません:リソースが一時的に利用できません」起動時のログメッセージ

分類Dev

/dev/mapper/veracrypt1 からデータを読み取る際の I/O エラー

分類Dev

Firestoreから読み取っても何も返されません

分類Dev

「cat / dev / random」対「tail -f / dev / random」

分類Dev

ibm-eventstreams-devはIBMCloudPrivateにデプロイされません

分類Dev

webpack-dev-serverがHtmlWebPackPluginによって生成されたindex.htmlを提供していません

分類Dev

エコーまたは印刷/ dev / stdin / dev / stdout / dev / stderr

Related 関連記事

  1. 1

    / dev / randomから読み取っても、データは生成されません

  2. 2

    / dev / ttyUSB0からシリアルデータを読み取れません

  3. 3

    / dev / rfcommから読み取ることができません

  4. 4

    / dev / iio:deviceXのLSM330からデータを読み取る方法は?

  5. 5

    / dev / sdcは読み取り専用で開かれているため、書き込めません

  6. 6

    suloginは/ dev / tty1権限を読み取ることができません拒否されました

  7. 7

    データセットerrnoの/ devソースから正常に読み取るのはなぜですか?

  8. 8

    / dev / randomからの読み取りがブロックされるかどうかを確認する方法

  9. 9

    / dev / randomからの読み取りがブロックされるかどうかを確認する方法

  10. 10

    C- / dev / urandomからuint64_t変数にデータを読み取る方法は?

  11. 11

    / dev / pts / 5から読み取り、/ dev / pts / 6に出力します

  12. 12

    symfonyが「routing_dev.ym」の正しいパスを読み取っていません

  13. 13

    Keychain Xcode9シミュレータから読み取っても何も返されません

  14. 14

    / dev / random、/ dev / urandomを使用してランダムデータを生成する

  15. 15

    Google AppEngineのdev_appserver.pyによって生成されたローカルデータを削除します

  16. 16

    読み取りがnullによって行われる場合、正確には `</ dev / null`とは何ですか?

  17. 17

    undefinedのプロパティ「search」を読み取れません-webpack-dev-server

  18. 18

    致命的:「https://[email protected]」のパスワードを読み取れませんでした:ターミナルプロンプトが無効になっています

  19. 19

    ルート権限なしで/ dev / inputデバイスから読み取る

  20. 20

    マウント:/ dev / mapper / centos-home:スーパーブロックを読み取れません

  21. 21

    / dev / randomに書き込むと、/ dev / randomからの並列読み取りが速くならないのはなぜですか?

  22. 22

    / dev / randomに書き込むと、/ dev / randomからの並列読み取りが速くならないのはなぜですか?

  23. 23

    4000x「wpa_supplicant [1885]:ランダム:/ dev / randomから読み取ることができません:リソースが一時的に利用できません」起動時のログメッセージ

  24. 24

    /dev/mapper/veracrypt1 からデータを読み取る際の I/O エラー

  25. 25

    Firestoreから読み取っても何も返されません

  26. 26

    「cat / dev / random」対「tail -f / dev / random」

  27. 27

    ibm-eventstreams-devはIBMCloudPrivateにデプロイされません

  28. 28

    webpack-dev-serverがHtmlWebPackPluginによって生成されたindex.htmlを提供していません

  29. 29

    エコーまたは印刷/ dev / stdin / dev / stdout / dev / stderr

ホットタグ

アーカイブ