Shell 生成任意大小的文件,包含随机数据的文件可用于测试。你可以使用这种文件测试应用程序效率,确定应用程序没有输入方面的缺陷和大小方面的限制,创建环回文件系统(环回文件自身包含文件系统,这种文件可以像物理设备一样使用mount
命令进行挂载)等。Linux提供了一些可用于构建此类文件的实用工具。
实战演练
创建特定大小的文件最简单的方法就是利用dd
命令。dd
命令会克隆给定的输入内容,然后将一模一样的一份副本写入到输出。stdin
、设备文件、普通文件等都可作为输入,stdout
、设备文件、普通文件等也可作为输出。下面是使用dd
命令的一个示例:
$ dd if=/dev/zero of=junk.data bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00767266 s, 137 MB/s
该命令会创建一个内容全部为零的1MB大小的文件junk.data。
来看一下命令参数:
if
表示输入文件(input file);-
of
表示输出文件(output file); -
bs
指定了以字节为单位的块大小(block size); -
count
表示需要被复制的块数。
以root身份使用
dd
命令时一定得留意,该命令运行在设备底层。要是你不小心出了岔子,搞不好会把磁盘清空或是损坏数据。一定要反复检查dd
命令所用的语法是否正确,尤其是参数of=
。
在上面的例子中,我们将bs
指定为1MB,count
指定为1,于是得到了一个大小为1MB的文件。如果把bs
设为2MB,count
设为2,那么总文件大小就是4MB。
块大小(bs)可以使用各种计量单位,下表中任意一个字符都可以置于表示大小的数字之后。
单元大小 | 代码 |
---|---|
字节(1B) | C |
字(2B) | w |
块(512B) | B |
千字节(1024B) | K |
兆字节(1024KB) | M |
吉字节(1024MB) | G |
我们可以利用bs
来生成任意大小的文件。除了MB,表中给出的其他计量单位都可以使用。
/dev/zero
是一个特殊的字符设备,它会返回0值字节(\0
)。如果不指定输入参数(if
),dd
会从stdin
中读取输入。如果不指定输出参数(of
),则dd
会使用stdout
作为输出。
使用dd
命令也能够用来测量内存操作的速度,这可以通过向/dev/null
传输大量数据并观察命令输出来实现(例如,在前一个例子中显示出的1048576 bytes (1.0 MB) copied, 0.00767266 s, 137 MB/s
)。