当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Linux中创建具有给定大小的文件?》经验,为你挑选了9个好方法。

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

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



1> Ilya Kocheto..:
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 = .
实际上,一旦它变得非常大,使用巨大的块大小会表现得更糟,因为它会在写入之前分配并读取该数量到内存中.如果这是像bs = 4GiB这样的东西,你可能最终会交换掉.
有关更好,更快的方法,请参阅下一个答案
@elegantdice不清楚下一个答案,他们可以改变自己的立场

2> jørgensen..:

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

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

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

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


fallocate对我来说似乎很好.它创建一个正确大小的文件.
这是这个问题的最佳答案.truncate/fallocate不需要很长时间,因为它不会写入所有文件的块.但是,如果你要将结果文件上传到某个地方,它会读取整个事件的零.
如果你想在OSX下运行它,那么你需要这样做:`brew install coreutils`.这将在命令前面添加一个**g**,所以你必须像这样运行它:`gtruncate -s 10G foo`.希望这可以帮助!

3> Brian..:

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

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

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


使用`count = 0`,`bs*seek`成为文件大小

4> steve..:

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

mkfile 10g big_file

这使得一个名为"big_file"的10 GB文件成为可能.在这里找到这种方法.



5> Grundlefleck..:

使用此命令:

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

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


我不得不谷歌的答案,所以我把它放在这里,所以它可以讨论并保持最新...你知道,整个网站的重点?
谢谢保罗.虽然我对这些问题并不感到困扰,但我对我在Google上发现的事情感到困扰,除非我在这里提出要求,否则我可能会以某种方式存在缺陷.如果他们认为我正在嫖娼,那么人们应该随意让我的Q/A社区拥有,*耸耸肩*.
我知道人们正在投票给@Grundlefleck for XP whoring,但他确实有一个观点 - Jeff和Joel设想的使用这个网站的方法之一是为你刚发现的东西提出问题和答案.
引用常见问题解答"请求和回答你自己的编程问题也很好,但假装你是在Jeopardy上:用问题的形式说出来."

6> Benedikt Wal..:

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

#include 
#include 
#include 
#include 
#include 

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,因为如果您的文件系统支持它,它将被分配为稀疏文件.

另见:男子2打开,男子2截断



7> dsm..:

你可以这样做:

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

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



8> devin..:

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

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

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

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



9> Paul Tomblin..:
dd if=/dev/zero of=my_file.txt count=12345


请记住,dd的默认块大小为512字节,因此该命令将使文件大小为12345*512字节.
推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有