产生随机数

1. 利用 Shell 内置变量($RANDOM)

$RANDOM是Bash Shell环境中内置的随机数变量,可直接调用生成随机整数。

命令示例

[root@why80 test]# echo $RANDOM
30080  
[root@why80 test]# echo $RANDOM  
13845  

补充说明

  • 生成的随机数范围为0-32767(16位有符号整数的范围)。
  • 仅在Bash等支持该变量的Shell环境中有效,不依赖额外工具。

2. 利用 openssl 工具

openssl是一款强大的加密工具,可通过rand子命令生成高安全性的随机数,支持多种输出格式。

常用命令及示例

生成 Base64 格式随机数

[root@why80 test]# openssl rand -base64 8  
Mayw2rVIf/E=  
[root@why80 test]# openssl rand -base64 8  
Yd0v+Ybdo7c=  

生成十六进制格式随机数(补充)

[root@why80 test]# openssl rand -hex 8  
a3f27d9c0b4e1256  

补充说明

  • 命令中8表示生成的随机字节数(Base64格式每4个字符对应3字节,十六进制每2个字符对应1字节)。
  • 生成的随机数包含数字、大小写字母及特殊字符(Base64含+/等),安全性高,适合加密场景。

3. 利用 date 命令(基于系统时间)

date命令可通过%N参数获取当前时间的纳秒部分,作为简单随机数使用。

命令示例

[root@why80 test]# date +%N  
050296516  
[root@why80 test]# date +%N  
849604029  

补充说明

  • %N表示输出当前时间的纳秒(0-999999999),精度为1纳秒。
  • 依赖系统时间,若短时间内频繁调用(间隔小于1纳秒),可能生成重复值,随机性较弱。

4. 利用系统随机设备(/dev/urandom)

/dev/urandom是Linux系统提供的非阻塞随机数设备,配合cksum(校验和命令)可生成随机整数。

命令示例

[root@why80 test]# head /dev/urandom | cksum  
3730378302 4306  
[root@why80 test]# head /dev/urandom | cksum  
4023619650 2862  

补充说明

  • /dev/urandom从系统熵池获取随机数据,非阻塞模式(即使熵不足也会返回数据),适合生成大量随机数。
  • cksum用于计算输入内容的校验和,输出结果包含随机整数(前半部分)和字节数(后半部分)。

5. 生成 UUID(通用唯一识别码)

通过读取系统文件/proc/sys/kernel/random/uuid可生成符合UUID标准的随机标识符。

命令示例

[root@why80 test]# cat /proc/sys/kernel/random/uuid     
a2cb5d3d-bb74-4dc0-b5ba-5e4fd9704a06  
[root@why80 test]# cat /proc/sys/kernel/random/uuid  
dbd2a8be-e294-405f-9a41-d550a0bbc262  

补充说明

  • UUID 格式为36个字符(含4个连字符),例如xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,符合 RFC 4122 标准。
  • 唯一性极高,适用于标识分布式系统中的资源(如文件、设备等)。

6. 利用 expect 包的 mkpasswd(生成密码型随机数)

mkpasswdexpect工具包中的命令,可生成指定复杂度的随机密码(含数字、字母、特殊字符)。

命令示例

[root@test ~]# mkpasswd -l 9 -d 2 -c 3 -s 1  
VxqE}t56o  
[root@test ~]# mkpasswd -l 9 -d 2 -c 3 -s 1  
W99syAyf;  

常用参数说明

  • -l:指定密码总长度(如-l 9表示长度为9)。
  • -d:指定数字的数量(如-d 2表示包含2个数字)。
  • -c:指定小写字母的数量(如-c 3表示包含3个小写字母)。
  • -C:指定大写字母的数量(如-C 2表示包含2个大写字母)。
  • -s:指定特殊字符的数量(如-s 1表示包含1个特殊字符)。
  • -p:指定设置密码的程序(默认使用passwd)。

补充说明

  • 使用前需安装expect包(如yum install expectapt install expect)。
  • 可灵活控制密码复杂度,适合生成符合安全要求的用户密码。