Windows, Linuxで任意のサイズのファイルを作成する

はじめに

WindowsおよびLinuxでテスト用に任意のサイズのファイルを作成したいケースがあったのでメモとしてまとめておく。
プログラミング言語を利用して、ランダムな文字列を書き込むようなスクリプトを作成すれば実現できるが、これは今回は対象外として記載しないことにした。

環境

Windows 11 Professional
WSL2 Ubuntu 24.04 LTS

Windowsでの作成

Windows では fsutilというコマンドを使用する。

fsutilコマンド

fsutil file createnew <ファイル名> <サイズ(バイト)>

実行例

fsutil file createnew dummyfile.txt 1048576
  • dummyfile.txt: 作成されるファイルの名前
  • 1048576(1024 * 1024): ファイルサイズ(バイト単位、1MB)
実行結果
PS C:\Users\xxxxx\test> fsutil file createnew dummyfile.txt 1048576
ファイル C:\Users\xxxxx\test\dummyfile.txt が作成されました
PS C:\Users\xxxxx\test> ls


    ディレクトリ: C:\Users\xxxxx\test


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2025/01/11     17:41        1048576 dummyfile.txt

※ちなみにメモ帳などで中身を確認すると、何も書き込まれていない。
fsutilは「未初期化」の状態でファイルを作成するので、ファイルには何も書き込まれていないが、ディスク上の領域は確保されている。

Linuxでの作成

ddコマンド

dd if=/dev/zero of=<ファイル名> bs=<ブロックサイズ> count=<ブロック数>

実行例

dd if=/dev/zero of=dummyfile.txt bs=1M count=1
  • dummyfile.txt: 作成されるファイルの名前
  • bs=1M: 1MBのブロックサイズ
  • count=1: ブロック数(1MB×1=1MBのファイルが作成される)
実行結果
dd if=/dev/zero of=dummyfile.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00101307 s, 1.0 GB/s

ll
total 1.0M
-rw-r--r-- 1 kbushi kbushi 1.0M Jan 11 17:47 dummyfile.txt

truncateコマンド

truncate -s <サイズ> <ファイル名>

実行例

truncate -s 1M dummyfile.txt
  • 1M: 1メガバイトのファイルサイズ
  • dummyfile.txt: 作成されるファイルの名前
実行結果
truncate -s 1M dummyfile.txt

ll
total 0
-rw-r--r-- 1 kbushi kbushi 1.0M Jan 11 17:48 dummyfile.txt

fallocateコマンド

fallocate -l <サイズ> <ファイル名>

実行例

fallocate -l 1M dummyfile.txt
  • 1M: 1メガバイトのファイルサイズ
  • dummyfile.txt: 作成されるファイルの名前
実行結果
fallocate -l 1M dummyfile.txt

ll
total 1.0M
-rw-r--r-- 1 kbushi kbushi 1.0M Jan 11 17:50 dummyfile.txt

headコマンド (リダイレクト出力)

head -c <サイズ> </dev/zero > <ファイル名>

実行例

head -c 1M </dev/zero > dummyfile.txt
  • /dev/zero: ゼロで埋められたデータを読み取る
  • 1M: 1メガバイトのファイルサイズ
実行結果
head -c 1M </dev/zero > dummyfile.txt

ll
total 1.0M
-rw-r--r-- 1 kbushi kbushi 1.0M Jan 11 17:52 dummyfile.txt

tailコマンド (リダイレクト出力)

やってることは headとほぼかわらない

tail -c <サイズ> </dev/zero > <ファイル名>

実行例

tail -c 1M /dev/zero > dummyfile.txt
  • -c 1M: 最後の1MB(1メガバイト)を取り出す。
  • /dev/zero: ゼロで埋められたバイトデータを読み込む。
  • > dummyfile.txt : 出力をファイルにリダイレクト。
実行結果
tail -c 1M /dev/zero > dummyfile.txt

ll
total 1.0M
-rw-r--r-- 1 kbushi kbushi 1.0M Jan 11 17:53 dummyfile.txt

yesコマンド (リダイレクト出力)

yes "0" の部分が、/dev/zeroを読み取るからどうかの違いなのでheadコマンドの部分とあまり変わらないかも。

yes "0" | head -c <サイズ> > <ファイル名>

実行例

yes "0" | head -c 1M > dummyfile.txt
  • yes "0": 無限に “0” を出力。
  • tail -c 1M: 最後の1MB分だけを取り出す。
  • > dummyfile.txt: 出力をファイルにリダイレクト。
実行結果
yes "0" | head -c 1M > dummyfile.txt

ll
total 1.0M
-rw-r--r-- 1 kbushi kbushi 1.0M Jan 11 17:56 dummyfile.txt

おまけ

/dev/~~~ 系が気になったので調べた。

今回は、/dev/zeroを主に使用していたが、乱数を書き込みたいのであれば /dev/random/dev/urandom を利用するとよい。

デバイスファイル説明用途例
/dev/null何もないデバイス。書き込むとデータが捨てられ、読み取ると空のデータが返る。ログや不要な出力の破棄。echo "test" > /dev/null
/dev/zero0(ゼロ)バイトを無限に返すデバイス。ダミーファイルの作成、メモリの初期化。dd if=/dev/zero of=file bs=1M count=1
/dev/randomエントロピー(乱数)をもとにしたブロック乱数データを提供。暗号鍵やセッションID生成。cat /dev/random
/dev/urandom擬似乱数生成器で、/dev/random より高速だが、エントロピーが低い可能性がある。高速な乱数が必要な場面。cat /dev/urandom
/dev/full書き込むと「ディスク容量不足」エラーを返す特殊デバイス。プログラムのエラーハンドリングテスト。echo "test" > /dev/full
/dev/tty現在の端末デバイスを指す特殊ファイル。プログラムの標準入出力の操作。
/dev/consoleシステムのメインコンソールデバイス。システムログの出力や直接操作。
/dev/pts/疑似端末スレーブデバイスを格納するディレクトリ(例: /dev/pts/0)。SSH やターミナルエミュレーターの仮想端末。
/dev/disk/ディスクやパーティションのデバイスを管理するディレクトリ。ディスク名のシンボリックリンクやUUID管理。/dev/disk/by-uuid/
/dev/sdXSCSI ディスクや SATA ドライブを表す。例: /dev/sdaハードディスクやSSDのパーティション。
/dev/loopXループバックデバイス。例: /dev/loop0ISOイメージのマウント。mount -o loop file.iso /mnt
/dev/cdromCD/DVD ドライブへのシンボリックリンク。光学ドライブのアクセス。
/dev/fdXフロッピーディスクデバイス。例: /dev/fd0フロッピーディスクの操作。
/dev/srX光学ディスクデバイス(例: CD/DVDドライブ)。例: /dev/sr0CD/DVD の読み取りや書き込み。
/dev/bus/usb/USB デバイスのファイルシステム構造を提供するディレクトリ。USBデバイスの管理。
/dev/input/キーボードやマウスなど、入力デバイスを表すディレクトリ。入力デバイスのイベント監視。例: /dev/input/event0
/dev/mem物理メモリ全体へのアクセスを提供するデバイスファイル。デバッグやカーネルの開発。
/dev/kmemカーネルメモリへのアクセスを提供するデバイス。カーネルデバッグ用。
/dev/mapper/LVM(論理ボリュームマネージャー)や暗号化されたデバイスの管理ディレクトリ。暗号化ディスクやLVMの管理。
/dev/ttyS0シリアルポートデバイス(COMポート)。シリアル通信。例: モデムやシリアル機器との接続。
/dev/net/tunTUN/TAP 仮想ネットワークデバイスの設定用。VPNや仮想ネットワークの構築。
/dev/block/ブロックデバイス(例: ハードディスク)の管理ディレクトリ。ブロックデバイス操作。
/dev/char/キャラクターデバイス(例: キーボード)の管理ディレクトリ。キャラクターデバイス操作。

参考

おわりに

任意のサイズのファイルを作成を学んだ。
テスト用でとっさに用意するというときに便利かも。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。