ランダムの文字列を作成する方法(Linux コマンドライン)

random string

業務などで、パスワードなどで乱数や文字列が必要になることがあります。
その都度、生成方法を調べているので備忘として記載しておきます。

Linux の場合、ディストリビューションによっては、パスワード(ランダムな文字列)を生成するコマンドがありますが・・・

■ bash(zsh)で乱数(ランダムな数値)を生成

● 組み込み変数 $RANDOM を利用して乱数を生成

組み込み変数の $RANDOM を参照すると、「0 ~ 32767」の値を得られます。

$ echo $RANDOM
30317

ランダムな数値を連続で10個、生成すると異なる数値が出力されます。

$ for i in $(seq 1 10); do echo ${RANDOM}; done
277
15184
16027
14271
26543
18198
9427
6422
3932
5070

● /dev/urandom を利用して乱数を生成

OSに用意されている疑似デバイスファイル「/dev/urandome」を利用すると $RANDOM よりも精度の高い乱数を生成することができます。

/dev/uramdom からバイト列を読み込み、数値を出力するためには、od コマンドで整数値に変換します。

32bit 符号なし整数を出力する場合は、以下のように実行します。

$ echo $(od -vAn -N4 -tu4 < /dev/random)
2821692475

実行するたびに、異なる数値が生成されます。

■ ランダムな文字列を生成

● /dev/urandom を利用してランダムな文字列を生成

trやfoldとの組み合わせることで、不要な文字を取り除いたり桁数を変更することも可能です。

数字のみ8桁を出力。

$ tr -dc 0-9 < /dev/urandom | fold -w 8 | head -1
37868340

$ tr -dc "[:digit:]" < /dev/urandom | fold -w 8 | head -1
57437126

以下のように、ランダムな数値を連続で10個、生成することもできます。。

$ tr -dc 0-9 < /dev/urandom | fold -w 8 | head -1
29129419
21502347
06027367
85136525
34187079
74583352
32552058
38086054
64607092
02200322

英数字10文字 (大文字小文字混在) を出力。

$ tr -dc 0-9A-Za-z < /dev/urandom | fold -w 10 | head -1
jTX4w5jFn2

$ tr -dc "[:alnum:]" < /dev/urandom | fold -w 10 | head -1
NxmQ9Wb1H7

ランダムな文字列を連続で10個、生成することもできます。。

$ tr -dc "[:alnum:]" < /dev/urandom | fold -w 10 | head -10
j30TJyjQE7
2jXrS02hyt
8VDQ85fp2T
FOGqwMwnAq
wMAjcie2aB
5dFYoPtUhU
eJ4HAmOASy
dsqdm4cLKi
TkuNNT6qjT
ducIGSk0lO


雑多

ランダムな文字列を生成するのに、openssl コマンドを利用する方法もあります。

https://www.home-page.xyz/openssl_rand/