dd 命令

用途

转换并复制文件。

语法

dd [ bs=块大小 ][cbs=块大小 ]

[conv= [ ascii |block|ebcdic | ibm | unblock ]

[lcase | ucase ] [iblock ]

[noerror ] [swab ] [sync ]

[oblock ] [notrunc ]][计数 =

InputBlocks ] [ 文件=输入文件 ] [fskip=

SkipEOFs ] [ ibs=输入块大小 ] [如果=

InFile ] [ obs=输出块大小 ] [

OutFile ] [ seek=记录编号 ] [跳过

SkipInputBlocks ][ span= ]

dd [ 选项= ]

描述

dd 命令读取 InFile 参数或者标准输入,进行指定的转换,然后将转换后的结果复制到 OutFile 参数或者标准输出中。 可以指定输入输出块的大小以利用原始的物理 I/O。
注: 术语 是指 dd 命令在一个操作中读取或写入的数据量,不一定与磁盘块大小相同。

指定了大小的地方需要一定字节数。 由 wb k 结尾的数字表示分别与 2、512 或 1024 相乘;由 x *(星号)隔开的两个数字说明是乘积。 count 参数表示待复制的块的数量,而不是字节的数量。

conv=asciiconv=ebcdic 标志关联的字符集映射是互补操作。 这些标志在 ASCII 字符和大多数工作站和键控穿孔机上找到的 EBCDIC 字符子集间进行映射。

如果指定任何 blockunblockasciiebcdicibm 转换,请使用 cbs 参数值。 如果指定了 unblockascii 参数,那么 dd 命令将会执行一个固定长度到可变长度的转换。 否则它将执行从可变长度到固定长度的转换。 cbs 参数决定了该固定长度。

注意: 如果指定的 cbs 参数值小于最小输入块,那么将截断转换后的块。

转换完成后,dd 命令将报告完整和部分输入输出块的数量。

注意:
  1. 通常您只需对输出文件的写许可。 但是,当输出文件不在直接访问设备上并且您使用 seek 标志时,您还需要对该文件的读访问权。
  2. 仅当使用 conv=asciiconv=unblock 标志集进行转换时, dd 命令才会插入换行符; 仅当使用 conv=ebcdicconv=ibmconv=block 标志集进行转换时,才会填充换行符。
  3. 尽可能使用 backuptarcpio 命令 (而不是 dd 命令) 将文件复制到磁带。 这些命令被设计用来和磁带设备一起使用。 有关使用磁带设备的更多信息,请参阅 rmt 特殊文件。
  4. 使用 bsibsobs 标志指定的块大小值必须始终是所使用介质的物理块大小的倍数。
  5. 当指定 conv=sync 标志时, dd 命令用空值填充任何部分输入块。 这样,如果任何读取没有接收到一个完整的数据块(由标志 ibs 指定),那么 dd 命令将在数据流中间插入空值。 从管道中读取时,经常会发生这种情况。
  6. 如果 bs 标志由它自身指定而除了 syncnoerrornotrunc 没有指定其他转换,那么从每个输入块得到的数据将会被作为一个单独的输出块写入;如果读入返回的值小于一个完整的块且没有指定 sync 标志,那么结果输出块将会和输入块的大小相同。 如果不指定 bs 标志或者指定了 syncnoerrornotrunc 之外的其他转换,那么输入将会被处理并收集到完整的输出块中,直到输入结束。

跨设备

如果输入文件比输出设备的物理大小要大,那么 dd 命令可以跨设备工作。
注: 指定块大小 bs 作为设备物理大小的精确倍数时必须注意,因为不正确的块大小将导致数据不一致或重叠。

如果 InFile 或 OutFile 参数是 stdin 或 stdout 时,那么 dd 的跨设备范围将不会出现。

在写的过程中如果输出设备已经写满,那么 dd 命令提示输入下一个设备时,将发生跨范围操作。 从输入设备读入时,如果数据已从设备中完全读取(即使设备没有到达结尾),那么 dd 也将提示下一个设备。 在这种情况下,需要按下‘n’退出。

标志

描述
bs=块大小 指定输入和输出块大小,以取代 ibsobs 标志。 由 bs 标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。
cbs=块大小 指定可变长度到固定长度以及固定长度到可变长度转换的转换块大小,例如 conv=block
count=输入块 仅复制由 InputBlocks 变量指定的输入块的数量。
conv= 转换.... 指定一个或者多个转换选项。 多个转换之间用逗号隔开。 以下清单描述了可能的选项:
ASCII
由 EBCDIC 转换为 ASCII。 此选项与 ebcdicibmblockunblock 选项不兼容。
BLOCK
将变长记录转换到固定长度。 长度由转换块大小 (cbs) 决定。 此选项与 asciiebcdicibmunblock 选项不兼容。
EBCDIC
由 ASCII 转换到标准 EBCDIC。 此选项与 asciiibmblockunblock 选项不兼容。
ibm
将 ASCII 转换为IBM版本的 EBCDIC。 此选项与 asciiebcdicblockunblock 选项不兼容。
iblock oblock
在直接访问设备发生读写错误时使数据损失最小。 如果指定了 "iblock变量,并且在块读取过程中发生错误(块大小为 512 或 "ibs="输入块大小变量指定的大小),"dd命令会尝试以较小的大小单位重新读取数据块。 如果 dd 命令可以确定输入设备的扇区大小,它将每次读取损坏块的一个扇区。 否则它将每次读取 512 字节。 输入块大小 (ibs) 必须是重试大小的整数倍。 此选项包含与读入单个扇区错误有关的数据丢失。 oblock 转换在输出时进行类似工作。
LCase
使得所有的字母字符转换为小写。
无错误
发生错误也不停止进程。
notrunc
不截取输出文件。 相反,将保留不显式写入输出的块。
外壳
使得所有的字母字符转换为大写。
swab(棉签)
交换每对字节。
sync
将每个输入块填充到 ibs 值。
取消阻塞
将固定长度的块转化为可变长度。 长度由转换块大小 (cbs) 决定。 此选项与 asciiebcdicibmblock 选项不兼容。
文件=输入文件 在结束之前复制由 InputFiles 变量值指定的文件数(只对磁带或类似设备输入的有用)。
fskip= 跳过EOF 在开始复制之前跳过由 SkipEOFs 变量指定数量的文件结束符;该 SkipEOFs 变量在多文件磁带中进行定位时很有用。
ibs=输入块大小 指定输入块的大小;缺省值为 512 字节或者一个块。 由 ibs 标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。
如果=InFile 指定输入文件的名称;标准输入是缺省值。
obs=输出块大小 指定输出块的大小;缺省值为 512 字节或者一个块。 由 obs 标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。
的=输出文件 指定输出文件的名称;标准输出是缺省值。
seek=记录编号 在复制之前从输出文件的开始寻找由 RecordNumber 变量指定的记录。
跳过跳过输入块 在开始复制之前跳过指定的 SkipInputBlocks 值的输入块。
氨纶 =yes|no 允许跨设备跨范围 (如果指定)yes并作为缺省值工作 (如果指定为no. 请参阅 跨设备生成,以获取更多信息。

退出状态

本命令返回以下退出值:

描述
重大安全事件数量 输入文件已经成功复制。
> 0 发生错误。

示例

  1. 要将 ASCII 文本文件转化为 EBCDIC,请输入:此命令将转换text.ascii文件到 EBCDIC 表示,将 EBCDIC 版本存储在text.ebcdic中。
    注: 当指定 conv=ebcdic 参数时, dd 命令将 ASCII ^ (抑扬符) 字符转换为未使用的 EBCDIC 字符 (9A 十六进制) ,将 ASCII ~ (波浪符) 转换为 EBCDIC ^ (NOT 符号)。
  2. 要将变长记录的 ASCII 文件 /etc/passwd 转换为一个固定长度为 132 字节的 EBCDIC 纪录,请输入:
  3. 要将每个记录为 132 字节的 EBCDIC 文件转换为小写的、可变长度的 ASCII 行,请输入:
  4. 要将可变长度记录 ASCII 文件 /etc/passwd 转换为 IBM 版本 EBCDIC 中的 132 字节固定长度记录的文件,请输入:
  5. 要从块大小为 1kB 的磁带中将块复制到块大小为 2kB 的磁带,请输入:
  6. 要将 dd 命令作为一个过滤器使用,请输入:
    ls -l | dd  conv=ucase
    该命令将用大写字母显示当前目录的长列表。
    注: 可以通过更改缺省块大小来提高 dd 命令和 cpio 命令对 9348 磁带单元型号 12 的性能。 要更改块大小,请按以下方式使用 chdev 命令:
    chdev -l Device_name -a block_size=32k
  7. 要使用 36 个 512 字节块来有效的实现向 3.5 英寸 1.4MB 软盘的传输,请输入:

    该命令将 Filename 参数的值一次一个柱面地写入到软盘设备。 该conv=sync当从磁盘读取时以及当文件大小不是软盘块大小的倍数时是必需的。 如果 dd 命令的输入是一个管道而不是一个文件,不要尝试使用本方法,它将在大多数输入中填充入空格而不只是最后一个块。

  8. 要将块从块大小为 720 字节的输入文件复制到 1.44MB 大小的软盘当中,请输入:
    dd if=testfile of=/dev/fd0 bs=720b conv=sync
    注: 如果输入文件大于输出设备的物理大小,那么 dd 将提示您输入另一个设备。
  9. 要将块从块大小为 32k 字节的输入文件复制到磁带中,请输入:
    dd if=inputfile of=/dev/rmt0 bs=32k conv=sync
  10. 要将数据的块从磁带复制到当前目录中的文件中(块大小设置为 32k),按照下面的方法输入:
    dd if=/dev/rmt0 of=outfile bs=32k conv=sync
  11. 要将块从块大小为 720 字节的输入文件复制到 1.44MB 大小的软盘当中,请输入:
    dd if=testfile of=/dev/fd0 bs=720b conv=sync span=yes
    注: 如果输入文件大于输出设备的物理大小,那么 dd 将提示您输入另一个设备。
  12. 要将块从块大小为 32k 字节的输入文件复制到磁带中,请输入:
    dd if=inputfile of=/dev/rmt0 bs=32k conv=sync span=yes
  13. 要将块数据从块大小为 32k 的磁带复制到当前目录中的文件中,请输入:
    dd if=dev/rmt0 of=outfile bs=32k conv=sync span=yes

文件

描述
/usr/bin/dd 包含 dd 命令。