shellでテスト用に1ギガバイトのファイルを作成する方法

こんにちは、さるまりんです。

プログラムをテストするときにダミーのファイルが必要になることがあります。

なんでもいいので1ギガバイトのファイルが欲しい。

こんな時、Linux/macOSではddコマンドを使ってファイルを作ります。

ddコマンドで作成

dd if=/dev/zero of=test.dat bs=1M count=1024

ifで入力ファイルを指定します。それを/dev/zeroにすることで0で埋められたデータを生成します。
ofは出力ファイルです。test.datを指定しています。
bs=1Mはブロックサイズを1メガバイトにし
count=1024で上の1メガバイトのブロックを1024個書き込んで1ギガバイトのファイルを作成します。

macOSのターミナルで実施してみました。

% dd if=/dev/zero of=test.dat bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 1.024666 secs (1047894459 bytes/sec)
% ls -l
total 2117632
-rw-r--r--  1 salu  staff  1073741824  8 14 16:44 test.dat
% ls -lh
total 2117632
-rw-r--r--  1 salu  staff   1.0G  8 14 16:44 test.dat

1ギガになっていますね。

1ギガのブロックを1個書き込むでも1ギガバイトのファイルを作成できます。

% dd if=/dev/zero of=test.dat bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes transferred in 1.374243 secs (781333304 bytes/sec)
% ls -lh
total 2097152
-rw-r--r--  1 salu  staff   1.0G  8 14 16:45 test.dat

100メガバイトのファイルも作成してみます。

% dd if=/dev/zero of=test.dat bs=1M count=100 
100+0 records in
100+0 records out
104857600 bytes transferred in 0.095899 secs (1093417033 bytes/sec)
% ls -lh
total 231424
-rw-r--r--  1 salu  staff   100M  8 14 16:46 test.dat

100メガでファイルが作成されています。

その他の方法

ddコマンド以外にも作成方法があります。

fallocateコマンド :

fallocate -l 1G test.dat

Linux(aws)上で実施してみました。

$ fallocate -l 1G test.dat
$ ls -lh
...
-rw-rw-r-- 1 ec2-user ec2-user 1.0G  8月 14 16:55 test.dat

truncateコマンド :

truncate -s 1G test.dat

こちらもLinux(aws)上で実施してみました。

$ truncate -s 1G test.dat 
[ec2-user@ip-172-31-5-91 work]$ ls -lh
...
-rw-rw-r-- 1 ec2-user ec2-user 1.0G  8月 14 16:56 test.dat

どれが早く動作するでしょう。インストールされているコマンド、環境に応じて使い分けてみます。
読んでくださってありがとうございました。

それではまた!