1.命令简介 
dd 的主要选项:

指定数字的地方若以下列字符结尾乘以相应的数字:

b=512, c=1, k=1024, w=2, xm=number m

if=file #输入文件名,缺省为标准输入。 
of=file #输出文件名,缺省为标准输出。 
ibs=bytes #一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。 
obs=bytes #一次写 bytes 个字节(即一个块大小为 bytes 个字节)。 
bs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。 
cbs=bytes #一次转换 bytes 个字节,即转换缓冲区大小。 
skip=blocks #从输入文件开头跳过 blocks 个块后再开始复制。 
seek=blocks #从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。 
count=blocks #仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。 
conv=conversion[,conversion...] #用指定的参数转换文件。

转换参数: 
ascii 转换 EBCDIC 为 ASCII。 
ebcdic 转换 ASCII 为 EBCDIC。 
ibm 转换 ASCII 为 alternate EBCDIC. 
block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。 
unblock 使每一行的长度都为 cbs ,不足部分用空格填充。 
lcase 把大写字符转换为小写字符。 
ucase 把小写字符转换为大写字符。 
swab 交换输入的每对字节。 
noerror 出错时不停止。 
notrunc 不截短输出文件。 
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

2.实例分析 
2.1.数据备份与恢复

2.1.1整盘数据备份与恢复

备份: 
dd if=/dev/hdx of=/dev/hdy #将本地的/dev/hdx整盘备份到/dev/hdy 
dd if=/dev/hdx of=/path/to/image #将/dev/hdx全盘数据备份到指定路径的image文件 
dd if=/dev/hdx | gzip >/path/to/image.gz 
#备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

恢复:

dd if=/path/to/image of=/dev/hdx #将备份文件恢复到指定盘 
gzip -dc /path/to/image.gz | dd of=/dev/hdx #将压缩的备份文件恢复到指定盘

2.1.2.利用netcat远程备份 
dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234 #在源主机上执行此命令备份/dev/hda

netcat -l -p 1234 | dd of=/dev/hdc bs=16065b #在目的主机上执行此命令来接收数据并写入/dev/hdc

netcat -l -p 1234 | bzip2 > partition.img 
netcat -l -p 1234 | gzip > partition.img 
#以上两条指令是目的主机指令的变化分别采用bzip2 gzip对数据进行压缩,并将备份文件保存在当前目录。

2.1.3.备份MBR 
备份: dd if=/dev/hdx of=/path/to/image count=1 bs=512 
备份磁盘开始的512Byte大小的MBR信息到指定文件

恢复: dd if=/path/to/image of=/dev/hdx 
将备份的MBR信息写到磁盘开始部分

2.1.4.备份软盘 
dd if=/dev/fd0 of=disk.img count=1 bs=1440k 
将软驱数据备份到当前目录的disk.img文件

2.1.5.拷贝内存资料到硬盘 
dd if=/dev/mem of=/root/mem.bin bs=1024 
将内存里的数据拷贝到root目录下的mem.bin文件

2.1.6.从光盘拷贝iso镜像 
dd if=/dev/cdrom of=/root/cd.iso 
拷贝光盘数据到root文件夹下,并保存为cd.iso文件

2.2.增加Swap分区文件大小 
dd if=/dev/zero of=/swapfile bs=1024 count=262144 #创建一个足够大的文件(此处为256M) 
mkswap /swapfile #把这个文件变成swap文件 
swapon /swapfile #启用这个swap文件 
/swapfile swap swap defaults 0 0 #在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行

2.3.销毁磁盘数据 
dd if=/dev/urandom of=/dev/hda1 
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。

2.4.磁盘管理

2.4.1.得到最恰当的block size 
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file 
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file 
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file 
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file 
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

2.4.2测试硬盘读写速度 
dd if=/root/1Gb.file bs=64k | dd of=/dev/null 
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000 
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

2.4.3.修复硬盘 
dd if=/dev/sda of=/dev/sda 
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

------------------------------------------------------------------------------------------

http://blog.csdn.net/ftafta/article/details/7680578

# dd if=/dev/zero of=50M.file bs=1M count=50

在当前目录下生成一个50M的文件

虚拟块设备文件更通用的名称是硬盘镜像文件(Hard Disk Image),但不是所有的硬盘镜像文件都是虚拟块设备文件,例如,目前Ghost的GHO格式的镜像文件就不能成为虚拟机中的硬盘。

Linux的dd命令,用来生成虚拟块设备文件。既可以用于创建空镜像文件,也可以用于创建物理硬盘的镜像。

# dd if=/dev/hda0 of=/home/oldsong/hda0.image records in4757130+0 records out
将/dev/hda0的内容复制到/home/oldsong/hda0.image文件。
参数if(input file)告诉dd从哪个文件读取数据,参数 of(output file)告诉dd读出的数据写入哪个文件中。
注意,对于dd来说,输入和输出都是文件,dd做的只是文件拷贝工作,这得益于Unix/Linux下面将设备也抽象为特殊的文件。

一般来说设备文件有两种,一种是块设备,一种是字符设备。块设备的特点是可以随机读写(Random Access),比如内存、硬盘等。字符设备的特点是顺序读写(Sequential Access),比如鼠标,键盘,麦克风等。

前面说了如何生成物理硬盘的镜像,如果想生成空镜像文件(本文的主要目的),还需要一个特殊的设备。/dev/zero是Linux提供的一个特殊的字符设备,它的特点是可以永远读该文件,每次读取的结果都是二进制0。下面的命令可以生成一个100M的空镜像文件:

# dd if=/dev/zero of=50M.file bs=1M count=50
bs=1M表示每一次读写1M数据,count=50表示读写 50次,这样就指定了生成文件的大小为50M。bs参数还可以进一步细分为ibs和obs两种,为读操作与写操作分别指定不同的Buffer大小。

这样就生成50M的空镜像文件,问题是,如果要生成1G的虚拟块设备文件,就得占用1G的硬盘空间,而这个镜像文件完全是空的,是不是有一点浪费?好在Linux支持Sparse(稀疏)文件。请看下面的例子

# dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0
# ls -l 1G.img
-rw-r-r- 1 root root 1048576000 Mar 25 15:32 1G.img
# du -m 1G.img
0 1G.img

这里用了一个新的命令seek,表示略过1000个Block不写(这里Block按照bs的定义是1M),count=0表示写入0个Block。用ls(查看文件大小)命令看新生成的文件,大小可以看出是1000M。但是再用du(查看文件占用空间)一看,实际占用硬盘大小只有0M。

因为要用素材生成固定大小的彩信,所以想用一张10K左右的图片加上与之互补的文本文件,两个文件一组拼成标准的10K素材,最后就可以生成出10~100K大小的彩信。

找好图片之后,就用“dd”命令生成与之相应的文本文件。

使用的格式如下:(从sina.html文件读取1024Byte字节生成一个文本文件mm0.txt)

“dd if=/home/sina.html of=/home/mms0.txt bs=1024 count=1”

if的参数是输入文件是新浪的主页,

of的参数是要生成的文件,

bs的参数是每次读入的block大小,这里就设为要生成的文件大小,

count的参数是读取的block个数,这里就设为1。

通过bs和count组合就可以生成指定大小的文件,根据if输入源的不同也内容也可以随机。

二、文件编码转换

这样生成的文本文件通过彩信发到手机后还存在一个问题:

手机提示这个文本文件是不支持的素材,或者直接无法显示内容。

后来发现是文件编码的问题,封装彩信的时候标明文本素材是UTF-8编码,可是用生成的文件好像是GB2312的编码,跟彩信头指定的编码格式不一样,所以手机就无法识别了。

发现问题之后,就开始解决,用“iconv”命令进行文件编码的转换。

使用的格式如下:

“iconv -f gb2312 -t utf-8 mms0.txt > mm0.txt”

也只是简单的应用。

-f后的参数是输入文件编码

-t后的参数是输出文件编码

mms0.txt是输入文件

mm0.txt是输出文件

三、附录

dd命令用法:

dd [选项]
if =输入文件(或设备名称)。
of =输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。
cbs = byte 一次转换bytes字节。
count=blocks 只拷贝输入的blocks块。
conv = ASCII 把EBCDIC码转换为ASCIl码。
conv = ebcdic 把ASCIl码转换为EBCDIC码。
conv = ibm 把ASCIl码转换为alternate EBCDIC码。
conv = block 把变动位转换成固定字符。
conv = ublock 把固定位转换成变动位。
conv = ucase 把字母由小写转换为大写。
conv = lcase 把字母由大写转换为小写。
conv = notrunc 不截短输出文件。
conv = swab 交换每一对输入字节。
conv = noerror 出错时不停止处理。
conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。

iconv命令用法:

iconv [选项...] [文件...]
输入/输出格式规范:
-f, --from-code=原始文本编码
-t, --to-code=输出文本编码
信息:
-l, --list 列举所有已知的字符集
输出控制:
-c 从输出中忽略无效的字符
-o, --output=FILE 输出文件
-s, --silent 关闭警告
--verbose 打印进度信息
-?, --help 给出该系统求助列表
--usage 给出简要的用法信息
-V, --version 打印程序版本号

实用命令dd的更多相关文章

  1. 安装mysql数据库中的技巧、错误排查以及实用命令(持续更新)

    针对解压版本5.7.16(博主使用的这个版本.在某些低版本中部分命令失效) 一.初始化data目录(解压版解压后没有data目录) mysqld --initialize-insecure --use ...

  2. NoSQL之Redis高级实用命令详解--安全和主从复制

    Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim ...

  3. Sysstat性能监控工具包中20个实用命令

    Sysstat性能监控工具包中20个实用命令 学习mpstat, pidstat, iostat和sar等工具,这些工具可以帮组我们找出系统中的问题.这些工具都包含了不同的选项,这意味着你可以根据不同 ...

  4. Windows实用命令

     Windows实用命令   # 统计ESTABLISHED状态下的连接一共有多少个/c是统计行数,/i是忽略大小写 netstat -ano|find /i "established&qu ...

  5. 14: linux实用命令

    1.1 基本实用命令整理 1.查找大文件文件 du -sh ./*|grep G                 # 查看当前目录下个文件大于1G的文件夹 2.查找日志文件中 5xx数量,并进行排序 ...

  6. Linux Tomcat日志查看实用命令

    实用命令: 查看tomcat运行日志 tail -f catalina.out 通过关键字搜索查看日志 cat jeewx-2015-09-20.log | grep 验证码 查看固定时间日志 cat ...

  7. GDB调试实用命令

    个人感觉从windows平台转到linux平台一个不适应的地方就是调试器的使用.因为windows下调试器基本上都依赖快捷键和图像界面来完成操作,就算是windbg这种伪命令行的工具,命令也很简单比较 ...

  8. matlab实用命令

    实用命令 打点测时 在需要测量的开始部分标记: tic 在需要测量的结束部分标记: toc 记录程序从tic到toc运行所花费的时间 Image 翻转 fliplr(x) //左右翻转 flipud( ...

  9. Redis 相关功能和实用命令(五)

    慢查询原因分析 由于 Redis 是单线程的,它内部维护了一个命令队列,所以当有耗时的命令出现时,比如 keys *,后面的命令会被阻塞,通查查出慢查询可以对服务进一步优化. 设置慢查询阀值:默认10 ...

随机推荐

  1. a little about hashtable vs dictionary

    使用Hashtable没有任何优点,因为在.net2.0以后已经被Dictionary<Tkey,TValue>所代替. 他们两者的区别是,根据stackoverflow Dictiona ...

  2. DataTables.js插入数据的两种方式

    一:采用数组的方式插入值 var tableData = []; ; ; $.each(data, function (i, d) { tableData.push([idxTable, d.stcd ...

  3. 淘金客II项目问题日志(AngularJs+BootStrap+Api接口开发)

    问题二: 组件,如果是modal框,那么show的时候,是不会load它的(因为load有时候是需要传送数据的),需要别的组件去主动load它.那么问题来了:哪些框直接show,哪些框不仅需要show ...

  4. Socket 与 WebSocket

    本文转载自:http://zengrong.net/post/2199.htm 1. 概述 选择了 WebSocket 技术之后,不可避免的,我要将它和其他协议以及技术做一下比较.最常见的,就是需要比 ...

  5. 3Sum

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  6. [CareerCup] 17.6 Sort Array 排列数组

    17.6 Given an array of integers, write a method to find indices m and n such that if you sorted elem ...

  7. childNodes 和children

    childNodes 兼容性不是很好,一般用children 元素.childNodes : 只读 属性 子节点列表集合标准下:包含了空白换行和元素类型的节点,也会包含非法嵌套的子节点非标准下:只包含 ...

  8. 在cenOS下安装apache出现-bash: /etc/init.d/httpd: 没有那个文件或目录

    我是在vmware上装的centos7,使用命令yum install httpd httpd-devel 安装完apache后,想要启动apache,执行了/etc/init.d/httpd sta ...

  9. PHP filesystem attack vectors

    http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/ On Apr 07, 2008 I spoke with Kuza55 and ...

  10. bzoj3594: [Scoi2014]方伯伯的玉米田--树状数组优化DP

    题目大意:对于一个序列,可以k次选任意一个区间权值+1,求最长不下降子序列最长能为多少 其实我根本没想到可以用DP做 f[i][j]表示前i棵,操作j次,最长子序列长度 p[x][y]表示操作x次后, ...