如何在Linux中创build一个给定大小的文件?
出于testing目的,我必须生成一定大小的文件(以testing上传限制)。
什么是在Linux上创build一定大小的文件的命令?
dd if=/dev/zero of=upload_test bs=file_size count=1
其中file_size
是testing文件的大小(以字节为单位)
请,现代更容易,更快。 在Linux上,(选一个)
truncate -s 10G foo fallocate -l 5G bar
需要说明的是,在一个支持稀疏文件的文件系统上truncate
会创build一个稀疏文件,而不是。 稀疏文件是构成文件的分配单元在使用之前不被实际分配的文件。 文件的元数据将占用相当大的空间,但可能没有接近文件的实际大小。 您应该咨询有关稀疏文件的资源以了解更多信息,因为这种types的文件有优点和缺点。 非稀疏文件的块(分配单元)提前分配,这意味着只要文件系统看到该空间就保留该空间。 另外, fallocate
和truncate
不会将文件的内容设置为指定的值, 如 dd
,而是使用fallocate
或truncate
分配的文件的内容可能是创build期间分配的单元中存在的任何垃圾值,此行为可能会也可能不会被期望。 dd
是最慢的,因为它实际上是将数据的值或数据块写入整个文件stream,如命令行选项所指定的那样。
这种行为可能会有所不同 – 取决于所使用的文件系统以及该文件系统与任何标准或规范的一致性。 因此build议进行适当的研究以确保使用适当的方法。
为了跟上Tom的post,你可以使用dd创build稀疏文件:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
这将在大多数unix中创build一个带有“空洞”的文件 – 数据实际上不会写入磁盘,或者占用任何空间,直到写入零以外的内容为止。
使用这个命令:
dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
要创build一个大的(空的)文件,请设置$INPUT-FILE=/dev/zero
。
文件的总大小将是$BLOCK-SIZE * $NUM-BLOCKS
。
新build的文件将是$OUTPUT-FILE
。
在OSX(和Solaris,显然)上, mkfile
命令也是可用的:
mkfile 10g big_file
这会产生一个名为“big_file”的10 GB文件。 在这里find这个方法。
你可以通过编程来完成
#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,因为它被分配为稀疏文件(如果文件系统支持)。
又见: 男人2打开 , 男人2截断
dd if=/dev/zero of=my_file.txt count=12345
你可以这样做:
[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext
用你想写的字节数replace100。
其中一些答案使用/dev/zero
作为数据源。 如果您的testingnetworking上传速度,这可能不是最好的主意,如果您的应用程序正在进行任何压缩,一个文件充满零压缩真的很好。 使用这个命令来生成文件
dd if=/dev/zero of=upload_test bs=10000 count=1
我可以将upload_test
压缩到大约200字节。 所以你可以把自己放在你认为你上传一个10KB文件的情况下,但实际上它会less得多。
我build议使用/dev/urandom
而不是/dev/zero
。 我根本无法压缩/dev/urandom
的输出。
作为shell命令:
< /dev/zero head -c 1048576 > output
有很多答案,但没有一个很好地解释还有什么可以做的。 查看dd的手册页 ,可以更好地指定文件的大小。
这将创build/tmp/zero_big_data_file.bin填充零,大小为20兆字节:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
这将创build填充为零的/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
我想最有效的方法是使用open
(使用O_CREAT
和O_WRONLY
标志,除非你想从同一个程序中的文件中读取)创build文件,并用ftruncate设置大小。