Linux – Random number

Loading

測試環境為 CentOS7 x86_64 (虛擬機)

如何在 Linux 環境產生一組亂數 (Random number),可以透過下面幾種方式.

date

透過 date 的參數 %s , %N 來產生一種亂數.

[root@localhost ~]# date +%s
1553777293
[root@localhost ~]# date +%N
306908268
[root@localhost ~]# date +%s%N
1553777311205358055

參數說明:

  • %s – seconds since 1970-01-01 00:00:00 UTC
  • %N – nanoseconds (000000000..999999999)

$RANDOM

RANDOM 環境變數主要是透過 /dev/random 這個檔案來產生亂數 (變數內容介於 0~32767 之間)

[root@localhost ~]# echo $RANDOM
8638
[root@localhost ~]# echo $RANDOM
30473
[root@localhost ~]# echo $RANDOM
1360

如果覺得數值不夠大,可以自行 * 一個數值.

[root@localhost ~]# declare -i number=$RANDOM*35565 ; echo $number
927499635
[root@localhost ~]# declare -i number=$RANDOM*35565 ; echo $number
251764635
[root@localhost ~]# declare -i number=$RANDOM*35565 ; echo $number
262007355

/dev/random , /dev/urandom

基本上 /dev/random 和 /dev/urandom 會一直產生亂數 (依據當時 mouse 的移動 keyboard 鍵值 disk I/O 運作來隨機產生一組亂數).

[root@localhost ~]# cat /dev/random | od -x
0000000 1cf4 93a8 95a2 f255 711f dff6 f8ba d1b0
0000020 2ff1 cecf 87e7 fb1f 1691 1708 4607 790e
0000040 31dc 6ade 021a 35a6 fecc e1ee 890d b35f
0000060 429f 7481 a46c 2202 1f4a 9098 cb22 4fea
0000100 9363 9304 59d5 6265 9b38 f145 1a64 43e0
0000120 029e 1008 70a9 339e 7ae3 a1d3 659f bc64
0000140 f07e d384 a58a 05e0 b4f2 929d ef61 65e5
0000160 a4d5 b292 728f 49c4 5a14 9411 c33b 643d
0000200 90f0 76a0 353f ab32 6f87 2e2a 1ab4 43de
0000220 fbbb 089f 910b e613 cc5b 4fa1 2789 939d
0000240 48be 1250 f376 aa64 242e 45f0 94d4 6b6c

od -x – dump files in octal(八進制) and other formats (-x : 16 進制)

[root@localhost ~]# cat /dev/urandom | od -x
1512500 d8bf 66d6 ba13 470a aa3d 8977 9aa2 3dcf
1512520 52e0 7c9d d81a afed 0dde 93b1 2e0e 251b
1512540 f128 1381 b993 515d b7f8 19d8 1af1 07b6
1512560 bd4d 1d53 66fa 255c dc9b 4d56 e6bf 9b2b

這檔但沒有辦法直接用,可以利用指令 head 與 cksum (或是 md5sum) 來產生亂數值.
head – output the first part of files
cksum – checksum and count the bytes in a file

[root@localhost ~]# head -200 /dev/urandom | cksum 
2807095831 53907
[root@localhost ~]# head -200 /dev/urandom | cksum | cut -f1 -d" "
2400952302
[root@localhost ~]# head -200 /dev/urandom | md5sum | cut -f1 -d" "
cced8655db9440bed54a8ffcabccc2da

UUID

還有另外一個 random UUID (Universally Unique Identifier) – /proc/sys/kernel/random/uuid 一樣會產生亂數值.

[root@localhost ~]# cat /proc/sys/kernel/random/uuid
f2b0cc61-e7db-4253-95cd-47184904914e
[root@localhost ~]# cat /proc/sys/kernel/random/uuid
7a844589-afad-483a-9993-fd6e156f85fa

shuf

透過指令 shuf 可以指定範圍來產生亂數.
shuf – generate random permutations

  • -i (–input-range=LO-HI) – treat each number LO through HI as an input line
  • -n (–head-count=COUNT) – output at most COUNT lines
[root@localhost ~]# shuf -i 0-9999999999 -n 1
5123218652
[root@localhost ~]# shuf -i 0-9999999999 -n 1
7303269963
[root@localhost ~]# shuf -i 0-9999999999 -n 1
825698533
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料