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}'