如何在 Linux 中使用 dd 命令 [15 个有用的示例]
简介:在本高级指南中,我们将讨论 dd 命令的一些实际示例。遵循本指南后,高级用户将能够从命令行界面舒适地使用块设备。
在 Linux 中,可启动的 USB 驱动器,等等。
当然,我们可以使用图形工具来执行所有这些操作。但是,大多数 Linux 管理员更喜欢使用 dd 命令,因为它具有丰富的功能和稳健性。
在本高级指南中,我们将了解用于转换和复制文件的 dd 命令。然而,与 cp 命令不同的是,它大多数时候与块设备一起使用。
在本指南中,首先,我们将通过基本示例了解 dd 命令 的用法,然后我们将讨论一些高级用例。
让我们开始吧。
dd 命令语法
dd 命令 最常用的语法如下:
$ dd [if=] [of=]
在上面的语法中:
- if – 表示输入或源文件。
- of – 代表输出或目标文件。
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
参数表示目标文件。

是不是和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=append
和 conv=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

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

上面的命令备份整个磁盘,包括它的分区。
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

11.使用dd命令备份主引导记录
主引导记录 (MBR) 位于引导盘的第一个扇区。它存储有关磁盘分区的信息。我们可以使用如下所示的 dd 命令 来取回它:
$ sudo dd if=/dev/sda of=mbr.img bs=512 count=1
上面的命令取回前 512 个字节,即一个扇区。

需要注意的是,以上命令必须在启动盘上执行。
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

14. 使用 dd 命令创建可启动 USB 驱动器
在前面的示例中,我们创建了 Alma Linux 的 iso 映像。现在让我们用它来创建一个可引导的 USB 驱动器:
$ sudo dd if=alma-minimal.iso of=/dev/sdb

需要注意的是,上述命令必须使用正确的 U 盘执行。
15.如何显示进度条
默认情况下,dd 命令 在执行复制操作时不显示进度。但是,我们可以使用 status 选项覆盖此默认行为。
因此,让我们使用 status=progress
选项和 dd 命令 来显示进度条:
$ sudo dd if=alma-minimal.iso of=/dev/sdb status=progress

结论
在本文中,我们讨论了 dd 命令 的一些实际示例。高级用户可以在日常生活中使用 Linux 系统时参考这些示例。但是,我们在执行这些命令时必须非常小心。因为一个小错误就可以覆盖整个磁盘的内容。
您知道 Linux 中 dd 命令的其他最佳示例吗?在下面的评论中让我们知道您的观点。