天天看點

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,如需轉載請自行聯系原作者

繼續閱讀