linux 生成随机数 命令,Linux生成随机数的多种方法

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

通过内部系统变量 $RANDOM

如果超过 5 位可以加个固定 10 位整数,然后进行求余。生成 400000~500000 的随机数:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16!/bin/bash

function rand(){

min=$1

max=$(($2-$min+1))

#生成0-32767之间的整数随机数

#num=$(echo $RANDOM)

#若要生成5位数以上的随机数,则需要加个固定10位整数,然后进行求余,如下:

num=$(($RANDOM+1000000000)) #增加一个10位的数再求余

echo $(($num%$max+$min))

}

rnd=$(rand 300000 600000)

echo $rnd

exit 0

使用 awk 命令的随机函数1

2

3[[email protected] ~]$ awk 'BEGIN{srand();print rand()*1000000}'

7790191awk '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

2

3

4

5

6[[email protected] ~]$ openssl rand -base64 8 | md5sum | cut -c1-8

5f8aa9c1

[[email protected] ~]$ openssl rand -base64 8 | cksum | cut -c1-8 # 八位数字

25627052

通过 date 从时间获得随机数1

2

3

4

5

6

7

8[[email protected] ~]$ date +%s%N # 生成19位数字

1437297460176572314

[[email protected] ~]$ date +%s%N | cut -c6-13 # 取八位数字

97471199

[[email protected] ~]$ date +%s%N | md5sum | head -c 8

生成 1~50 的随机数1

2

3

4

5

6

7

8

9

10

11

12

13#!/bin/bash

function (){

min=$1

max=$(($2-$min+1))

num=$(date +%s%N)

echo $(($num%$max+$min))

}

rnd=$(rand 1 50)

echo $rnd

exit 0

通过系统内唯一数据生成随机数

/dev/random 存储系统当前运行的环境的实时数据,可以看作系统某时候的唯一值数据,提供优质随机数。

/dev/urandom 是非阻塞的随机数产生器,读取时不会产生阻塞,速度更快、安全性较差的随机数发生器。1

2

3[[email protected] ~]$ head -n 10 /dev/urandom | md5sum | head -c 10

生成全字符的随机字符串1

2

3[[email protected] ~]$ strings -n 8 /dev/urandom | head -n 1

ayU!iwR?

生成数字加字母的随机字符串,其中 strings -n 设置字符串的字符数,head -n 设置输出的行数。1

2

3[[email protected] ~]$ sed -e 's/[^a-zA-Z0-9]//g' /dev/urandom | strings -n 8 | head -n 1

DwNJNIp4Ff

urandom 的数据很多使用 cat 会比较慢,可以使用 head 读200行,再用 cksum 将读取文件内容生成唯一的表示整型数据,cut 以 " " 分割然后得到分割的第一个字段数据1

2

3

4[[email protected] ~]$ head -200 /dev/urandom| cksum |cut -d" " -f1

2185818

读取 Linux的 uuid

UUID码全称是通用唯一识别码 (Universally Unique Identifier, UUID)。它格式是:包含32个16进制数字,以“-”连接号分为五段,形式为8-4-4-4-12的32个字符。

Linux的UUID码也是由内核提供的,在 /proc/sys/kernel/random/uuid 这个文件内。每次查看此文件结果都会不同。1

2

3[[email protected] ~]$ cat /proc/sys/kernel/random/uuid

bd777e6e-820e-443b-83d9-b8fc8ba65de8

获取不同的随机整数1

2

3[[email protected] ~]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "

428476922

使用 uuid 生成 100~500 随机数1

2

3

4

5

6

7

8

9

10

11

12

13#!/bin/bash

function (){

min=$1

max=$(($2-$min+1))

num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}')

echo $(($num%$max+$min))

}

rnd=$(rand 100 500)

echo $rnd

exit 0

从元素池中随机抽取取1

2

3pool=(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)

num=${#pool[*]}

result=${pool[$((RANDOM%num))]}

用于生成一段特定长度的有数字和字母组成的字符串,字符串中元素来自自定义的池子。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19#!/bin/bash

length=8

i=1

seq=(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)

num_seq=${#seq[@]}

while [ "$i" -le "$length" ];do

seqrand[$i]=${seq[$((RANDOM%num_seq))]}

let "i=i+1"

done

echo "The random string is: "

for j in ${seqrand[@]};do

echo -n $j

done

echo

使用 mkpasswd 命令

需要安装 expect

生成 13 位的密码1

2

3[[email protected] ~]$ mkpasswd -l 13

3E"pmkxnm3itP

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值