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

2024-10-31 08:38:00
admin
原创
184
摘要:问题描述:为了测试目的,我必须生成一定大小的文件(以测试上传限制)。 在 Linux 上创建一定大小的文件的命令是什么?解决方案 1:对于小文件:dd if=/dev/zero of=upload_test bs=file_size count=1 file_size您的测试文件的大小是多少(以字节为单位)。...

问题描述:

为了测试目的,我必须生成一定大小的文件(以测试上传限制)。

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


解决方案 1:

对于小文件:

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

解决方案 2:

拜托,现代更简单,也更快。在 Linux 上,(选一个)

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

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

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

解决方案 3:

为了跟进汤姆的帖子,您也可以使用 dd 来创建稀疏文件:

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

在大多数 UNIX 上,这会导致文件内出现“洞”——在将非零内容写入文件之前,数据不会真正写入磁盘,也不会占用任何空间。

解决方案 4:

使用此命令:

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

要创建一个大(空)文件,请设置$INPUT-FILE=/dev/zero

文件的总大小将为$BLOCK-SIZE * $NUM-BLOCKS

创建的新文件将为$OUTPUT-FILE

解决方案 5:

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

mkfile 10g big_file

这将生成一个名为“big_file”的 10 GB 文件。在此处找到了此方法。

解决方案 6:

您可以通过编程来实现:

#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,因为被分配为稀疏文件。

另请参阅:man 2 open和man 2 truncate

解决方案 7:

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

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

我可以压缩upload_test到大约 200 字节。因此,您可能会遇到这样的情况:您认为自己上传了一个 10KB 的文件,但实际上要小得多。

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

解决方案 8:

你可以这样做:

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

其中,将 100 替换为您要写入的字节数。

解决方案 9:

dd if=/dev/zero of=my_file.txt count=12345

解决方案 10:

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

base64 /dev/urandom | head -c 4000000 > 4mb.txt

解决方案 11:

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

解决方案 12:

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

解决方案 13:

作为 shell 命令:

< /dev/zero head -c 1048576 >  output

解决方案 14:

请运行以下命令在 Linux 中快速创建一定大小的较大文件

for i in {1..10};do fallocate -l 2G filename$i;done

解释:-上述命令将在几秒钟内创建 10 个 10GB 大小的文件。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用