为了进行测试目的,我需要生成一个特定大小的文件(以测试上传限制)。在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
dd if=/dev/zero of=test bs=1M count=<以兆字节为单位的大小>
。 - Dmytro Sirenkotruncate -s 10G foo
fallocate -l 5G bar
truncate
命令会创建一个稀疏文件,而fallocate
则不会。稀疏文件是指文件的分配单元在使用之前并没有实际分配。文件的元数据会占用一定的空间,但很可能远远不及文件的实际大小。关于稀疏文件的更多信息,您应该查阅相关资源,因为这种类型的文件有其优点和缺点。非稀疏文件会提前分配其块(分配单元),这意味着从文件系统的角度来看,空间已经被保留。此外,fallocate
和truncate
都不会像dd
那样将文件内容设置为指定的值,而是在创建时分配的文件的内容可能是任何存在于分配单元中的垃圾值,这种行为可能是有意的,也可能不是。dd
是最慢的,因为它实际上会根据命令行选项将值或数据块写入整个文件流中。truncate
。使用上述语法它生成了一个大小为零的文件。fallocate
的“man page”说它创建的文件充满空的“空间”,而不是数据。看起来它对于一些预期情况,比如“复制一个1G文件需要多长时间”,并没有什么用处。 - Mark Stosbergbrew install coreutils
。这将在命令前面添加一个“g”,所以你需要这样运行它:gtruncate -s 10G foo
。希望这能帮到你! - DerekENTFS
分区上无法工作。 - eloyesp为了跟进Tom的帖子,你也可以使用dd创建稀疏文件:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
这将在大多数Unix系统上创建一个具有“空洞”的文件-实际上,数据在写入非零值之前不会被写入磁盘,也不会占用任何空间。
count=0
时,bs * seek
等于文件大小。 - Jayen使用以下命令:
dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS
要创建一个大的(空的)文件,请设置 $INPUT-FILE=/dev/zero
。
文件总大小将为 $BLOCK-SIZE * $NUM-BLOCKS
。
新文件将被创建为 $OUTPUT-FILE
。
dd
也可以像上面描述的那样工作,但是它的单位是“m”,而不是“M”。 - user535673你可以通过编程来实现:
#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;
}
# du -B1 --apparent-size /tmp/foo.txt
小心:
# du /tmp/foo.txt
这段代码可能会打印0,因为如果你的文件系统支持Sparse file,它会被分配。
另请参阅: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
的输出进行很大程度的压缩。
/dev/zero
,所以使用/dev/urandom
是好的。 - Fredrick Gauss你可以这样做:
[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext
用你想写入的字节数替换100。
如果你不想等待磁盘,可以使用fallocate
。
例如:
fallocate -l 100G BigFile
使用方法:
Usage:
fallocate [options] <filename>
Preallocate space to, or deallocate space from a file.
Options:
-c, --collapse-range remove a range from the file
-d, --dig-holes detect zeroes and replace with holes
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <num> length for range operations, in bytes
-n, --keep-size maintain the apparent size of the file
-o, --offset <num> offset for range operations, in bytes
-p, --punch-hole replace a range with a hole (implies -n)
-z, --zero-range zero and ensure allocation of a range
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose verbose mode
-h, --help display this help
-V, --version display version
dd if=/dev/zero of=my_file.txt count=12345