dd是Linux上的一个常用的命令。例如:dd if=/1.txt of=/tmp/2.txt
     (其中, if代表input file;of代表output file, 命令的结果就是将根目录下的1.txt的内容拷贝到/tmp目录的的2.txt。)

当然,如果只是用dd做这样的事情显然大材小用了,因为cp可以干同样的事情,而且更简单。

下面就介绍一下dd的“高级”应用:

(一)直接读写闪存
    在嵌入式系统中,经常需要测试系统文件读写的性能,如果想绕过文件系统(文件系统一般都有自己的cache),直接测试闪存驱动的性能,最简单的方法就是dd。
    一般,闪存(NAND)会有几个分区,每个分区对应/dev/mtd*的一个结点:

 

 写操作
 dd if=/dev/urandom of=/dev/mtd1 bs=4096 count=1000
(上面这个命令就是从/dev/urandom中拷贝文件到mtd1这个分区上,每次读写的数据量是4096个字节,拷贝1000次,因此总的数据量就4M.)

 读操作
 dd if=/dev/mtd1 of=/dev/null bs=4096 count=1000
 (上面这个命令就是从分区mtd1中拷贝文件到空设备/dev/null上,每次读写的数据量是4096个字节,拷贝1000次,因此总的数据量就4M.)
 
dd执行完毕后会输出的吞吐率。
 
(二)DirectIO

在有些系统上,没有mtd节点或者不能直接操作存储设别,如果想测试文件读写性能,如何消除文件系统的影响呢?
    dd命令有一组参数oflag和iflag, 控制源文件和目标文件的读写方式为direct IO,即读或写文件时越过操作系统的读写buffer。如果指定oflag=direct,nonblock,写文件时忽略cache的影响;而如果指定iflag=direct,nonblock,读文件时忽略cache的影响
 
    下面就是一组实测数据,从中可以看出cache对最终性能的影响。

flag 中除了可以指定direct和nonblock,还可以指定其他的值,具体参见: http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html
     需要注意的是有些的平台可能只支持一部分flag.
 
(三) 拷贝屏幕

利用dd可以实现截屏,假设屏幕对应的设备节点/dev/fb0,屏幕大小是600×800,屏幕像素的格式是rgb565(每个像素对应两个字节),则命令如下:
            dd if=/dev/fb0 of=/tmp/1.dat bs=600 count=1600

反之,也可以利用dd,直接写屏幕,例如下面的命令将随机渲染屏幕:
            dd if=/dev/urandom of=/dev/fb0 bs=600 count=1600

(四) 串口读写

dd还可以写串口,假设串口节点为/dev/ttyS0, 下面的命令将文件写入串口中:
          dd if=1.txt of=/dev/ttyS0

下面是dd命令的调用流程:

上图中的f_op数据结构是在open一个文件或设备时赋值的,其中的read, write等指向真正的操作该文件的函数。通过这个流程图,我们可以看出该设备或文件的驱动实现了标准的读写函数,就可以利用dd进行读写。

dd命令的高级应用的更多相关文章

  1. 使用dd命令备份Linux分区

    为了备份分区,开始使用的是Remastersys,但最终生成的iso文件仅有几十K,应该是软件bug,且此软件不再更新,后尝试使用Linux Respin,但github一直连接不上. 其实可以尝试使 ...

  2. linux dd命令详解

    Linux-dd命令详解 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 名称: dd 使用权限: 所有使用者dd 这个指令在 ...

  3. 使用dd命令克隆整个系统(转)

    神奇的ghost的原理是什么呢?不就是数据复制吗?Linux下的dd命令不就是最强大的数据复制工具!          既然如此,我为什么要使用g4l这样复杂的工具呢?一条dd命令不就可以帮我实现任意 ...

  4. Linux 下的dd命令使用详解(摘录)

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  5. linux下显示dd命令的进度:

    linux下显示dd命令的进度: dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000 想要查看上面的dd命令的执行进度,可以使用下面几种方法: 比 ...

  6. 【转载】shell中 dd 命令

    转载自:http://blog.chinaunix.net/uid-24958038-id-3416169.html dd if=/dev/zero of=的含义是什么? 一.dd命令的解释 dd:用 ...

  7. 6个关于dd命令备份Linux系统的例子

    数据丢失带来的损失是相当昂贵的.关键数据的丢失会对各种规模的企业带来影响.有几种方法来备份Linux系统,包括rsync的和rsnapshot等.本文提供有关使用dd命令备份Linux系统的6个实例. ...

  8. linux dd命令实用详解

    linux dd命令刻录启动U盘详解 dd命令做usb启动盘十分方便,只须:sudo dd if=xxx.iso of=/dev/sdb bs=1M 用以上命令前必须卸载u盘,sdb是你的u盘,bs= ...

  9. dd命令使用详解

    dd命令使用详解 http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令简介 dd 的主要选项: 指定数字的地方若 ...

随机推荐

  1. idea常用插件

    1.  装逼插件 1.1  activate-power-mode   其设置在菜单栏window——active-power-mode下设置颜色是否显示,窗口是否晃动等等 1.2  Backgrou ...

  2. 五十一 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目

    scrapyd模块是专门用于部署scrapy项目的,可以部署和管理scrapy项目 下载地址:https://github.com/scrapy/scrapyd 建议安装 pip3 install s ...

  3. 百度之星2017初赛A-1006-度度熊的01世界

    度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...

  4. <mvc:default-servlet-handler/>的作用

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  5. 如何限制mongodb数据库内存占用量方法

    多实例下: 可以通过绑定cpu,来防止多实例相互干扰. mongodb的内存也可以限制主,防止全部内存都被一个实例占据. ulimit -s 4096 && ulimit -m 314 ...

  6. 程序员有什么办法能快速梳理java知识点?有这八张图就够了

    一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选.如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1.字符串不变性 下面这张图展示了这段代码做 ...

  7. poj 3517

    题目链接  http://poj.org/problem?id=3517 题意        约瑟夫环  要求最后删掉的那个人是谁: 方法        理解递推公式就行了  考虑这样一组数据  k ...

  8. HDU - 6395:Sequence (分块+矩阵)

    题面太丑了,就不复制了. 题意:F1=A: F2=B: Fn=D*Fn-1+C*Fn-2+P/i:求Fn. 思路:根据P/i的值划分区间,每个区间矩阵求. 带常数的矩阵: #include<bi ...

  9. HDU - 6241 :Color a Tree(不错的二分)

    Bob intends to color the nodes of a tree with a pen. The tree consists of NN nodes. These nodes are ...

  10. 剑指offer-第五章优化时间和空间效率(在字符串中第一次出现切只出现一次的字符)

    题目:在字符串中第一次出现切只出现一次的字符 思路:用HashMap来存放对应的char值和该char出现的次数.做一次变量就可以得到第一个只出现一次的字符. Java代码: import java. ...