中身は何でも良いけれど、指定のバイト数きっかりのファイルが欲しいことがある。
任意の半角英数一文字を沢山コピペして、ちょうどいい文字数まで満たすという方法もあるが、非常に面倒くさい
でもそれコマンド一発でできる。
ランダムなバイト列を指定バイト数出力
非常に簡単なもので、1024byteが欲しければ
以下コマンドを使えば1024byteのhogeファイルが作られる。
head -c 1024 /dev/urandom > hoge
これは/dev/urandomとは、Linuxについている疑似乱数生成する疑似デバイスで、このファイルを読み込むとランダムなバイト列がひっきりなしに出力される。
バイト列なのでcatなどで読むと酷い目に合うので、cat /dev/urandom | hexdumpでみているとずっと出力されてくることが分かる。
headコマンドはファイルの頭だけを読み込むコマンド。
catはファイルの終端まで読もうとするけれども、headは頭だけ読むので、テキストファイルを読む時も出だしをちょっとだけ表示させたいときに重宝する。
そしてcオプションは頭から読むバイト数を指定できる。
ランダムなバイト列を指定バイト分読んで、それをファイルにリダイレクトしているだけ
KBやMBも簡単に作ることができる
head -c 1k /dev/urandom > hoge2 head -c 1m /dev/urandom > hoge3
cオプションにkやmをつけるだけで、キロバイトやメガバイトを意味するようになる。
lsで見てみると、ちゃんと正しく1KBと1MBのファイルが作られている。
おまけ:圧縮してみる
これらのファイルを圧縮してみる。
元ファイルよりちょっとだけ容量が増加しているだろう。
これは何かというと、ファイル圧縮はデータの偏りを寄せて効率よく書き直す処理をしているけれども、ランダムなバイトで生成されたこれらのファイルは圧縮しても偏りがないので圧縮にならないのだ
元ファイルとgzファイルの中身をhexdumpでみてみるとわかるけれども、
ほとんど元データのまま残っていた。
でも、gzipファイル特有のヘッダはつくので、その分ファイルの容量は増えることになった。