产生随机数
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(生成密码型随机数)
mkpasswd是expect工具包中的命令,可生成指定复杂度的随机密码(含数字、字母、特殊字符)。
命令示例
[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 expect或apt install expect)。 - 可灵活控制密码复杂度,适合生成符合安全要求的用户密码。