如何在 Linux 中创建具有给定大小的文件?
- 2024-10-31 08:38:00
- admin 原创
- 41
问题描述:
为了测试目的,我必须生成一定大小的文件(以测试上传限制)。
在 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
不会。稀疏文件是指组成文件的分配单元在使用前实际上并未分配的文件。然而,文件的元数据将占用相当大的空间,但可能远不及文件的实际大小。您应该查阅有关稀疏文件的资源以获取更多信息,因为这种类型的文件有优点也有缺点。非稀疏文件的块(分配单元)是提前分配的,这意味着空间被保留到文件系统所看到的程度。此外,fallocate
nortruncate
不会将文件的内容设置为指定的值,如 ,而是分配了或的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 大小的文件。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件