pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


ランダム文字列をシェル上で生成する。ただし区別しづらい文字は削る。

シェル上のコマンドでランダムな文字列を取得したい場合の定番は、おそらく以下のような方法だと思います。

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -10
cat /dev/urandom | base64 | fold -w 10 | head -10

しかし、これだけでは区別しづらい文字である、0, O,1,l,I が含まれてしまいます。これを削るには、 tr や base64 の出力に対して tr -d 'O0l1I|' を追加すればOKです。ランダム文字列としての強度は若干下がるでしょうけれど、それよりも視認性を優先したほうが実用的だと思います。

実際の利用例としてはこんな感じでしょうか。

cat /dev/urandom | tr -dc '[:alnum:]' | tr -d 'O0l1I|' | fold -w 16 | head -10
cat /dev/urandom | tr -dc '[:graph:]' | tr -d 'O0l1I|' | fold -w 16 | head -10


なお、tr -d 'O0l1I|' を使う代わりに tr -dc で区別しづらい文字を除いた条件付けを行ってもよいのですけど、これは指定が冗長になるのであまりおススメできないですね。