一些背景信息:我想在Red Hat服务器上运行脚本以从/ dev / random中读取一些数据,并使用Perl unpack()命令将其转换为十六进制字符串,以备后用(基准数据库操作)。我在/ dev / random上运行了一些“ head -1”,它看起来工作得很好,但是多次调用后,它还是会挂起。几分钟后,它将最终输出一小段文本,然后结束。
我切换到/ dev / urandom(我真的不想这么做,它速度较慢,并且我不需要那种随机性),并且在前两三个呼叫中都可以正常工作,然后它也开始挂起。我想知道它是否是轰炸它的“ head”命令,所以我尝试使用Perl做一些简单的I / O,并且它也挂了。作为最后的努力,我使用“ dd”命令将其中的一些信息直接转储到文件中,而不是转储到终端中。我只问它只有1mb的数据,但是花了3分钟才能获得〜400字节,然后才杀死它。
我检查了进程列表,CPU和内存基本未受影响。到底是什么原因可能导致/ dev / random出现这种情况,我该怎么做才能防止/修复它?
编辑: 感谢您的帮助!看来我把随机和乌兰多姆混在一起了。我已经启动并运行了脚本。看来我今天学到了新东西。:)
在大多数Linux系统上,/dev/random由环境收集的实际熵提供支持。如果您的系统没有从提供大量数据/dev/random,则可能意味着您没有产生足够的环境随机性来为其供电。
/dev/random
我不确定为什么您认为/dev/urandom质量“较慢”或更高。它重用内部熵池来生成伪随机性-使其质量略低- 但不会阻塞。通常,不需要高级或长期加密的应用程序可以/dev/urandom可靠地使用。
/dev/urandom
尝试稍等片刻,然后重新阅读/dev/urandom。您可能已经耗尽了内部熵池读取的太多信息/dev/random,从而破坏了两个生成器- 允许您的系统创建更多的熵可以补充它们。
有关和的更多信息,请参见Wikipedia。/dev/random``/dev/urandom
/dev/random``/dev/urandom