dd 是Unix或Unix-like操作系统中的一个命令行工具,用于在设备或文件间传输数据或转换数据。
dd 命令的常用选项如下:
if:指定输入(input)设备或文件。未指定则默认为stdin。
of:指定输出(output)设备或文件。未指定则默认为stdout。
bs:每次传输的块(block)的大小,单位为B(byte)。默认为512B。bs 的值可以指定单位,如bs=1b或bs=1k等。可用的单位有:c(1B)、b(block,512B)、k(1024B)等,更多见这里。
count:传输多少个块(块的大小由bs指定)。若未指定count,则直到输入数据耗尽(如文件遇到EOF),或输出空间满为止。如果是从stdin输入,则按ctrl+d可以结束输入。
skip:跳过前面skip个块(块的大小由bs指定)後再传输。
也就是说:dd命令会跳过 if 的前 skip*bs个字节,然后将 if 的 bs*count 个字节传输到 of 处。
例如:
dd if=/dev/zero of=/home/file bs=1k skip=1 count=50
将从 /dev/zero 跳过1k个字节后,传输 50k 个‘\0’ 到 /home/file 文件中。
所以,假设要跳过前面N个byte,则 bs 的大小要能整除N,即skip=N/bs,否则就无法跳过指定的N字节了。
conv:指定数据转换方式。如 lcase(把大写字符转换为小写字符)、ucase(把小写字符转换为大写字符)等。更多转换方式见这里。
更多用法可以参考这篇文章。
参考文档:
https://en.wikipedia.org/wiki/Dd_(Unix)
https://askubuntu.com/questions/798853/dd-different-unit-for-bs-skip-and-count