如何在 Linux 中学习 dd 命令 [15 个有用示例]
简介:在本高级指南中,我们将讨论 dd 命令的一些实际示例。遵循本指南后,高级用户将能够从命令行界面轻松使用块设备。
在 Linux 中,一切都是文件,块设备也不例外。我们经常需要使用块设备。作为 Linux 用户,我们会对块设备执行各种操作,例如,备份磁盘或分区、备份主引导记录 (MBR)、制作可启动的 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. 读取输入文件时跳过字节或字符
我们可以使用ibs和skip选项指示dd 命令在读取输入文件时跳过前几个字符。
首先,让我们显示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分区备份到partion-bkp.img:
$ sudo dd if=/dev/sda1 of=partition-bkp.img
8.使用 dd 命令恢复 Linux 磁盘分区
在前面的例子中,我们将/dev/sda1分区备份到partion-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
需要注意的是,上述命令必须使用正确的 USB 驱动器执行。
15.如何显示进度条
默认情况下,dd 命令在执行复制操作时不会显示进度。但是,我们可以使用 status 选项覆盖此默认行为。
因此让我们使用dd 命令status=progress
的选项来显示进度条:
$ sudo dd if=alma-minimal.iso of=/dev/sdb status=progress
结论
在本文中,我们讨论了dd 命令的一些实际示例。高级用户可以在日常使用 Linux 系统时参考这些示例。但是,我们在执行这些命令时必须非常小心。因为一个小错误可能会覆盖整个磁盘的内容。
您知道 Linux 中 dd 命令的其他最佳示例吗?请在下面的评论中告诉我们您的观点。