これは、なにをしたくて書いたもの?
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
コマンドも。
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 /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
ちょっとした確認用に、覚えておきましょう。