dd 命令

| 选择喜欢的代码风格  

dd 命令补充说明:


dd 命令用于复制文件并对原文件的内容进行转换和格式化处理。dd 命令功能很强大的,对于一些比较底层的问题,使用 dd 命令往往可以得到出人意料的效果。用的比较多的还是用 dd 来备份裸设备。但是不推荐,如果需要备份 oracle 裸设备,可以使用 rman 备份,或使用第三方软件备份,使用 dd 的话,管理起来不太方便。

建议在有需要的时候使用 dd 对物理磁盘操作,如果是文件系统的话还是使用 tar backup cpio 等其他命令更加方便。另外,使用 dd 对磁盘操作时,最好使用块设备文件。

dd 命令语法:


dd [OPERAND]...
dd OPTION

dd 命令选项:


if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,默认为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
conv=<关键字>,关键字可以有以下11种:
    conversion:用指定的参数转换文件。
    ascii:转换ebcdic为ascii
    ebcdic:转换ascii为ebcdic
    ibm:转换ascii为alternate ebcdic
    block:把每一行转换为长度为cbs,不足部分用空格填充
    unblock:使每一行的长度都为cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swab:交换输入的每对字节
    noerror:出错时不停止
    notrunc:不截短输出文件
    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
--help:显示帮助信息
--version:显示版本信息

dd 命令选项数值后缀(块大小可以使用的计量单位表):


BLOCKS 和 BYTES 后面可以跟以下乘法后缀:

c = 1
w = 2
b = 512
kB = 1000
K = 1024
MB = 1000 * 1000
M = 1024 * 1024
xM = M
GB = 1000 * 1000 * 1000
G = 1024 * 1024 * 1024

依次为T(TB),P(PB),E(exabyte),Z(zettabytes)和Y(yottabytes)。

dd 命令的坑:


警告

谨慎使用 dd ———— 使用不当或输入错误的值可能会无意间擦除,破坏或覆盖硬盘驱动器上的数据。

dd 命令实例


从计算机中的 CD 创建 ISO 光盘映像。

dd if=/dev/sr0 of=/home/hope/exampleCD.iso bs=2048 conv=noerror,sync

创建 /dev/sda 硬盘驱动器的 img 文件。 要还原该映像,请输入:dd if=disk1.img of=/dev/sda

dd if=/dev/sda of=~/disk1.img

将内容从 if= drive /dev/sda 复制到 of= drive /dev/sdb

dd if=/dev/sda of=/dev/sdb

dd 命令其他示例:

[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s

[root@localhost text]# du -sh sun.txt 
1.1M    sun.txt

该命令创建了一个 1M 大小的文件 sun.txt,其中参数解释:

  • if 代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。
  • of 代表输出文件。如果不指定 of,默认就会将 stdout 作为默认输出。
  • bs 代表字节为单位的块大小。
  • count 代表被复制的块数。
  • /dev/zero 是一个字符设备,会不断返回 0 值字节(\0)。

块大小可以使用的计量单位表如本文上面显示 dd 命令数值后缀换算关系,以上命令可以看出 dd 命令来测试内存操作速度:

1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s

dd 命令,生成随机字符串

我们甚至可以使用 /dev/urandom 设备配合 dd 命令 来获取随机字符串:

[www@CommandNotFound /]$ dd if=/dev/urandom bs=1 count=15|base64 -w 0
15+0 records in
15+0 records out
15 bytes (15 B) copied, 0.000143231 s, 105 kB/s

y38aC+sFYmsejdDQUvs8

dd 命令扩展阅读:




发表评论