/dev/urandomとは
/dev/urandom
とはランダムな文字列を出力する疑似デバイスファイルです。同様なデバイスファイルに/dev/random
もありますが、前者の方が推奨されています。
理由は/dev/random
のエントロピープールが有限なのに対して、/dev/urandom
の方は再利用が発生するため無限だかららしいです。詳しいことは分かりません。
使ってみた
下記のコマンドを入力してみます。
$ cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 100 | head -n 1
LC_CTYPE=C
- ロケールが日本のままだと
tr
コマンドがエラーを吐きます
- ロケールが日本のままだと
tr -dc 'a-zA-Z0-9'
- [a-zA-Z0-9]以外は削除する
fold -w 100
- 一行100文字
これで100文字のランダムな文字列が取得可能です。咄嗟にシェルで指定文字数のランダム文字列が作成出来ると色々と便利です。
応用(大容量画像の作成)
これを応用するとファイルサイズの大きい画像なども簡単に作れます。実は画像のメタデータに好きな文字列をコメントとして保存することが可能なのです。
こちらの記事を参考にさせて頂きました。
まずはexiftool
とimagemagick
をインストールします。
$ brew install exiftool imagemagick
次のコマンドを実行して、ダミー画像を作成します。
$ convert -size 640x640 xc:#FF6600 dummy.png
次のコマンドを実行してみます。1GBのテキストファイルが作成されます。
$ cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 1048218 | head -n 1 > dummy.txt
$ du --si dummy.txt
1.0G dummy.txt
次のコマンドで画像にコメントを挿入します。1GBなのでこの処理には少々時間が掛かります。終わりましたらファイルサイズが増えていることを確認出来ます。
$ exiftool dummy.png -comment\<=dummy.txt
$ du --si dummy.png
1.1G dummy.png
終わりに
負荷の問題なのか大容量の画像を配信しているサイトは検索しても中々見つからなかったので、このように自分で作成出来る術を覚えておくと何かと便利かと思います。