1.1.1 inux隨機數的辦法 http://www.2cto.com/kf/201410/342717.html
方法一.[root@ob ~]# date +%N %N納秒 隨機獲取的九位數通過時間
823015723
通過時間獲得隨機數(date)
date +%s%N #生成19位數字,1287764807051101270
date +%s%N | cut -c6-13 #取八位數字,21793709
date +%s%N | md5sum | head -c 8 #八位字母和數字的組合,87022fda
方法二.[root@ob ~]# echo $RANDOM
24215
生成0-32767之間的整數隨機數,若超過5位可以加個固定10位整數,然后進行求余。
生成400000~500000的隨機數:
#!/bin/bash
function rand(){
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000)) #增加一個10位的數再求余
echo $(($num%$max+$min))
}
rnd=$(rand 400000 500000)
echo $rnd
exit 0
方法三:使用awk的隨機函數
awk 'BEGIN{srand();print rand()*1000000}' #可以加上if判斷,779644
方法四openssl rand產生隨機數
openssl rand 用於產生指定長度個bytes的隨機字符。-base64或-hex對隨機字符串進行base64編碼或用hex格式顯示。
openssl rand -base64 8 | md5sum | cut -c1-8 #八位字母和數字的組合,3a61800e
openssl rand -base64 8 | cksum | cut -c1-8 #八位數字,10784736
方法五
(5)通過系統內唯一數據生成隨機數(/dev/random及/dev/urandom)
/dev/random存儲系統當前運行的環境的實時數據,可以看作系統某時候的唯一值數據,提供優質隨機數。
/dev/urandom是非阻塞的隨機數產生器,讀取時不會產生阻塞,速度更快、安全性較差的隨機數發生器。
cat /dev/urandom | head -n 10 | md5sum | head -c 10 #32f1e953ac
cat /dev/urandom | strings -n 8 | head -n 1 #生成全字符的隨機字符串,08?WU$ZU
cat /dev/urandom | sed -e 's/[^a-zA-Z0-9]//g' | strings -n 8 | head -n 1 #生成數字加字母的隨機字符串,Ql2q9CXS
其中 strings -n設置字符串的字符數,head -n設置輸出的行數。
head-200/dev/urandom| cksum |cut-d" " -f1 #urandom的數據很多使用cat會比較慢,在此使用head讀200行,cksum將讀取文件內容生成唯一的表示整型數據,cut以” “分割然后得到分割的第一個字段數據
(6)讀取linux的uuid碼
UUID碼全稱是通用唯一識別碼 (Universally Unique Identifier, UUID),UUID格式是:包含32個16進制數字,以“-”連接號分為五段,形式為8-4-4-4-12的32個字符。linux的uuid碼也是有內核提供的,在/proc/sys/kernel/random/uuid這個文件內。cat/proc/sys/kernel/random/uuid每次獲取到的數據都會不同。
cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" " #獲取不同的隨機整數,1675034933
cat /proc/sys/kernel/random/uuid| md5sum | cut -c1-8 #數字加字母的隨機數,d69a7ebf
使用linux uuid 生成100~500隨機數:
#!/bin/bash
function rand(){
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
(7)從元素池中隨機抽取取
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)
num=${#pool[*]}
result=${pool[$((RANDOM%num))]}
61b53abd4e1eee16cb7966ccb2aa89da -
[root@ob ~]# date +%N|md5sum|cut -c 6-13
e2d802fb
[root@ob ~]# echo `date +%N|md5sum|cut -c 6-13`
8ba21fee
[root@ob ~]# echo `date +%N|md5sum|cut -c 6-13`|passwd stud{1..8}^C
[root@ob ~]# useradd std{1..5}
232隨機創建密碼