手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

dd(1M)

名称

dd - 转换和复制文件

用法概要

/usr/bin/dd [operand=value]...

描述

dd 实用程序将指定的输入文件复制到指定的输出并进行可能的转换。缺省情况下使用标准输入和输出。可以指定输入和输出块大小来利用原始物理 I/O。以字节为单位指定大小:数值可以用 kbw 结尾来指定分别乘以 1024、512 或 2。数值还可以使用 x 分隔来指示相乘。

dd 实用程序使用指定的输入块大小一次读取一个输入块。然后,dd 处理实际返回的数据块,该块可能小于请求的块大小。dd 应用已经指定的任何转换并以指定的输出块大小将结果数据写入输出。

仅当指定 asciiasciibunblockebcdicebcdicbibmibmbblock 转换时才使用 cbs。在前两种情况下,cbs 字符将复制到转换缓冲区中,执行指定的所有字符映射,截断结尾空白,并在将行发送到输出之前添加 NEWLINE。在最后三种情况下,将 NEWLINE 之前的字符读取到转换缓冲区中并添加空白来构成 cbs 大小的输出记录。假定 ASCII 文件包含 NEWLINE 字符。如果 cbs 未指定或者为 0ascii asciibebcdicebcdicbibmibmb 选项可以转换字符集,而不更改输入文件的块结构。unblockblock 选项变为简单文件副本。

完成后,dd 报告整个和部分输入及输出块数量。

操作数

支持下列操作数:

if=file

指定输入路径。标准输入是缺省值。

of=file

指定输出路径。标准输出是缺省值。如果未同时指定 seek=expr 转换,将在复制开始之前截断输出文件(除非指定了 conv=notrunc)。如果指定了 seek=expr,但未指定 conv=notrunc,复制的作用是在 dd 查找的输出文件中保留块,但是将不保留输出文件的其他部分。(如果查找的大小加上输入文件的大小小于输出文件的先前大小,复制将缩短输出文件。)

ibs=n

n 字节指定输入块大小(缺省为 512)。

obs=n

n 字节指定输出块大小(缺省为 512)。

bs=n

将输入和输出块大小设置为 n 字节,取代 ibs=obs=。如果仅指定了 syncnoerror notrunc,会将每个输入块作为单个块复制到输出中,而不聚合短块。

cbs=n

以字节为单位按 n 指定 blockunblock 的转换块大小(缺省为 0)。如果省略 cbs= 或者为其提供值 0,使用 blockunblock 将产生未指定的结果。

仅当指定 ASCII 或 EBCDIC 转换时才使用此选项。对于 asciiasciib 操作数,将按照对 unblock 操作数所描述的那样处理输入,但是在删除结尾 SPACE 字符之前,字符将转换为 ASCII。对于 ebcdicebcdicbibmibmb 操作数,将按照对 block 操作数所描述的那样处理输入,但是在添加结尾 SPACE 字符之后,字符将转换为 EBCDIC 或 IBM EBCDIC。

files=n

在终止之前复制和串联 n 个输入文件(仅在输入是磁带或类似设备时才有意义)。

skip=n

在开始复制之前,跳过 n 个输入块(使用指定的输入块大小)。在可查找文件中,实现读取块或者查找这些块。在不可查找文件中,将读取块并且将丢弃数据。

iseek=n

在复制之前,从输入文件的开头查找 n 个块(适用于磁盘文件,其中 skip 会非常慢)。

oseek=n

在复制之前,从输出文件的开头查找 n 个块。

seek=n

在开始之前,从输出文件的开头跳过 n 个块(使用指定的输出块大小)。在非可查找文件中,将读取现有块并使用空字节填充从当前文件结尾到指定偏移的空格(如果有)。在可查找文件中,实现按照对非可查找文件所描述的那样查找指定的偏移或者读取块。

count=n

仅复制 n 个输入块。

conv=value[,value. . . ]

其中 value 是来自以下列表的逗号分隔的符号:

ascii

将 EBCDIC 转换为 ASCII。

asciib

使用 BSD 兼容的字符转换将 EBCDIC 转换为 ASCII。

ebcdic

将 ASCII 转换为 EBCDIC。如果转换固定长度的 ASCII 记录而不使用 NEWLINE,请预先使用 dd conv=unblock 设置管道。

ebcdicb

使用 BSD 兼容的字符转换将 ASCII 转换为 EBCDIC。如果转换固定长度的 ASCII 记录而不使用 NEWLINE,请预先使用 dd conv=unblock 设置管道。

ibm

稍微不同的 ASCII 到 EBCDIC 映射。如果转换固定长度的 ASCII 记录而不使用 NEWLINE,请预先使用 dd conv=unblock 设置管道。

ibmb

使用 BSD 兼容字符转换的稍微不同的 ASCII 到 EBCDIC 映射。如果转换固定长度的 ASCII 记录而不使用 NEWLINE,请预先使用 dd conv=unblock 设置管道。

ascii(或 asciib)、ebcdic(或 ebcdicb)和 ibm(或 ibmb)值是互斥的。

block

将输入视为一系列 NEWLINE 终止或者 EOF 终止的可变长度记录,独立于输入块边界。每个记录将转换为具有由转换块大小指定的固定长度的记录。将从输入文件中删除所有 NEWLINE 字符。如果行比其转换块大小短,将向这些行附加 SPACE 字符来填充块。如果行比转换块大小长,将行截断至适合该尺寸的最大字符数。将报告截断的行数。

unblock

将固定长度记录转换为可变长度。读取等于转换块大小的字节数(如果小于转换块大小,则读取输入中剩余的字节数),删除所有结尾 SPACE 字符并附加 NEWLINE 字符。

blockunblock 值是互斥的。

lcase

将 LC_CTYPE 关键字 tolower 指定的大写字符映射到相应的小写字符。此转换将不修改未指定映射的字符。

ucase

将 LC_CTYPE 关键字 toupper 指定的小写字符映射到相应的大写字符。此转换将不修改未指定映射的字符。

lcaseucase 符号是互斥的。

swab

交换每对输入字节。如果当前输入记录是奇数字节,将忽略输入记录中的最后一个字节。

noerror

发生输入错误时不停止处理。发生输入错误时,将在标准错误上写入诊断消息,后面是当前输入和输出块计数,与在完成时使用的格式相同。如果指定 sync 转换,将使用空字节替换缺少的输入并对其进行正常处理。否则,将在输出中忽略输入块。

notrunc

不截断输出文件。在未通过此 dd 调用明确写入的输出文件中保留块。(另请参见前面的 of=file 操作数。)

sync

通过附加空字节,填充每个输入块以达到 ibs= 缓冲区的大小。(如果还指定 blockunblock,则附加 SPACE 字符,而不是空字节。)

如果将除 conv= 之外的操作数指定多次,将使用最后指定的 operand=value

对于 bs=cbs=ibs=obs= 操作数,应用程序必须提供以字节为单位指定大小的表达式。表达式 expr 可以是:

  1. 正十进制数字

  2. 正十进制数字后跟 k,指定与 1024 相乘

  3. 正十进制数字后跟 b,指定与 512 相乘

  4. 两个或多个正十进制数字(有或没有 kb),由 x 分隔,指定所指示值的乘积。

将在读取任何输入之前处理所有操作数。

用法

有关 dd 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)

示例

示例 1 从一个磁带机复制到另一个磁带机

以下示例将文件从磁带机 0 复制到磁带机 1,使用通用历史设备命名约定。

example% dd if=/dev/rmt/0h  of=/dev/rmt/1h
示例 2 从标准输入中删除前 10 个字节

以下示例从标准输入中删除前 10 个字节:

example% dd ibs=10  skip=1
示例 3 将磁带内容读取到 ASCII 文件中

本示例将 EBCDIC 磁带内容(每块包含十个 80 字节的 EBCDIC 卡映像)读取到 ASCII 文件 x 中:

example% dd if=/dev/tape of=x ibs=800 cbs=80 conv=ascii,lcase
示例 4 使用 conv=sync 向磁带写入

以下示例在向磁带写入时使用 conv=sync

example% tar cvf - . | compress | dd obs=1024k of=/dev/rmt/0 conv=sync

环境变量

有关影响 tee 执行的环境变量 LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH 的说明,请参见 environ(5)

退出状态

将返回以下退出值:

0

已成功复制输入文件。

>0

出现错误。

如果检测到输入错误并且未指定 noerror 转换,会将任何部分输出块写入输出文件,写入诊断消息并停止复制操作。如果检测到某些其他错误,将写入诊断消息并停止复制操作。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

另请参见

cp(1)sed(1)tr(1)attributes(5)environ(5)largefile(5)standards(5)

诊断

f+p records in(out)

读取(写入)的完整和部分块数量

附注

不要使用 dd 在具有不同块大小的文件系统之间复制文件。

使用已分块设备复制文件将导致向文件添加额外空字符来填充最后的块以达到块边界。

dd 使用 ibs=Xobs=Y 操作数从管道读取时,将始终以大小为 Y 的块对输出进行分块。使用 bs=Z 时,输出块将是此时可以从管道读取的任何数据。

使用 dd 将文件复制到磁带设备时,文件大小必须是设备扇区大小的倍数(例如 512 KB)。要将任意大小的文件复制到磁带设备,请使用 tar(1)cpio(1)

对于 SIGINT,dd 在退出之前将状态信息写入标准错误。它对所有其他信号执行标准操作。