はじめに
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/zero | 0(ゼロ)バイトを無限に返すデバイス。 | ダミーファイルの作成、メモリの初期化。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/sdX | SCSI ディスクや SATA ドライブを表す。例: /dev/sda 。 | ハードディスクやSSDのパーティション。 |
/dev/loopX | ループバックデバイス。例: /dev/loop0 。 | ISOイメージのマウント。mount -o loop file.iso /mnt |
/dev/cdrom | CD/DVD ドライブへのシンボリックリンク。 | 光学ドライブのアクセス。 |
/dev/fdX | フロッピーディスクデバイス。例: /dev/fd0 。 | フロッピーディスクの操作。 |
/dev/srX | 光学ディスクデバイス(例: CD/DVDドライブ)。例: /dev/sr0 。 | CD/DVD の読み取りや書き込み。 |
/dev/bus/usb/ | USB デバイスのファイルシステム構造を提供するディレクトリ。 | USBデバイスの管理。 |
/dev/input/ | キーボードやマウスなど、入力デバイスを表すディレクトリ。 | 入力デバイスのイベント監視。例: /dev/input/event0 |
/dev/mem | 物理メモリ全体へのアクセスを提供するデバイスファイル。 | デバッグやカーネルの開発。 |
/dev/kmem | カーネルメモリへのアクセスを提供するデバイス。 | カーネルデバッグ用。 |
/dev/mapper/ | LVM(論理ボリュームマネージャー)や暗号化されたデバイスの管理ディレクトリ。 | 暗号化ディスクやLVMの管理。 |
/dev/ttyS0 | シリアルポートデバイス(COMポート)。 | シリアル通信。例: モデムやシリアル機器との接続。 |
/dev/net/tun | TUN/TAP 仮想ネットワークデバイスの設定用。 | VPNや仮想ネットワークの構築。 |
/dev/block/ | ブロックデバイス(例: ハードディスク)の管理ディレクトリ。 | ブロックデバイス操作。 |
/dev/char/ | キャラクターデバイス(例: キーボード)の管理ディレクトリ。 | キャラクターデバイス操作。 |
参考
【Windows 11対応】巨大サイズのファイルをfsutilコマンドで簡単に作る
https://atmarkit.itmedia.co.jp/ait/articles/0209/28/news002.htmlLinux で任意のサイズのファイルを作る
https://qiita.com/toshihirock/items/6cb99a85d86f524bc153Linuxでのダミーファイルの作成
https://qiita.com/Yorcna/items/860c8ccc288a4a613ecblinuxのデバイスファイル(/dev)一覧
https://zenn.dev/ysuito/articles/5abf6e3e6a8c13
おわりに
任意のサイズのファイルを作成を学んだ。
テスト用でとっさに用意するというときに便利かも。