当前位置 博文首页 > astrotycoon:linux dd命令小结

    astrotycoon:linux dd命令小结

    作者:[db:作者] 时间:2021-08-17 09:39

    为什么写本文

    最近使用dd命令比较多,它是linux下功能强大的数据复制工具! 这篇博文对它的使用做个小结,一来加深记忆,二来方便自己以后查阅。

    ?

    dd命令的功能

    dd的主要功能是拷贝文件(默认从标准输入拷贝到标准输出,这意味dd可以在管道中使用)。不过在拷贝文件的过程中,它给用户提供了很多灵活的选项来控制拷贝的过程。提供的选项我归纳有如下三点:

    (1)可以自由控制读取源文件和写目的文件的块大小(block size)。

    (2)可以自由控制从源文件的什么位置开始读以及从什么位置往目的文件写。

    (3)在源文件读取数据后,在往目的文件写之前,提供了很多灵活有用的转换规则(conversion rules)。

    (4)其他赋值功能。例如status用来控制信息输出。

    ?

    常用选项说明

    if=FILE 从FILE中读取数据,而不是默认的标准输入。

    of=FILE 往FILE中写入数据,而不是默认的标准输出。

    ibs=BYTES 读取数据时,一次性读出BYTES大小的块,如果不指定,默认512字节。

    obs=BYTES 写入数据时,一次性写入BYTES大小的块,如果不指定,默认512字节。

    bs=BYTES 统一ibs和obs的值(如果指定了ibs或者obs,则bs会将ibs和obs覆盖掉)。

    cbs=BYTES 没搞懂。

    skip=N 跳过N*ibs字节数再开始读取数据。

    seek=N 跳过N*obs字节数再开始写入数据。

    count=N 总共读取N*ibs字节数的数据,当然写入的数据也是这个大小。

    status=LEVEL LEVEL用来控制dd程序的输出信息的。分别有三个,“none”,“noxfer”和“progress”,默认是“progress”。“none”的意思是不输出任何相关信息,除非出错信息。“noxfer”不会输出最后的统计信息,而“progress”会输出所有信息。

    补充:在上面所有选项的BYTES和N中,我们都可以使用特殊的字符来表示数据大小,常用的有b=512,K=1024,M=1024*1024,G=1024*1024*1024

    ?

    iflag=FLAG[,FLAG]...

    使用iflag来控制读取数据时的行为特征。

    常用的iflags有“count_bytes”,当指定了“count_bytes”后,count=N表示的不再是读取N*ibs大小的数据了,而只是代表N字节的数据。

    指定“skip_bytes”后,skip=N后表示的是跳过的字节数不再是N*ibs大小的数据了,而只是代表跳过N字节的数据。

    ?

    oflag=FLAG[,FLAG]...

    使用oflag来控制写入数据时的行为特征。

    “append”以追加方式写入数据,一般配合conv=notrunc来使用。

    “seek_bytes”的意识和“skip_bytes”一样。

    ?

    conv=CONVERSION[,CONVERSION]...

    conv用来在将数据写入文件时的转换规则。一下列出常用的:

    lcase 用来将大写字母转换成小写字母。

    ucase 用来将小写字母转换成大写字母。

    notrunc 如果目的文件已经存在,那么不要截断文件内容。默认是会截断成0字节大小的。一般配合oflag=append使用,不截断并且以追加方式写入数据。

    noerror 尽管发生错误,也不要停止整个拷贝过程。

    ?

    dd使用案列

    好了,接下来展现几个dd常用的案列

    (1)备份MBR内容

    dd if=/dev/sda of=mbr bs=512 count=1

    (2)获取MBR中的分区表

    dd if=mbr of=dpt bs=1 skip=446 count=64

    (3)往已经格式化过的软盘中写入BootLoader

    dd if=boot.bin of=floopy.flp status=noxfer conv=notrunc

    (4)将文件中所有小写字母转换成大写字母,并输出到标准输出

    dd if=file.txt status=none conv=ucase

    ?

    参考链接:

    《Linux 下的dd命令使用详解(摘录)》

    《dd 复制文件(可格式转换)?dd 复制文件(可格式转换)》

    《dd命令的conv=fsync,oflag=sync/dsync》

    《正确的使用dd进行磁盘读写速度测试》

    ?

    cs