OS Xでランダムな文字列を得る
調べればすぐに分かるが、どうせまたすぐに忘れそうなのでメモ。
以下は8文字のランダムなパスワードを生成するコマンド。
$ cat /dev/urandom | LC_CTYPE=C tr -dc '[:alnum:]' | head -c 8 | awk '{print}'
このコマンドのそれぞれが何をしているのか。
OSのコマンドにあまり詳しくない私はちょびっとだけ調べてみた。
cat /dev/urandom
この部分は乱数生成デバイスから乱数を読み込んでいる。
urandomはブロックなしで内部プールを再利用するそうだ。
LC_CTYPE=C tr -dc '[:alnum:]'
この部分は文字列の変換を行っている。
LC_CTYPE=Cの部分は、ロケールによる文字コード変換を行わないことを指定している。
(CはC言語のC)
tr コマンドは、-d で削除する文字列を指定する。
[:alnum:] はアルファベットと数字。
-c は「以外」、つまり補集合。
head -c 8
これは見た目の通り、先頭8文字のみを取得している。
awk '{print}'
これはなくてもいいと思うけど、puts、あるいはprintlnみたいに入力を表示して改行して終わり。
0とOなど、紛らわしい文字をパスワードに使いたくない場合、trコマンドをもう1つつなげて、禁止文字を指定する。
cat /dev/urandom | LC_CTYPE=C tr -dc '[:alnum:]' | tr -d 'oO0lI1' | head -c 8 | awk '{print}'