• ☁☁☁☁☁☁☁☁   ☁☁☁☁☁☁☁☁  

Linux随机生成数

简介

在某些情况下,我们需要随机产生一个数来在一些场景中使用,例如验证码、ssh反向代理随机数的产生,又或者在一些shell脚本设计中需要用到随机数,下面以随机产生一个30000-40000之间的随机数为例。

使用shuf

shuf 命令在一些 Linux 系统中是自带的,但并不是所有系统都包含该命令。在 Ubuntu 20.04系统 中,shuf 是默认安装的,因此可以在该系统上使用该命令。如果没有可以手动安装即可。

以下是一些示例用法:

1、生成一个指定范围内的随机数:例如在30000-40000之间随机产生一个数,如下

shuf -i 30000-40000 -n 1

2、从文件中随机选择一行:

shuf file.txt

3、从命令行参数中随机选择一个元素:

shuf -e "apple" "banana" "orange"

4、从文件中随机选择 5 行:

shuf -n 5 file.txt

5、从文件中随机选择行,并将输出重定向到另一个文件:

shuf file.txt -o shuffled.txt

参数介绍

  • -e, --echo: 将参数作为输入,并随机打印每个参数。
  • -i, --input-range=LO-HI: 指定一个范围,以 LO 到 HI 的整数为输入,并随机打印输出。
  • -n, --head-count=COUNT: 从输入中随机选择 COUNT 个行并打印输出。
  • -r, --repeat: 允许重复选择行。
  • -z, --zero-terminated: 使用 null 字符作为行分隔符。
  • -o, --output=FILE: 将输出重定向到指定文件。

使用 Awk

使用 awk 命令生成随机数:

awk -v min=30000 -v max=40000 'BEGIN{srand(); print int(min+rand()<em>(max-min+1))}'

使用 /dev/urandom 设备生成随机数:

listen_port=$(od -An -N2 -i /dev/urandom | awk -v min=30000 -v max=40000 '{ print ($1 % (max - min + 1)) + min }'

/dev/urandom文件产生随机数据,在熵用尽时不会阻塞。这使得它适用于非加密目的和需要大量随机数的应用。

/dev/random文件使用一种加密安全的算法生成随机数据,这使得它适合用于加密目的。然而,当它耗尽熵(从环境中收集的随机性)时,它就会阻塞,它可能导致程序停止,直到收集到更多的熵。

通过内部系统变量($RANDOM)

echo $RANDOM

生成0-32767之间的整数随机数,若超过5位可以加个固定10位整数,然后进行求余。

产生0到9的随机数可以使用$(($RANDOM%10))取余数,理论上只要a<32767,就可以取0到(a-1)之间的随机数

或者echo ${RANDOM:0:1}下标从0开始长度为1的个位数 

生成两位数就是

echo ${RANDOM:0:2}

6-87范围的数:$(($RANDOM%82+6))    #($RANDOM%82可以产生0到81之间的数)

总结

在linux中无论使用那种方法产生的随机均是伪随机数,都不是真正的随机数。在加密或安全敏感的应用中,真正的随机数由物理过程产生,如放射性衰变或热噪声,是首选。

posted @ 2023-07-05 16:37  运维密码  阅读(328)  评论(0编辑  收藏  举报