読者です 読者をやめる 読者になる 読者になる

サイズを指定してファイルを作成したい

dd

検証用にサイズの大きいファイルがほしいなーと思うことが割とよくあるのでメモ。

 touch コマンドだと空のファイルですからね。

# touch aaa
# ll aaa
-rw-r--r--. 1 root root 0 6月 20 04:59 2015 aaa

 良く知られているのは dd コマンドで作成する方法です。

50MB のファイルを作成してみます。

# dd if=/dev/zero of=aaa bs=1M count=50

50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 1.00053 s, 52.4 MB/s

これは /dev/zero のデータを aaa ファイルに 1度に 1MB ずつ 50回書きこむ (計 50MB)という意味になります。

出来たファイルを見てみます。

(ここでは -h オプションを使用してMB表記にしています) 

# ll -h aaa
-rw-r--r--. 1 root root 50M 6月 20 05:21 2015 aaa

 サイズが50MBのファイルが作成できました。めでたし、めでたし。

 

 

ここからは余談ですが、Byte 表記だと以下のようになります。

# ll aaa
-rw-r--r--. 1 root root 52428800 6月 20 05:48 2015 aaa

 dd コマンドを実行した際も以下のように表記され、実際は52.4MBのファイルが作成されています。

52428800 bytes (52 MB) copied, 1.00053 s, 52.4 MB/s

これは dd コマンドの bs オプションで1Mと指定しており、1MB=1,048,576B だからです。

 

人間は10進数を使用しているので、1MB=1,000,000Byte なんですが、PCは2進数を使用しているため、1MB=1,048,576Byte なのです。

 

従って、1,048,576 Byte x 50 = 52,428,800 Byte = 52.4 MB になります。

itpro.nikkeibp.co.jp

こんなん当たり前じゃんw と思われるかもしてませんが、私はもともと情報系出身ではなく触れる機会がなかったため、最近までよく分かっていませんでした。

 

さらに余談ですが ll -h ( ls -lh ) コマンドで確認した 際に 50M と表記されていたのは、-h オプションを使用しているからです。

man ページの引用を貼っておきます。

-h, --human-readable
それぞれのサイズについて、 例えばメガバイトなら M といったサイズ文字を付加する。 10 の累乗ではなく 2 の累乗を用いるので、M は 1,048,576 バイトを表す。10 の累乗にしたいときは -H または --si
オプションを使うこと。