如何在Linux中创建具有给定大小的文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Linux中创建具有给定大小的文件?相关的知识,希望对你有一定的参考价值。

出于测试目的,我必须生成一定大小的文件(以测试上载限制)。

什么是在Linux上创建特定大小的文件的命令?

答案
dd if=/dev/zero of=upload_test bs=file_size count=1

其中file_size是测试文件的大小(以字节为单位)

另一答案

作为shell命令:

< /dev/zero head -c 1048576 >  output
另一答案

有很多答案,但没有一个很好地解释了还能做些什么。查看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

  • 在所有示例中,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。
另一答案

这将在当前目录中生成带有随机字符的4 MB文本文件,其名称为“4mb.txt”您可以更改参数以生成不同的大小和名称。

base64 /dev/urandom | head -c 4000000 > 4mb.txt
另一答案

请,现代更容易,更快。在Linux上,(选择一个)

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

需要说明的是,支持稀疏文件的文件系统上的truncate将创建稀疏文件,而fallocate则不会。稀疏文件是指组成文件的分配单元在使用之前未实际分配的文件。然而,该文件的元数据将占用相当大的空间,但可能没有接近文件的实际大小。您应该查阅有关稀疏文件的资源以获取更多信息,因为此类文件有优点和缺点。非稀疏文件具有提前分配的块(分配单元),这意味着只要文件系统看到空间就保留空间。此外,fallocatetruncate不会将文件的内容设置为像dd这样的指定值,而是使用fallocatetruncate分配的文件的内容可能是在创建期间分配的单元中存在的任何垃圾值,此行为可能会也可能不会希望。 dd是最慢的,因为它实际上将数据的值或块写入整个文件流,如其命令行选项所指定的那样。

此行为可能会有所不同 - 取决于所使用的文件系统以及该文件系统与任何标准或规范的一致性。因此,建议进行适当的研究以确保使用适当的方法。

另一答案

只是为了跟进Tom's帖子,您也可以使用dd创建稀疏文件:

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

这将在大多数unix上创建一个带有“洞”的文件 - 数据实际上不会写入磁盘,或占用任何空间,直到写入非零的内容。

另一答案

使用此命令:

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

要创建一个大(空)文件,请设置$INPUT-FILE=/dev/zero。 文件的总大小将是$BLOCK-SIZE * $NUM-BLOCKS。 创建的新文件将是$OUTPUT-FILE

另一答案

在OSX(和Solaris,显然)上,mkfile命令也可用:

mkfile 10g big_file

这使得一个名为“big_file”的10 GB文件成为可能。发现这种方法here.

另一答案

你可以通过编程方式完成:

#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 openman 2 truncate

另一答案

你可以这样做:

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

用您要写入的字节数替换100的位置。

另一答案

其中一些答案让您使用/dev/zero作为数据来源。如果您的测试网络上传速度很快,如果您的应用程序正在进行任何压缩,这可能不是最好的主意,一个充满零的文件压缩得非常好。使用此命令生成文件

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

我可以将upload_test压缩到大约200个字节。因此,您可以将自己置于一个您认为上传10KB文件的情况,但实际上会少得多。

我建议使用/dev/urandom而不是/dev/zero。我根本无法压缩/dev/urandom的输出。

另一答案
dd if=/dev/zero of=my_file.txt count=12345

以上是关于如何在Linux中创建具有给定大小的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux和windos中创建指定大小的文件

如何在 C 中创建具有设置权限/时间/等的文件?

尝试在 C 中创建对所有人具有完全权限的文件

在 Laravel 迁移中创建一个具有自定义大小的小整数列

如何在片段中创建选项卡的示例?

如何从终端窗口在 Linux 中创建文件? [关闭]