出于测试目的,我必须生成一定大小的文件(以测试上传限制)。
在Linux上创建特定大小文件的命令是什么?
答案 0 :(得分:172)
dd if=/dev/zero of=upload_test bs=file_size count=1
其中file_size
是测试文件的大小(以字节为单位)
答案 1 :(得分:147)
请,现代更容易,更快。在Linux上,(选择一个)
truncate -s 10G foo
fallocate -l 5G bar
需要表明支持稀疏文件的文件系统上的truncate
将创建稀疏文件,而fallocate
则不会。稀疏文件是指组成文件的分配单元在使用之前实际分配的文件。然而,文件的元数据占用了相当大的空间,但可能没有接近文件的实际大小。您应该查阅有关稀疏文件的资源以获取更多信息,因为此类文件有优点和缺点。非稀疏文件具有提前分配的块(分配单元),这意味着只要文件系统看到空间就保留空间。另外,fallocate
和truncate
也不会将文件的内容设置为指定值,如 dd
,而是将文件的内容设置为fallocate
}或truncate
可以是在创建期间分配的单元中存在的任何垃圾值,并且可能需要或可能不需要此行为。 dd
是最慢的,因为它实际上将数据的值或块写入整个文件流,如其命令行选项所指定的那样。
此行为可能会有所不同 - 具体取决于所使用的文件系统以及该文件系统与任何标准或规范的一致性。因此,建议进行适当的研究以确保使用适当的方法。
答案 2 :(得分:40)
只是跟进Tom's帖子,您也可以使用dd创建稀疏文件:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
这将在大多数unix上创建一个带有“洞”的文件 - 数据实际上不会被写入磁盘,或占用任何空间,直到写入非零的内容为止。
答案 3 :(得分:20)
使用此命令:
dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS
要创建一个大(空)文件,请设置$INPUT-FILE=/dev/zero
文件总大小为$BLOCK-SIZE * $NUM-BLOCKS
创建的新文件为$OUTPUT-FILE
。
答案 4 :(得分:20)
答案 5 :(得分: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 ,因为如果你的文件系统支持它,它会被分配为Sparse file。
另请参阅:man 2 open和man 2 truncate
答案 6 :(得分:10)
[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext
将100替换为要写入的字节数。
答案 7 :(得分:10)
其中一些答案让您使用/dev/zero
作为数据来源。如果你的测试网络上传速度很快,如果你的应用程序正在进行任何压缩,这可能不是最好的主意,一个充满零的文件压缩真的。使用此命令生成文件
dd if=/dev/zero of=upload_test bs=10000 count=1
我可以将upload_test
压缩到大约200个字节。因此,您可以将自己置于一个您认为上传10KB文件的情况,但实际上会少得多。
我建议使用/dev/urandom
代替/dev/zero
。我根本无法压缩/dev/urandom
的输出。
答案 8 :(得分:9)
dd if=/dev/zero of=my_file.txt count=12345
答案 9 :(得分:3)
作为shell命令:
< /dev/zero head -c 1048576 > output
答案 10 :(得分:3)
有很多答案,但没有一个能很好地解释还有什么可以做。查看man pages for dd,可以更好地指定文件的大小。
这将创建填充零的/tmp/zero_big_data_file.bin,其大小为20兆字节:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
这将创建填充零的/tmp/zero_1000bytes_data_file.bin,其大小为1000字节:
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
答案 11 :(得分:3)
这将在当前目录中生成带有随机字符的4 MB文本文件,其名称为“4mb.txt” 您可以更改参数以生成不同的大小和名称。
base64 /dev/urandom | head -c 4000000 > 4mb.txt
答案 12 :(得分:0)
如果您不想等待磁盘,请使用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