通过内部系统变量 $RANDOM
1 | [user1@study ~]$ echo $RANDOM |
如果超过 5 位可以加个固定 10 位整数,然后进行求余。生成 400000~500000
的随机数:
1 | !/bin/bash |
使用 awk
命令的随机函数
1 | [user1@study ~]$ awk 'BEGIN{srand();print rand()*1000000}' |
1 | awk 'function irand(min, max){max= max - min + 1;num= rand() * 1000000000;return int(num % max + min);}!a[$1]++{print $1,irand(1,30) }' filename |
使用 openssl
命令产生随机数
openssl rand 用于产生指定长度个bytes的随机字符。-base64或-hex对随机字符串进行base64编码或用hex格式显示。
1 | [user1@study ~]$ openssl rand -base64 8 | md5sum | cut -c1-8 # 八位字母和数字的组合 |
通过 date
从时间获得随机数
1 | [user1@study ~]$ date +%s%N # 生成19位数字 |
生成 1~50
的随机数
1 |
|
通过系统内唯一数据生成随机数
/dev/random
存储系统当前运行的环境的实时数据,可以看作系统某时候的唯一值数据,提供优质随机数。
/dev/urandom
是非阻塞的随机数产生器,读取时不会产生阻塞,速度更快、安全性较差的随机数发生器。
1 | [user1@study ~]$ head -n 10 /dev/urandom | md5sum | head -c 10 |
生成全字符的随机字符串
1 | [user1@study ~]$ strings -n 8 /dev/urandom | head -n 1 |
生成数字加字母的随机字符串,其中 strings -n
设置字符串的字符数,head -n
设置输出的行数。
1 | [user1@study ~]$ sed -e 's/[^a-zA-Z0-9]//g' /dev/urandom | strings -n 8 | head -n 1 |
urandom 的数据很多使用 cat
会比较慢,可以使用 head
读200行,再用 cksum
将读取文件内容生成唯一的表示整型数据,cut
以 " "
分割然后得到分割的第一个字段数据
1 |
|
读取 Linux的 uuid
UUID码全称是通用唯一识别码 (Universally Unique Identifier, UUID)。它格式是:包含32个16进制数字,以“-”连接号分为五段,形式为8-4-4-4-12的32个字符。
Linux的UUID码也是由内核提供的,在 /proc/sys/kernel/random/uuid
这个文件内。每次查看此文件结果都会不同。
1 | [user1@study ~]$ cat /proc/sys/kernel/random/uuid |
获取不同的随机整数
1 | [user1@study ~]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" " |
使用 uuid 生成 100~500
随机数
1 |
|
从元素池中随机抽取取
1 | pool=(a b c d e f g h i j k l m n o p q r s t 1 2 3 4 5 6 7 8 9 10) |
用于生成一段特定长度的有数字和字母组成的字符串,字符串中元素来自自定义的池子。
1 |
|
使用 mkpasswd
命令
需要安装 expect
1 | [user1@study ~]$ mkpasswd |
生成 13 位的密码
1 | [user1@study ~]$ mkpasswd -l 13 |