web-dev-qa-db-ja.com

Linuxで特定のサイズのファイルを作成する方法は?

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

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

141
Grundlefleck
dd if=/dev/zero of=upload_test bs=file_size count=1

file_sizeは、テストファイルのサイズ(バイト単位)です。

174
Ilya Kochetov

モダンは簡単で高速です。 Linuxの場合(1つを選択)

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

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

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

152
jørgensen

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

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

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

40
Brian

OSX(および明らかにSolaris)では、mkfileコマンドも利用できます。

mkfile 10g big_file

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

21
steve

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

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

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

20
Grundlefleck

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

#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

ファイルシステムでサポートされている場合、 スパースファイル として割り当てられているため、おそらくを印刷します。

次も参照してください: man 2 open および man 2 truncate

17

あなたができる:

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

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

10
dsm

これらの回答の中には、データソースとして/dev/zeroを使用しているものがあります。テストネットワークのアップロード速度が向上する場合、アプリケーションが圧縮を実行している場合、これは最善のアイデアではないかもしれません。ゼロでいっぱいのファイルはreallyを圧縮します。このコマンドを使用してファイルを生成する

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

upload_testを約200バイトに圧縮できました。そのため、10KBのファイルをアップロードすると思うかもしれませんが、実際にはそれよりはるかに少ない状況になります。

/dev/urandomの代わりに/dev/zeroを使用することをお勧めします。 /dev/urandomの出力をまったく圧縮できませんでした。

10
devin
dd if=/dev/zero of=my_file.txt count=12345
9
Paul Tomblin

たくさんの答えがありますが、他に何ができるかをうまく説明している人はいません。 ddのマニュアルページ を調べると、ファイルのサイズをより適切に指定できます。

これにより、サイズが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の場合.
3
BЈовић

シェルコマンドとして:

< /dev/zero head -c 1048576 >  output
3
user1772090

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

base64 /dev/urandom | head -c 4000000 > 4mb.txt
3
Berkay92