190

テスト目的で、特定のサイズのファイルを生成する必要があります (アップロード制限をテストするため)。

Linuxで特定のサイズのファイルを作成するコマンドは何ですか?

4

13 に答える 13

217

小さなファイルの場合:

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
于 2008-09-26T12:53:11.010 に答える
196

現代の方が簡単で速いです。Linux の場合 (1 つ選択)

truncate -s 10G foo
fallocate -l 5G bar

スパース ファイルをサポートするファイル システムでは、 はスパース ファイルを作成し、作成しないことを述べる必要があります。スパース ファイルは、ファイルを構成するアロケーション ユニットが使用されるまで実際には割り当てられないファイルです。ただし、ファイルのメタデータはかなりのスペースを占有します、ファイルの実際のサイズにはほど遠い可能性があります。このタイプのファイルには長所と短所があるため、詳細については、スパース ファイルに関するリソースを参照してください。非スパース ファイルには、そのブロック (アロケーション ユニット) が事前に割り当てられています。つまり、ファイル システムが認識する限り、スペースは予約されています。また、ファイルの内容を指定された値に設定することもありませtruncatefallocatefallocatetruncate dd代わりに、割り当てられたファイルの内容は、作成中に割り当てられたユニットに存在するゴミの値である可能fallocatetruncateがあり、この動作が望ましい場合と望ましくない場合があります。はdd、コマンド ライン オプションで指定されたとおりに値またはデータのチャンクをファイル ストリーム全体に実際に書き込むため、最も低速です。

この動作は、使用されるファイル システムと、そのファイル システムの標準または仕様への適合性に応じて、異なる可能性があります。したがって、適切な方法が使用されるように、適切な調査を行うことをお勧めします。

于 2012-01-03T00:25:59.383 に答える
41

Tomの投稿をフォローアップするために、ddを使用してスパースファイルを作成することもできます。

dd if=/dev/zero of=the_file bs=1 count=0 seek=12345

これにより、ほとんどのUNIXで「穴」のあるファイルが作成されます。データは実際にはディスクに書き込まれず、ゼロ以外のものが書き込まれるまでスペースを占有しません。

于 2008-09-26T13:11:29.577 に答える
28

次のコマンドを使用します。

dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS

大きな (空の) ファイルを作成するには、 を設定し$INPUT-FILE=/dev/zeroます。
ファイルの合計サイズは になります$BLOCK-SIZE * $NUM-BLOCKS
作成される新しいファイルは$OUTPUT-FILE.

于 2008-09-26T12:52:02.090 に答える
25

OSX (および Solaris のようです) では、次のmkfileコマンドも使用できます。

mkfile 10g big_file

これにより、「big_file」という名前の 10 GB のファイルが作成されます。ここでこのアプローチを見つけました。

于 2012-01-02T23:32:05.370 に答える
17

プログラムでそれを行うことができます:

#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

于 2008-10-28T23:17:08.850 に答える
12

これらの回答のいくつかは/dev/zero、データのソースとして使用しています。テスト用のネットワーク アップロード速度が速い場合、アプリケーションが何らかの圧縮を行っている場合、これは最良のアイデアではない可能性があります。ゼロでいっぱいのファイルは非常にうまく圧縮されます。このコマンドを使用してファイルを生成する

 dd if=/dev/zero of=upload_test bs=10000 count=1

upload_test約 200 バイトまで圧縮できました。したがって、10KB のファイルをアップロードすると思っていても、実際にはもっと少ないという状況に陥ることがあります。

私が提案するのは、/dev/urandomの代わりに使用することです/dev/zero。の出力をまったく圧縮できませんでした/dev/urandom

于 2013-09-16T16:50:11.017 に答える
11

あなたができること:

[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext

100を書き込みたいバイト数に置き換えます。

于 2008-09-26T12:52:46.910 に答える
9
dd if=/dev/zero of=my_file.txt count=12345
于 2008-09-26T12:52:19.687 に答える
7

これにより、現在のディレクトリにランダムな文字を含む 4 MB のテキスト ファイルが生成され、その名前は "4mb.txt" です。パラメータを変更して、さまざまなサイズと名前を生成できます。

base64 /dev/urandom | head -c 4000000 > 4mb.txt
于 2016-07-21T12:55:50.963 に答える
5

多くの答えがありますが、他に何ができるかをうまく説明しているものはありません。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

  • すべての例で、bs はブロック サイズ、count はブロック数です。
  • BLOCKS と BYTES の後には、次の乗法接尾辞を付けることができます: c =1、w =2、b =512、kB =1000、K =1024、MB =1000*1000、M =1024*1024、xM =M GB =1000 *1000*1000、G =1024*1024*1024 など、T、P、E、Z、Y についても同様です。
于 2013-09-27T12:54:10.790 に答える
3

シェルコマンドとして:

< /dev/zero head -c 1048576 >  output
于 2012-10-24T18:25:31.770 に答える