创建一个包含大量零字节的测试文件

rub*_*o77 29 command-line files

我知道如何创建一个空文件:

touch /var/tmp/nullbytes
Run Code Online (Sandbox Code Playgroud)

但是如何使用 bash 在命令行上创建一个仅包含空字节的 1MB 文件?

Sté*_*las 63

使用 GNU truncate

truncate -s 1M nullbytes
Run Code Online (Sandbox Code Playgroud)

(假设nullbytes事先不存在)将创建一个 1 MB 的稀疏文件。这是一个看起来充满零但不占用磁盘空间的文件。

没有truncate,您可以使用dd

dd bs=1048576 seek=1 of=nullbytes count=0
Run Code Online (Sandbox Code Playgroud)

(在某些dd实现中,您可以将 1048576 替换为1M

如果您希望分配磁盘空间,在 Linux 和某些文件系统上,您可以执行以下操作:

fallocate -l 1M nullbytes
Run Code Online (Sandbox Code Playgroud)

这会分配空间而不实际将数据写入磁盘(空间被保留但标记为未初始化)。

dd < /dev/zero bs=1048576 count=1 > nullbytes
Run Code Online (Sandbox Code Playgroud)

实际上会将零写入磁盘。这是效率最低的,但如果您在访问该文件时需要驱动器旋转,那么您将想要使用它。

或者@mikeserv 欺骗dd生成 NUL 字节的方法:

dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
Run Code Online (Sandbox Code Playgroud)

GNU 的另一种选择head,不需要指定块大小(1M 是可以的,但 10G 则不会):

head -c 1M < /dev/zero > nullbytes
Run Code Online (Sandbox Code Playgroud)

或者获取进度条:

pv -Ss 1M < /dev/zero > nullbytes
Run Code Online (Sandbox Code Playgroud)

  • fallocate 是最好和最快速的创建方式,因为它保留了空间并快速完成,但它不费心去写任何东西(http://stackoverflow.com/questions/257844/quickly-create-a-large-file-在 Linux 系统上) (3认同)

Zel*_*lda 28

dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M
Run Code Online (Sandbox Code Playgroud)