どうも、やまもとやまです。
今回は軽めのネタで、テスト用ダミーファイルを作ってみようと思います。
例えば何かの検証時に、○○MBのテストファイルで~~する、とかありますよね。
この手のダミーファイルは物にもよりますが、慣れればすぐに作成できるようになります。
ファイル作成方法その①
5MiBのダミーファイルを作成する場合、以下のようなコマンドで作成可能です。
$ for i in {1..524288}; do echo '123456789' >> dummy; done
同じ文字列を指定回数書き込んでいるわけですね。
今回の場合は5MiBなので、1024×1024×5を10文字(10Byte)で割った524288回書き込んでいます。
では確認してみましょう。
$ ls -lh dummy
-rw-r--r-- 1 test test 5.0M 3月 31 19:14 2025 dummy
$ head dummy
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
できてますね!
ところでなぜ書き込む単位が10文字ではなく9文字なのかというと、(環境によりますが)改行コードが1Byteだからです。
$ head dummy | od -c
0000000 1 2 3 4 5 6 7 8 9 \n 1 2 3 4 5 6
0000020 7 8 9 \n 1 2 3 4 5 6 7 8 9 \n 1 2
0000040 3 4 5 6 7 8 9 \n 1 2 3 4 5 6 7 8
0000060 9 \n 1 2 3 4 5 6 7 8 9 \n 1 2 3 4
0000100 5 6 7 8 9 \n 1 2 3 4 5 6 7 8 9 \n
0000120 1 2 3 4 5 6 7 8 9 \n 1 2 3 4 5 6
0000140 7 8 9 \n
odでダンプすると分かりやすいですね。
ファイル作成方法その②
しかし先ほどの方法では大き目のファイルを作成するのはちょっとめんどくさい。
というわけで別の方法です。
今度は1GiBのテストファイルを作成してみます。
$ dd if=/dev/zero of=./dummy bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.871252 s, 1.2 GB/s
ddで指定してゼロフィルしています。
今回の場合は1MiBを1024回書き込む指定です。
ゼロではなくランダムにしたい場合は/dev/urandomで疑似乱数も利用できますね。
さて、確認してみましょう。
$ ls -lh dummy
-rw-rw-r-- 1 test test 1.0G 3月 31 19:31 2025 dummy
できてますね!
念のためバイト単位でも確認します。
$ ls -l dummy
-rw-rw-r-- 1 test test 1073741824 3月 31 19:31 2025 dummy
ファイルの中身も確認してみます。
$ od -c -N 64 dummy
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000100
想定通りですね。
1点注意ですが、bsの指定で1Mを1MBにすると結果が変わります。
$ dd if=/dev/zero of=./dummy bs=1MB count=1024
1024+0 records in
1024+0 records out
1024000000 bytes (1.0 GB) copied, 0.851138 s, 1.2 GB/s
$ ls -l dummy
-rw-rw-r-- 1 test test 1024000000 3月 31 19:34 2025 dummy
1Mだと1MiB、1MBだと1MBの指定になるようです。
気づかぬところでトラブルになりそうなので気を付けましょう。
まとめ
というわけでテスト用ファイルを作成する小ネタでした。
テストに応じて必要なファイルも変わりますので、うまいこと作れると作業も楽になりますね。
それではまた!