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