为了测试,我必须生成一定大小的文件(以测试上传限制)。
在Linux上创建一定大小的文件的命令是什么?
为了测试,我必须生成一定大小的文件(以测试上传限制)。
在Linux上创建一定大小的文件的命令是什么?
Answers:
dd if=/dev/zero of=upload_test bs=file_size count=1
file_size
测试文件的大小在哪里(以字节为单位)
dd
值的上限为2 ^ 32,因此要创建一个大于4 GB的文件,有一个技巧:dd if=/dev/zero of=test bs=1M count=<size in megabytes>
。
拜托,现代更容易,更快。在Linux上,(选择一个)
truncate -s 10G foo
fallocate -l 5G bar
它需要被指出truncate
的文件系统上支持稀疏文件将创建一个稀疏文件,fallocate
不会。稀疏文件是组成文件的分配单元只有在使用后才真正分配的文件。但是,文件的元数据将占用一些相当大的空间,但可能不会接近文件的实际大小。您应该查阅有关稀疏文件的资源,以获取更多信息,因为这种类型的文件有其优点和缺点。非稀疏文件会提前分配其块(分配单位),这意味着在文件系统看到的范围内,空间已保留。此外fallocate
,也truncate
不会将文件的内容到指定值像 dd
,而是分配给文件的内容,fallocate
或者该文件的内容truncate
可以是创建期间分配单元中存在的任何垃圾值,并且可能不需要,也可能不需要此行为。这dd
是最慢的,因为它实际上按照其命令行选项的指定将值或数据块写入整个文件流。
此行为可能会有所不同-取决于所使用的文件系统以及该文件系统是否符合任何标准或规范。因此,建议进行适当的研究以确保使用适当的方法。
truncate
。它使用上面的语法生成了一个大小为零的文件。的“手册页” fallocate
表示创建的文件充满了空白space
而不是数据。在某些预期情况下,例如“复制1G文件需要多长时间”,这似乎没有用。
brew install coreutils
。这将在命令前面添加g,因此您必须像这样运行它:gtruncate -s 10G foo
。希望这可以帮助!
NTFS
分区上不起作用。
只是为了跟进Tom的帖子,您也可以使用dd创建稀疏文件:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
这将在大多数Unix上创建一个带有“空洞”的文件-数据实际上不会写入磁盘,也不会占用任何空间,直到将零以外的内容写入磁盘为止。
count=0
,bs * seek
成为文件大小
使用以下命令:
dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
要创建一个大(空)文件,请设置$INPUT-FILE=/dev/zero
。
文件的总大小为$BLOCK-SIZE * $NUM-BLOCKS
。
创建的新文件将为$OUTPUT-FILE
。
您可以通过编程方式执行此操作:
#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,因为如果文件系统支持,则它将分配为稀疏文件。
您可以将其中一些答案/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
很好。
有很多答案,但是没有一个很好的解释其他可以做什么。展望手册页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
使用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