GNU随机数据的来源
跳到导航
跳到搜索
shuf、shred和sort命令有时需要随机数据来完成它们的工作。例如,'sort -R'必须随机选择一个哈希函数,并且它需要随机数据来进行这个选择。
默认情况下,这些命令使用由少量熵初始化的内部伪随机生成器,但可以通过--random-source=file选项指定使用外部源。如果文件不包含足够的字节,则会报错。
例如,设备文件/dev/urandom可以用作随机数据的来源。通常,该设备会将来自设备驱动程序和其他源的环境噪声收集到熵池中,并使用该池生成随机位。如果熵池的数据不足,设备会重新使用内部池来产生更多位,使用具有密码学安全性的伪随机数生成器。但请注意,该设备并非专为大量随机数据生成而设计,速度相对较慢。
对于大多数实际用途来说,/dev/urandom已经足够了,但需要对私密数据进行高值或长期保护的应用程序可能需要像/dev/random或/dev/arandom这样的替代数据源。可用的数据源取决于您的操作系统。
为了复现先前调用命令的结果,您可以将一些随机数据保存到文件中,然后在先前和后续的命令调用中将该文件用作随机源。除了依赖文件外,可以根据种子值生成可复现的任意量的伪随机数据,例如:
get_seeded_random() { seed="$1" openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \ </dev/zero 2>/dev/null } shuf -i1-100 --random-source=<(get_seeded_random 42)