分享最新优惠信息
购买主机更加划算

Linux系统之dd命令详解(典型示例说明)

在Linux中,文件是系统核心,当然也包括块设备。通常情况下,我们需要经常使用块设备。而作为Linux用户,可以对块设备执行各种操作,例如,备份磁盘或分区、备份主引导记录 (MBR)、制作可引导USB驱动器等等。

当然,我们可以使用图形工具来执行所有这些操作。然而,大多数Linux用户更喜欢使用dd命令,因为它具有丰富的功能和健壮性。在本文中,小编简单介绍用于转换和复制文件的dd命令与cp命令不同的是,dd命令大多时候与块设备一起使用。

dd命令语法

dd命令最常见的语法如下:

$ dd [if=] [of=]

在上面的语法中:

  • if–表示输入或源文件。
  • of–表示输出或目标文件。
注意:在使用块设备时必须非常谨慎地使用dd命令。一个小错误可能会导致永久性数据丢失。因此强烈建议首先在测试机上尝试这些操作。

1、如何在Linux中复制文件

dd命令的基本用途之一是将文件复制到当前目录中。下面通过创建一个简单的文本文件来理解:

$ echo "this is a sample text file" > file-1.txt

现在,使用dd命令创建它的副本:

$ dd if=file-1.txt of=file-2.txt

在此示例中,if参数表示源文件,而of参数表示目标文件。

使用dd命令将数据附加到文件

它不是与cp命令完全相似吗,那么dd命令有什么特别之处?

其实,dd命令比常规的cp命令强大得多。接下来小编将介绍它的一些高级用例。

2、如何将文本从小写转换为大写

dd命令允许我们执行大小写转换。为此,可以使用conv参数。要理解这一点,首先,显示file-1.txt文件的内容:

$ cat file-1.txt

this is a sample text file

现在,使用以下命令将文件内容转换为大写:

$ dd if=file-1.txt of=upper-case.txt conv=ucase

在此示例中,conv=ucase选项用于将小写字母转换为大写字母。

最后,验证新建文件的内容:

$ cat upper-case.txt

THIS IS A SAMPLE TEXT FILE

3、如何将文本从大写转换为小写

类似的,也可以使用dd命令将大写字母转换为小写字母。可以使用conv=lcase将大写字母转换为小写字母的选项:

$ dd if=upper-case.txt of=lower-case.txt conv=lcase

现在,显示新创建文件的内容并验证转换是否正确完成:

$ cat lower-case.txt

this is a sample text file

4、避免在Linux中覆盖目标文件

默认情况下,dd命令会替换目标文件,这意味着如果目标文件中存在同名文件,它将覆盖该文件。

但是,我们可以使用如下所示的conv=excl选项禁用此默认行为。

$ dd if=file-1.txt of=file-2.txt conv=excl

dd: failed to open ‘file-2.txt’ File exists

在这里,我们可以看到dd命令已中止操作,因为目标位置存在同名文件。

5、使用dd命令在文件中追加数据

有时候,我们希望以附加方式更新文件,这意味着新内容应该添加到目标文件的末尾。这个可以通过组合这两个标志来实现这一点——oflag=appendconv=notrunc。此处,oflag代表输出标志,而notrunc选项用于禁用目标处的截断。

为了理解这一点,首先创建一个新的文本文件:

$ echo "append example demo" > dest.txt

接下来,使用以下命令将内容附加到dest.txt文件:

$ dd if=file-1.txt of=dest.txt oflag=append conv=notrunc

现在,让我们检查dest.txt文件的内容:

$ cat dest.txt 

append example demo
this is a sample text file

6、读取输入文件时跳过字节或字符

我们可以指示dd命令在使用ibs和skip选项读取输入文件时跳过前几个字符。首先,显示file-1.txt文件的内容:

$ cat file-1.txt

this is a sample text file

接下来,使用以下命令跳过前8个字符:

$ dd if=file-1.txt of=file-2.txt ibs=8 skip=1

现在,让我们验证file-2.txt文件的内容:

$ cat file-2.txt

a sample text file

在上面的输出中,可以看到该命令跳过了前8个字符。

7、使用dd命令备份Linux磁盘分区

到目前为止,主要介绍了不需要root访问权限的dd命令的基本示例现在来看看一些高级用例。

和文件操作一样,可以使用dd命令对磁盘分区进行备份。例如,以下命令将/dev/sda1分区备份到partition-bkp.img

$ sudo dd if=/dev/sda1 of=partition-bkp.img

在Linux中使用dd命令备份分区

8、使用dd命令恢复Linux磁盘分区

在前面的示例中,我们将/dev/sda1分区备份到partition-bkp.img文件中。

现在,让使用以下命令将其恢复到/dev/sdb1分区:

$ sudo dd if=partition-bkp.img of=/dev/sdb1

务必注意,目标分区的大小必须等于或大于备份大小。

9.、使用dd命令备份整个Linux硬盘

磁盘驱动器可以有多个分区。因此,随着分区数量的增加,对每个分区进行备份和恢复备份会变得非常耗时。为了克服这个限制,可以像备份分区一样备份整个磁盘驱动器。

因此,可以使用以下命令备份/dev/sda磁盘:

$ sudo dd if=/dev/sda of=disk-bkp.img

使用dd命令备份整个Linux硬盘

上面的命令备份整个磁盘,包括它的分区。

10、使用dd命令恢复Linux硬盘

就像分区一样,我们可以恢复整个磁盘的备份。在前面的示例中,小编将整个磁盘备份到disk-bkp.img文件中。现在,使用相同的方法将其还原到/dev/sdb磁盘上。

首先,从/dev/sdb磁盘中删除所有分区,并验证所有分区都已删除:

$ lsblk /dev/sdb

接下来,使用以下命令恢复/dev/sdb驱动器上的备份:

$ sudo dd if=disk-bkp.img of=/dev/sdb

最后,验证分区是否已在/dev/sdb磁盘上创建:

$ lsblk /dev/sdb

使用dd命令恢复Linux硬盘

11、使用dd命令备份主引导记录

主引导记录 (MBR) 位于引导盘的第一个扇区。它存储有关磁盘分区的信息,这里可以使用dd命令,如下所示:

$ sudo dd if=/dev/sda of=mbr.img bs=512 count=1

上面的命令取回前512个字节,即一个扇区。

使用dd命令备份MBR

需要注意的是,以上命令必须在启动盘上执行。

12、使用dd命令恢复主引导记录

在前面的示例中,小编备份了主引导记录 (MBR)。现在,使用以下命令将其恢复到/dev/sdb磁盘上:

$ sudo dd if=mbr.img of=/dev/sdb

13、使用dd命令复制CD/DVD驱动器内容

与分区和磁盘类似,可以使用dd命令从CD或DVD驱动器中复制内容,这里可以使用下面的命令来做同样的事情:

$ sudo dd if=/dev/cdrom of=alma-minimal.iso

在Linux系统中,CD/DVD驱动器由/dev/cdrom设备表示。因此将其用作源文件。

现在,通过验证其校验和命令来验证内容是否已成功复制:

$ sha256sum alma-minimal.is

使用dd命令复制CD/DVD内容

14、使用dd命令创建可启动USB驱动器

在前面的示例中,创建了Alma Linux的iso映像。现在让我们用它来创建一个可引导的USB驱动器:

$ sudo dd if=alma-minimal.iso of=/dev/sdb

使用dd命令创建可启动USB

需要注意的是,上述命令必须使用正确的U盘执行。

15、如何显示进度条

默认情况下,dd命令在执行复制操作时不显示进度。但是,我们可以使用status选项覆盖此默认行为。

因此,下面使用带有dd命令的status=progress选项来显示进度条:

$ sudo dd if=alma-minimal.iso of=/dev/sdb status=progress

显示dd命令进度

16、测试硬盘的读写速度

  1. time dd if=/dev/zero of=/tmp/test bs=8k count=1000000
  2. time dd if=/tmp/test of=/dev/null bs=8k
  3. time dd if=/tmp/test of=/var/test bs=64k

参数说明

  • time有计时作用,dd用于复制,从if读出,写到of;
  • if=/dev/zero不产生IO,因此可以用来测试纯写速度;
  • of=/dev/null不产生IO,可以用来测试纯读速度;
  • 将/tmp/test拷贝到/var则同时测试了读写速度;
  • bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

总结

在本文中,小编简单介绍讨dd命令的一些实际示例。高级用户可以在日常生活中使用Linux系统时参考这些示例。但是,在执行这些命令时必须非常小心。因为一个小错误就可以覆盖整个磁盘的内容。

未经允许不得转载:惠主机 » Linux系统之dd命令详解(典型示例说明)