Linux dd命令详解

一、dd命令介绍

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

参数注释:

  • if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
  • of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
  • 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=conversion:用指定的参数转换文件。
    • ascii:转换ebcdic为ascii
    • ebcdic:转换ascii为ebcdic
    • ibm:转换ascii为alternate ebcdic
    • block:把每一行转换为长度为cbs,不足部分用空格填充
    • unblock:使每一行的长度都为cbs,不足部分用空格填充
    • lcase:把大写字符转换为小写字符
    • ucase:把小写字符转换为大写字符
    • swab:交换输入的每对字节
    • noerror:出错时不停止
    • notrunc:不截短输出文件
    • sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

二、dd命令使用实例

【例1】拷贝文件(使用dd命令)

➜  test cat data2.txt
line1:This is the header line 1.
line2:This is the first data line 2.
line3:This is the second DATA line 3.
line4:This is the last line 4.
➜ test
dd if=data2.txt of=data3.txt #data3.txt是不存在的,此时会创建文件 0+1 records in 0+1 records out 139 bytes copied, 4.7933e-05 s, 2.9 MB/s
➜ test
cat data3.txt #成功拷贝 line1:This is the header line 1. line2:This is the first data line 2. line3:This is the second DATA line 3. line4:This is the last line 4.

【例2】拷贝文件,并使用gzip工具进行压缩

➜  test dd if=data2.txt | gzip > data4.gz
0+1 records in
0+1 records out
139 bytes copied, 5.451e-05 s, 2.5 MB/s
➜ test ll total 36K
-rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 139 Sep 20 12:23 data2.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 139 Oct 7 11:18 data3.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 101 Oct 7 11:39 data4.gz -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 33 Sep 19 22:34 hello.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 225 Sep 20 17:31 mem.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 109 Sep 20 09:27 osix -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 25 Sep 20 17:46 teefile.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 33 Sep 21 18:08 temp.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 113 Sep 27 10:17 test.txt

【例3】将压缩的备份文件(data4.gz)恢复到指定盘

➜  test gzip -dc data4.gz | dd of=./hdb
0+1 records in
0+1 records out
139 bytes copied, 7.2875e-05 s, 1.9 MB/s
➜ test ll total 40K
-rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 139 Sep 20 12:23 data2.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 139 Oct 7 11:18 data3.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 101 Oct 7 11:39 data4.gz -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 139 Oct 7 11:43 hdb -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 33 Sep 19 22:34 hello.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 225 Sep 20 17:31 mem.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 109 Sep 20 09:27 osix -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 25 Sep 20 17:46 teefile.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 33 Sep 21 18:08 temp.txt -rw-r--r-- 1 baichunyu.bcy baichunyu.bcy 113 Sep 27 10:17 test.txt
➜ test
cat hdb line1:This is the header line 1. line2:This is the first data line 2. line3:This is the second DATA line 3. line4:This is the last line 4.

【例4】拷贝文件,同时指定拷贝的块数和块大小

dd if=/dev/hda of=/root/image count=1 bs=512

count=1指仅拷贝一个块;bs=512指块大小为512个字节。

【例5】将一个很大的视频文件中的第i个字节的值改成0x41(也就是大写字母A的ASCII值)

echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc

 

posted @ 2021-10-07 11:14  白春雨  阅读(941)  评论(0编辑  收藏  举报