CLOVER🍀

That was when it all began.

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

これは、なにをしたくて書いたもの?

Linuxで、任意のサイズのファイルを簡単に作るには?ということで。
メモしておこうかなと。

バイナリファイル、テキストファイルそれぞれを作成する場合で書こうと思います。

環境

今回の環境は、こちら。Ubuntu Linux 20.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal


$ uname -srvmpio
Linux 5.4.0-88-generic #99-Ubuntu SMP Thu Sep 23 17:29:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

バイナリファイルを作成する場合

これはddコマンドなのかなと思っていたのですが、fallocateというコマンドもあるようです。

fallocate(1) - Linux manual page

ddよりも、かなり高速なようです。

使い方。

$ fallocate -l [サイズ] [ファイル名]

たとえば、100MBのファイルを作成する場合。-lで、作成するファイルのサイズを指定します。

$ fallocate -l 100M dummy_from_fallocate.txt

結果。

$ ll -h dummy_from_fallocate.txt
-rw-rw-r-- 1 xxxxx xxxxx 100M 10月 20 00:18 dummy_from_fallocate.txt


$ ll dummy_from_fallocate.txt
-rw-rw-r-- 1 xxxxx xxxxx 104857600 10月 20 00:18 dummy_from_fallocate.txt

おなじみのddコマンドも。

dd(1) - Linux manual page

100MBのファイルを作成する例で。bsで指定のサイズを、countで指定した回数分だけ書き込みます。
今回は、1MB × 100ですね。

$ dd if=/dev/zero of=dummy_from_dd.txt bs=1M count=100

結果。

$ ll -h dummy_from_dd.txt
-rw-rw-r-- 1 xxxxx xxxxx 100M 10月 20 00:20 dummy_from_dd.txt


$ ll dummy_from_dd.txt
-rw-rw-r-- 1 xxxxx xxxxx 104857600 10月 20 00:20 dummy_from_dd.txt

テキストファイルを作成する場合

テキストファイルを作成する場合は、base64とheadを組み合わせれば良さそうです。

base64(1) - Linux man page

$ base64 /dev/urandom | head -c [バイト数] > [ファイル名]

たとえば、100MBのテキストファイルを作成する場合。

$ base64 /dev/urandom | head -c 104857600 > dummy.txt

結果。

$ ll -h dummy.txt
-rw-rw-r-- 1 xxxxx xxxxx 100M 10月 20 00:17 dummy.txt


$ ll dummy.txt
-rw-rw-r-- 1 xxxxx xxxxx 104857600 10月 20 00:17 dummy.txt

ファイルの中身は、こんな感じになります。

$ head dummy.txt
iotm1YHXpQHOkzX5mnmhWLc8wIxxNGphtK8ZVwtB04eAzvJX1iLX127P+UqtDoef1yZq8f1+EAu2
zvIO9W17Z6VA03I1LoC14onEvZtg6ZAszR0X8Ittb9fkq9m0jnZOUXZgQIqV91u21qeZ3Ueo430T
Do2dghdWyqLjderJreciGQIsIXNVEGO1R9AaFQcrWE4Fh0RYG0RPvorVvW6wFSVCqlkapPycvWHA
gmNZb+yVc0jKQfpx06u6gUvanvZX8/5ojvI2avGqijad8+c4rFDJKj36jvnYUnXMIb7HLu3HLHfB
kDlSwmGvLNjXwI4ad8RwD0nxX+g54i9MaVeBGRC5Qk7o79MSEsvuQbsTSEQdKEzdQvXHycYaZygZ
8Vx9xKJHT3dRw/Gxm3fefgysEqVL2sLVB3xpgAsA8JfPrrwzdeQsC22M5qy6seqocQdsa6E0Sf4X
OnRwRs3PdKgozZkhAzwNtdADFkbcPL5opEj9XANZ7HXO6EhMbTQ2PaBfNfDAnKhkv7VcRm80N+gR
WkoRw8JvxPS+anVjGfeZHjqLsAl+/yMsuOjKCTMI8ZkzqghNEZHvW6msO5zDtShiLGcEQXsWQK9l
u6dC0oJim2MtUNe0BB3Q3qb2IQ5nRHZdQxTxteEom2xtRtp0Dj3ZDI2V7HnFKgpXXSmJ+gLPfn6T
0JbvxkcEnHlHDNA+9e8LiaUg1nkibQ4by8e0l9UZQwllQW+qSJuqwHBqerv7AQXaTolYMt40mTtw

ちょっとした確認用に、覚えておきましょう。