天天看点

Linux中的dd命令

一、dd命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

使用方法:dd [OPERAND]

参数注释:

<code>  </code><code>bs=BYTES        </code><code>read</code> <code>and write BYTES bytes at a </code><code>time</code> <code>(also see ibs=,obs=)</code>

<code>  </code><code>cbs=BYTES       convert BYTES bytes at a </code><code>time</code>

<code>  </code><code>conv=CONVS      convert the </code><code>file</code> <code>as per the comma separated symbol list</code>

<code>  </code><code>count=N         copy only N input blocks</code>

<code>  </code><code>ibs=BYTES       </code><code>read</code> <code>BYTES bytes at a </code><code>time</code> <code>(default: 512)</code>

<code>  </code><code>if</code><code>=FILE         </code><code>read</code> <code>from FILE instead of stdin(默认为标准输入)</code>

<code>  </code><code>iflag=FLAGS     </code><code>read</code> <code>as per the comma separated symbol list</code>

<code>  </code><code>obs=BYTES       write BYTES bytes at a </code><code>time</code> <code>(default: 512)</code>

<code>  </code><code>of=FILE         write to FILE instead of stdout(默认为标准输出)</code>

<code>  </code><code>oflag=FLAGS     write as per the comma separated symbol list</code>

<code>  </code><code>seek=BLOCKS     skip BLOCKS obs-sized blocks at start of output</code>

<code>  </code><code>skip=BLOCKS     skip BLOCKS ibs-sized blocks at start of input</code>

<code>  </code><code>status=WHICH    WHICH info to suppress outputting to stderr;</code>

<code>                  </code><code>'noxfer'</code> <code>suppresses transfer stats, </code><code>'none'</code> <code>suppresses all</code>

CONVS的可选参数

<code>  </code><code>ascii     from EBCDIC to ASCII</code>

<code>  </code><code>ebcdic    from ASCII to EBCDIC</code>

<code>  </code><code>ibm       from ASCII to alternate EBCDIC</code>

<code>  </code><code>block     pad newline-terminated records with spaces to cbs-size</code>

<code>  </code><code>unblock   replace trailing spaces </code><code>in</code> <code>cbs-size records with newline</code>

<code>  </code><code>lcase     change upper </code><code>case</code> <code>to lower </code><code>case</code>

<code>  </code><code>nocreat   </code><code>do</code> <code>not create the output </code><code>file</code>

<code>  </code><code>excl      fail </code><code>if</code> <code>the output </code><code>file</code> <code>already exists</code>

<code>  </code><code>notrunc   </code><code>do</code> <code>not truncate the output </code><code>file</code>

<code>  </code><code>ucase     change lower </code><code>case</code> <code>to upper </code><code>case</code>

<code>  </code><code>sparse    try to seek rather than write the output </code><code>for</code> <code>NUL input blocks</code>

<code>  </code><code>swab      swap every pair of input bytes</code>

<code>  </code><code>noerror   </code><code>continue</code> <code>after </code><code>read</code> <code>errors</code>

<code>  </code><code>sync</code>      <code>pad every input block with NULs to ibs-size; when used</code>

<code>            </code><code>with block or unblock, pad with spaces rather than NULs</code>

<code>  </code><code>fdatasync  physically write output </code><code>file</code> <code>data before finishing</code>

<code>  </code><code>fsync     likewise, but also write metadata</code>

FLAGS的可选参数

<code>  </code><code>append    append mode (makes sense only </code><code>for</code> <code>output; conv=notrunc suggested)</code>

<code>  </code><code>direct    use direct I</code><code>/O</code> <code>for</code> <code>data</code>

<code>  </code><code>directory  fail unless a directory</code>

<code>  </code><code>dsync     use synchronized I</code><code>/O</code> <code>for</code> <code>data</code>

<code>  </code><code>sync</code>      <code>likewise, but also </code><code>for</code> <code>metadata</code>

<code>  </code><code>fullblock  accumulate full blocks of input (iflag only)</code>

<code>  </code><code>nonblock  use non-blocking I</code><code>/O</code>

<code>  </code><code>noatime   </code><code>do</code> <code>not update access </code><code>time</code>

<code>  </code><code>noctty    </code><code>do</code> <code>not assign controlling terminal from </code><code>file</code>

<code>  </code><code>nofollow  </code><code>do</code> <code>not follow symlinks</code>

<code>  </code><code>count_bytes  treat </code><code>'count=N'</code> <code>as a byte count (iflag only)</code>

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

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, and so on for T, P, E, Z, Y

二、使用实例

1、将本地的/dev/hdb整盘备份到/dev/hdd

<code>dd</code> <code>if</code><code>=</code><code>/dev/hdb</code> <code>of=</code><code>/dev/hdd</code>

2、将/dev/hdb全盘数据备份到指定路径的image文件

<code>dd</code> <code>if</code><code>=</code><code>/dev/hdb</code> <code>of=</code><code>/root/image</code>

3、备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

<code>dd</code> <code>if</code><code>=</code><code>/dev/hdb</code> <code>| </code><code>gzip</code> <code>&gt; </code><code>/root/image</code><code>.gz</code>

4、把一个文件拆分为3个文件

<code>#文件大小为2.3k</code>

<code>[oracle@rhel6 ~]$ ll db1_db_links.sql </code>

<code>-rw-r--r-- 1 oracle oinstall 2344 Nov 21 10:39 db1_db_links.sql</code>

<code>#把这个文件拆成每个文件1k,bs=1k,count=1,使用skip参数指定在输入文件中跳过多少个bs支读取</code>

<code>[oracle@rhel6 ~]$ </code><code>dd</code> <code>if</code><code>=db1_db_links.sql of=dd01.sql bs=1k count=1</code>

<code>1+0 records </code><code>in</code>

<code>1+0 records out</code>

<code>1024 bytes (1.0 kB) copied, 4.5536e-05 s, 22.5 MB</code><code>/s</code>

<code>[oracle@rhel6 ~]$ </code><code>dd</code> <code>if</code><code>=db1_db_links.sql of=dd02.sql bs=1k count=1 skip=1</code>

<code>1024 bytes (1.0 kB) copied, 0.000146387 s, 7.0 MB</code><code>/s</code>

<code>[oracle@rhel6 ~]$ </code><code>dd</code> <code>if</code><code>=db1_db_links.sql of=dd03.sql bs=1k count=1 skip=2</code>

<code>0+1 records </code><code>in</code>

<code>0+1 records out</code>

<code>296 bytes (296 B) copied, 0.000204216 s, 1.4 MB</code><code>/s</code>

<code>#拆分出的文件</code>

<code>[oracle@rhel6 ~]$ ll </code><code>dd</code><code>*sql</code>

<code>-rw-r--r-- 1 oracle oinstall 1024 May 20 14:58 dd01.sql</code>

<code>-rw-r--r-- 1 oracle oinstall 1024 May 20 14:58 dd02.sql</code>

<code>-rw-r--r-- 1 oracle oinstall  296 May 20 14:58 dd03.sql</code>

5、把拆分出的文件合并为1个

<code>#合并操作,此时用到seek参数,用于指定在输入文件中跳过的bs数</code>

<code>[oracle@rhel6 ~]$ </code><code>dd</code> <code>of=1.sql </code><code>if</code><code>=dd01.sql </code>

<code>2+0 records </code><code>in</code>

<code>2+0 records out</code>

<code>1024 bytes (1.0 kB) copied, 0.000176 s, 5.8 MB</code><code>/s</code>

<code>[oracle@rhel6 ~]$ </code><code>dd</code> <code>of=1.sql </code><code>if</code><code>=dd02.sql bs=1k seek=1</code>

<code>1024 bytes (1.0 kB) copied, 0.000124038 s, 8.3 MB</code><code>/s</code>

<code>[oracle@rhel6 ~]$ </code><code>dd</code> <code>of=1.sql </code><code>if</code><code>=dd03.sql bs=1k seek=2</code>

<code>296 bytes (296 B) copied, 0.00203881 s, 145 kB</code><code>/s</code>

<code>#与拆分前的文件进行校验</code>

<code>[oracle@rhel6 ~]$ </code><code>diff</code> <code>1.sql db1_db_links.sql</code>

<code>[oracle@rhel6 ~]$</code>

6、在输出文件中指定的位置插入数据,而不截断输出文件

<code>需要使用conv=notrunc参数</code>

<code>[oracle@rhel6 ~]$ </code><code>dd</code> <code>if</code><code>=2.sql of=1.sql bs=1k seek=1 count=2 conv=notrunc</code>

<a href="http://blog.csdn.net/jijiagang/article/details/42192049" target="_blank">http://blog.csdn.net/jijiagang/article/details/42192049</a>

      本文转自hbxztc 51CTO博客,原文链接:http://blog.51cto.com/hbxztc/1927774,如需转载请自行联系原作者