dd 命令
用途
转换并复制文件。
语法
[conv= [ ascii |block|ebcdic | ibm | unblock ]
InputBlocks ] [ 文件=输入文件 ] [fskip=
SkipInputBlocks ][ span=是 ]
dd [ 选项=值 ]
描述
指定了大小的地方需要一定字节数。 由 w、b 或 k 结尾的数字表示分别与 2、512 或 1024 相乘;由 x 或 *(星号)隔开的两个数字说明是乘积。 count 参数表示待复制的块的数量,而不是字节的数量。
与 conv=ascii 和 conv=ebcdic 标志关联的字符集映射是互补操作。 这些标志在 ASCII 字符和大多数工作站和键控穿孔机上找到的 EBCDIC 字符子集间进行映射。
如果指定任何 block, unblock, ascii, ebcdic或 ibm 转换,请使用 cbs 参数值。 如果指定了 unblock 或 ascii 参数,那么 dd 命令将会执行一个固定长度到可变长度的转换。 否则它将执行从可变长度到固定长度的转换。 cbs 参数决定了该固定长度。
转换完成后,dd 命令将报告完整和部分输入输出块的数量。
- 通常您只需对输出文件的写许可。 但是,当输出文件不在直接访问设备上并且您使用 seek 标志时,您还需要对该文件的读访问权。
- 仅当使用 conv=ascii 或 conv=unblock 标志集进行转换时, dd 命令才会插入换行符; 仅当使用 conv=ebcdic, conv=ibm或 conv=block 标志集进行转换时,才会填充换行符。
- 尽可能使用 backup, tar或 cpio 命令 (而不是 dd 命令) 将文件复制到磁带。 这些命令被设计用来和磁带设备一起使用。 有关使用磁带设备的更多信息,请参阅 rmt 特殊文件。
- 使用 bs, ibs 和 obs 标志指定的块大小值必须始终是所使用介质的物理块大小的倍数。
- 当指定 conv=sync 标志时, dd 命令用空值填充任何部分输入块。 这样,如果任何读取没有接收到一个完整的数据块(由标志 ibs 指定),那么 dd 命令将在数据流中间插入空值。 从管道中读取时,经常会发生这种情况。
- 如果 bs 标志由它自身指定而除了 sync、noerror 或 notrunc 没有指定其他转换,那么从每个输入块得到的数据将会被作为一个单独的输出块写入;如果读入返回的值小于一个完整的块且没有指定 sync 标志,那么结果输出块将会和输入块的大小相同。 如果不指定 bs 标志或者指定了 sync、noerror 或 notrunc 之外的其他转换,那么输入将会被处理并收集到完整的输出块中,直到输入结束。
跨设备
如果 InFile 或 OutFile 参数是 stdin 或 stdout 时,那么 dd 的跨设备范围将不会出现。
在写的过程中如果输出设备已经写满,那么 dd 命令提示输入下一个设备时,将发生跨范围操作。 从输入设备读入时,如果数据已从设备中完全读取(即使设备没有到达结尾),那么 dd 也将提示下一个设备。 在这种情况下,需要按下‘n’退出。
标志
| 项 | 描述 |
|---|---|
| bs=块大小 | 指定输入和输出块大小,以取代 ibs 和 obs 标志。 由 bs 标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。 |
| cbs=块大小 | 指定可变长度到固定长度以及固定长度到可变长度转换的转换块大小,例如 conv=block。 |
| count=输入块 | 仅复制由 InputBlocks 变量指定的输入块的数量。 |
| conv= 转换,.... | 指定一个或者多个转换选项。 多个转换之间用逗号隔开。 以下清单描述了可能的选项:
|
| 文件=输入文件 | 在结束之前复制由 InputFiles 变量值指定的文件数(只对磁带或类似设备输入的有用)。 |
| fskip= 跳过EOF | 在开始复制之前跳过由 SkipEOFs 变量指定数量的文件结束符;该 SkipEOFs 变量在多文件磁带中进行定位时很有用。 |
| ibs=输入块大小 | 指定输入块的大小;缺省值为 512 字节或者一个块。 由 ibs 标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。 |
| 如果=InFile | 指定输入文件的名称;标准输入是缺省值。 |
| obs=输出块大小 | 指定输出块的大小;缺省值为 512 字节或者一个块。 由 obs 标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。 |
| 的=输出文件 | 指定输出文件的名称;标准输出是缺省值。 |
| seek=记录编号 | 在复制之前从输出文件的开始寻找由 RecordNumber 变量指定的记录。 |
| 跳过跳过输入块 | 在开始复制之前跳过指定的 SkipInputBlocks 值的输入块。 |
| 氨纶 =yes|no | 允许跨设备跨范围 (如果指定)yes并作为缺省值工作 (如果指定为no. 请参阅 跨设备生成,以获取更多信息。 |
退出状态
本命令返回以下退出值:
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | 输入文件已经成功复制。 |
| > 0 | 发生错误。 |
示例
- 要将 ASCII 文本文件转化为 EBCDIC,请输入:此命令将转换text.ascii文件到 EBCDIC 表示,将 EBCDIC 版本存储在text.ebcdic中。注: 当指定 conv=ebcdic 参数时, dd 命令将 ASCII ^ (抑扬符) 字符转换为未使用的 EBCDIC 字符 (9A 十六进制) ,将 ASCII ~ (波浪符) 转换为 EBCDIC ^ (NOT 符号)。
- 要将变长记录的 ASCII 文件 /etc/passwd 转换为一个固定长度为 132 字节的 EBCDIC 纪录,请输入:
- 要将每个记录为 132 字节的 EBCDIC 文件转换为小写的、可变长度的 ASCII 行,请输入:
- 要将可变长度记录 ASCII 文件 /etc/passwd 转换为 IBM 版本 EBCDIC 中的 132 字节固定长度记录的文件,请输入:
- 要从块大小为 1kB 的磁带中将块复制到块大小为 2kB 的磁带,请输入:
- 要将 dd 命令作为一个过滤器使用,请输入:ls -l | dd conv=ucase该命令将用大写字母显示当前目录的长列表。注: 可以通过更改缺省块大小来提高 dd 命令和 cpio 命令对 9348 磁带单元型号 12 的性能。 要更改块大小,请按以下方式使用 chdev 命令:
chdev -l Device_name -a block_size=32k - 要使用 36 个 512 字节块来有效的实现向 3.5 英寸 1.4MB 软盘的传输,请输入:
该命令将 Filename 参数的值一次一个柱面地写入到软盘设备。 该conv=sync当从磁盘读取时以及当文件大小不是软盘块大小的倍数时是必需的。 如果 dd 命令的输入是一个管道而不是一个文件,不要尝试使用本方法,它将在大多数输入中填充入空格而不只是最后一个块。
- 要将块从块大小为 720 字节的输入文件复制到 1.44MB 大小的软盘当中,请输入:dd if=testfile of=/dev/fd0 bs=720b conv=sync注: 如果输入文件大于输出设备的物理大小,那么 dd 将提示您输入另一个设备。
- 要将块从块大小为 32k 字节的输入文件复制到磁带中,请输入:dd if=inputfile of=/dev/rmt0 bs=32k conv=sync
- 要将数据的块从磁带复制到当前目录中的文件中(块大小设置为 32k),按照下面的方法输入:dd if=/dev/rmt0 of=outfile bs=32k conv=sync
- 要将块从块大小为 720 字节的输入文件复制到 1.44MB 大小的软盘当中,请输入:
dd if=testfile of=/dev/fd0 bs=720b conv=sync span=yes注: 如果输入文件大于输出设备的物理大小,那么 dd 将提示您输入另一个设备。 - 要将块从块大小为 32k 字节的输入文件复制到磁带中,请输入:
dd if=inputfile of=/dev/rmt0 bs=32k conv=sync span=yes - 要将块数据从块大小为 32k 的磁带复制到当前目录中的文件中,请输入:
dd if=dev/rmt0 of=outfile bs=32k conv=sync span=yes
文件
| 项 | 描述 |
|---|---|
| /usr/bin/dd | 包含 dd 命令。 |