在 Linux 中產生隨機字串
阿恆
怎樣用一句 Linux 指令,產生一個隨機字串?用來產生隨機密碼很有用啊!
首先我承認我有點取巧,所謂一句指令,其實是由三個指令合成,不過熟悉 Linux 的都知道,Shell scripting 中經常使用 pipe、sub-shell 等等技巧,把多個指令結合起來完成複雜的工作。
這句指令是這樣的:
|
|
它的意思是產生一個 20 個字符的隨機字串,包含大寫和小寫英文字母和數字。
第一個指令 cat /dev/urandom
是從 Linux 的隨機數產生器 /dev/urandom
中讀取一連串的 bytes,這些 bytes 從 0x00 to 0xFF 隨機分佈。/dev/urandom
是 Linux 兩個隨機數產生器的其中一個,另一個是 /dev/random
。/dev/random
產生的是真正隨機數,它依靠系統環境的隨機事件,例如網絡、硬碟、鍵盤、麥克風等等來產生隨機資訊,所以它是可靠的隨機數來源,缺點是它產生隨機數的速度,受環境因素影響,如果需要在短時間內提取大量的隨機數,有機會發生擠塞狀況。/dev/urandom
是非擠塞性的隨機數產生器,其中的 u
就是 unblocking 的意思,它依靠 /dev/random
和偽隨機數產生器 (pseudo random number generator) 來產生無窮無盡的隨機數,但隨機性較 /dev/random
低。
這個指令產生的隨機 bytes 會送到第二個指令 tr .....
,它的作用是刪除不是數字或英文字母的 bytes。如果你希望產生的字串只包含某些字符,可以自行修改單引號內的字串。
最後一個指令是控制隨機字串的長度,這裏我們產生一個長度 20 的字串。