前沿:最近在开发自动从U盘拷贝大批量文件到linux系统的的功能。由于需要几十个G的大文件来做测试,如果自己去找这么多资源,然后再拷贝,非常麻烦。所以学了下dd命令,现在总结一下:
一、参数介绍
if=FILE从FILE中读取数据,而不是默认的标准输入。 if可理解为:in file
of=FILE 往FILE中写入数据,而不是默认的标准输出。 of可理解为:out file
ibs=BYTES 读取数据时,一次性读出BYTES大小的块,如果不指定,默认512字节。
obs=BYTES 写入数据时,一次性写入BYTES大小的块,如果不指定,默认512字节。
bs=bytes #输入输出块大小。同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
cbs=bytes #一次转换 bytes 个字节,即转换缓冲区大小。。
skip=N跳过N*ibs字节数再开始读取数据。
seek=N 跳过N*obs字节数再开始写入数据。
count=N 总共读取N*ibs字节数的数据,当然写入的数据也是这个大小。
二、创建指定文件大小,并且写入U盘
dd if=/dev/zero of=hi.mp4 bs=1M count=1000
在当前目录下会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。
三、创建指定文件大小,但是不写入U盘(创建速度非常快)
我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘
dd if=/dev/zero of=test bs=1M count=0 seek=100000
此时创建的文件在文件系统中的显示大小为100000MB,但是并不实际占用block,因此创建速度与内存速度相当,seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。当然,因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的。
四、批量随机生成 40个1G的大mp4文件,我用的就是这个:
seq 40 |xargs -i dd if=/dev/zero 0f={}.mp4 bs=1001001024 count=1