テスト目的で、特定のサイズのファイルを生成する必要があります (アップロード制限をテストするため)。
Linuxで特定のサイズのファイルを作成するコマンドは何ですか?
テスト目的で、特定のサイズのファイルを生成する必要があります (アップロード制限をテストするため)。
Linuxで特定のサイズのファイルを作成するコマンドは何ですか?
小さなファイルの場合:
dd if=/dev/zero of=upload_test bs=file_size count=1
file_size
テストファイルのサイズ(バイト単位)はどこにありますか。
大きなファイルの場合:
dd if=/dev/zero of=upload_test bs=1M count=size_in_megabytes
現代の方が簡単で速いです。Linux の場合 (1 つ選択)
truncate -s 10G foo
fallocate -l 5G bar
スパース ファイルをサポートするファイル システムでは、 はスパース ファイルを作成し、作成しないことを述べる必要があります。スパース ファイルは、ファイルを構成するアロケーション ユニットが使用されるまで実際には割り当てられないファイルです。ただし、ファイルのメタデータはかなりのスペースを占有しますが、ファイルの実際のサイズにはほど遠い可能性があります。このタイプのファイルには長所と短所があるため、詳細については、スパース ファイルに関するリソースを参照してください。非スパース ファイルには、そのブロック (アロケーション ユニット) が事前に割り当てられています。つまり、ファイル システムが認識する限り、スペースは予約されています。また、ファイルの内容を指定された値に設定することもありませんtruncate
fallocate
fallocate
truncate
dd
代わりに、割り当てられたファイルの内容は、作成中に割り当てられたユニットに存在するゴミの値である可能fallocate
性truncate
があり、この動作が望ましい場合と望ましくない場合があります。はdd
、コマンド ライン オプションで指定されたとおりに値またはデータのチャンクをファイル ストリーム全体に実際に書き込むため、最も低速です。
この動作は、使用されるファイル システムと、そのファイル システムの標準または仕様への適合性に応じて、異なる可能性があります。したがって、適切な方法が使用されるように、適切な調査を行うことをお勧めします。
Tomの投稿をフォローアップするために、ddを使用してスパースファイルを作成することもできます。
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
これにより、ほとんどのUNIXで「穴」のあるファイルが作成されます。データは実際にはディスクに書き込まれず、ゼロ以外のものが書き込まれるまでスペースを占有しません。
次のコマンドを使用します。
dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS
大きな (空の) ファイルを作成するには、 を設定し$INPUT-FILE=/dev/zero
ます。
ファイルの合計サイズは になります$BLOCK-SIZE * $NUM-BLOCKS
。
作成される新しいファイルは$OUTPUT-FILE
.
OSX (および Solaris のようです) では、次のmkfile
コマンドも使用できます。
mkfile 10g big_file
これにより、「big_file」という名前の 10 GB のファイルが作成されます。ここでこのアプローチを見つけました。
プログラムでそれを行うことができます:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd = creat("/tmp/foo.txt", 0644);
ftruncate(fd, SIZE_IN_BYTES);
close(fd);
return 0;
}
このアプローチは、後でファイルをメモリにmmapするのに特に役立ちます。
次のコマンドを使用して、ファイルのサイズが正しいことを確認します。
# du -B1 --apparent-size /tmp/foo.txt
気をつけて:
# du /tmp/foo.txt
ファイルシステムでサポートされている場合、スパースファイルとして割り当てられるため、おそらく0が出力されます。
参照: man 2 openおよびman 2 truncate
これらの回答のいくつかは/dev/zero
、データのソースとして使用しています。テスト用のネットワーク アップロード速度が速い場合、アプリケーションが何らかの圧縮を行っている場合、これは最良のアイデアではない可能性があります。ゼロでいっぱいのファイルは非常にうまく圧縮されます。このコマンドを使用してファイルを生成する
dd if=/dev/zero of=upload_test bs=10000 count=1
upload_test
約 200 バイトまで圧縮できました。したがって、10KB のファイルをアップロードすると思っていても、実際にはもっと少ないという状況に陥ることがあります。
私が提案するのは、/dev/urandom
の代わりに使用することです/dev/zero
。の出力をまったく圧縮できませんでした/dev/urandom
。
あなたができること:
[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext
100を書き込みたいバイト数に置き換えます。
dd if=/dev/zero of=my_file.txt count=12345
これにより、現在のディレクトリにランダムな文字を含む 4 MB のテキスト ファイルが生成され、その名前は "4mb.txt" です。パラメータを変更して、さまざまなサイズと名前を生成できます。
base64 /dev/urandom | head -c 4000000 > 4mb.txt
多くの答えがありますが、他に何ができるかをうまく説明しているものはありません。ddのman ページを調べると、ファイルのサイズをより適切に指定できます。
これにより、サイズが 20 メガバイトのゼロで満たされた /tmp/zero_big_data_file.bin が作成されます。
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
これは、サイズが 1000 バイトのゼロで満たされた /tmp/zero_1000bytes_data_file.bin を作成します。
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
また
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
シェルコマンドとして:
< /dev/zero head -c 1048576 > output