- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
Linux之dd命令
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
Linux之dd命令
掌握dd命令:Linux 系统数据管理的终极工具
dd命令是一款功能强大的工具,用于在Linux系统上进行底层数据复制和转换。dd代表“数据复制器”(data duplicator),常被用来创建文件、分区或整个磁盘的精确副本,因此在创建备份、克隆硬盘或将磁盘映像写入物理介质时非常有用。这个命令可以在文件或设备之间复制和转换数据,并提供了控制块大小、跳过或查找数据,甚至应用压缩或字节交换等过滤器的选项。由于它可以在如此基础的层面上工作,使用dd时必须非常谨慎,因为错误的使用可能导致数据丢失或损坏。
接下来,我们将通过一些易于理解的例子来讨论该工具的工作原理。这里提到的所有示例都在centos7上进行了测试。
Linux dd命令简介
简而言之,dd命令允许你复制和转换文件。这个工具提供了一些操作数,你可以使用它们来指定你想要的格式。以下是man手册中描述的命令通用语法:
dd [参数]...
dd [选项]
使用dd命令从ISO文件创建可启动的USB驱动器
在Linux中,dd命令的一个常见用途是从ISO文件创建可启动的USB驱动器。这通常在准备安装操作系统的USB盘时使用。命令如下所示:
sudo dd if=/path/to/your.iso of=/dev/sdX bs=4M status=progress && sync
在这个例子中:
if=/path/to/your.iso 指定了输入文件,即ISO映像。
of=/dev/sdX 指定了输出文件,即USB驱动器(将X替换为你USB设备的对应字母)。
bs=4M 设置块大小为4兆字节,优化了复制过程。
status=progress 提供了复制过程的实时更新。
sync 确保在完成之前所有数据都写入到USB驱动器。
这个命令将创建一个可启动的USB驱动器,可以用于安装ISO文件中包含的操作系统。
常见问题解答:
以下是一些问答式的例子,可以帮助你更好地了解dd命令的使用方法。
Q1. 如何使用dd命令更改输入文本的大小写?
假设你有一些用小写字母写的文本行,现在需要快速将它们转换为大写字母。你可以使用conv命令行选项(其值为ucase)来实现。
例如:
dd conv=ucase
hello!www.landui.com
以下是命令及输入文本的截图。按下组合键Ctrl+d后,dd命令识别到输入结束,随后生成以下输出:
dd conv=ucase
hello!www.landui.com
HELLO!WWW.LINUXMI.COM
0+1
HELLO!WWW.LINUXMI.COM
HELLO!WWW.LINUXMI . COM
0+1
记录了+3 的读入
记录了0+1 的写出
48字节已复制,278.511 s,0.0 kB/s
如你所见,输入的文本已从小写转换为大写。最后三行只是一些操作相关的统计信息。
注意:同样地,你也可以使用lcase选项将大写字母转换为小写。
Q2. 如何从文件读取并写入文件?
在上面的例子中,我们通过标准输入(stdin)输入了文本。不过,你也可以使用输入和输出文件。要指定输入和输出文件的名称,可以使用if和of命令行选项。
例如,如果你想将file1中的文本大小写转换后写入file2,可以这样做:
dd if=file1 of=file2 conv=ucase
cat file1
hello!www.landui.com
cat file2
dd if=file1 of=file2 conv=ucase
记录了+1 的读入
记录了+1 的写出
22字节已复制,0.00130236 S,16.9 kB/s
cat file2
HELLO!WWWLINUXMI . COM
Q3. 如何在读取输入时跳过文本?
如果你希望在读取输入文本时跳过一些初始字节,可以使用skip选项,该选项需要一个数值。如果这个值为’N’,dd会跳过输入开头的N个ibs大小的块。这就引出了ibs选项,它用来指定工具每次读取的字节数(默认是512)。
假设你想跳过输入文件的前6个字节,你需要先将ibs设为6,然后将skip值设为1,这样工具在读取输入文件时就会跳过1个6字节的块。
所以你可以看到,读取file1时”hello!”被跳过了——这就是它没有出现在file2中的原因。
dd if=file1 of=file2 conv=ucase ibs=6 skip=1
记录了2+1 的读入
记录了0+1 的写出
16字节已复制,0.000694868 S,23.0kB/s
cat file2
WWW . LINUXMI . COM
Q4. 如何在输出中交换每对输入字节?
如果你有这样的需求,可以使用dd命令交换每对输入字节。你可以通过为conv选项设置swab值来实现。以下截图可以更清楚地说明这一点:
dd if=file1 of=file2 conv=swab
记录了+1 的读入
记录了+1 的写出
22字节已复制,0.000543071 s,40.5 kB/s
cat file2
ehll!oww.wilunmx.ioc
Q5. 如何让dd命令只在输出文件不存在时才工作?
如果你希望dd命令在输出文件已经存在时不进行任何操作,可以使用conv选项的excl值来实现这一条件。
下面的截图展示了这一用法:
dd if=file1 of=file3 conv=excl
dd:打开‘file3'失败:文件已存在
Q6. 如何确保在追加模式下更新输出文件?
默认情况下,dd会覆盖已有的输出文件。如果你希望dd命令将文本追加到输出文件的末尾,可以使用oflag选项中的append值和conv选项中的notrunc值。
例如:
dd if=file1 of=file3 oflag=append conv=notrunc
以下是该命令的实际操作示例:
cat file3
hello!www.landui.com
dd if=file1 of=file3 oflag=app end conv=notrunc
记录了θ+1 的读入
记录了0+1 的写出
22字节已复制,0.00106453 s,20.7 kB/s
cat file3
hello!www.landui.com
hello!www.landui.com
dd if=file1 of=file3 oflag=app end conv=notrunc
记录了θ+1 的读入
记录了+1 的写出
22字节已复制,0.000571509 s,38.5 kB/s
cat file3
hello!www.landui.com
hello!www.landui.com
hello!www.landui.com
Q7. 如何让dd命令不创建输出文件?
如果你希望dd命令在输出文件不存在时不创建该文件,可以使用conv选项的nocreat值。
例如:
cat file7
cat:file7:没有那个文件或目录
dd if=file1 of=file7 oflag=app end conv=notrunc
记录了+1 的读入
记录了+1 的写出
22字节已复制,0.00112261 s,19.6 kB/s
Q8. 如何控制stderr上的信息级别?
如果你想限制dd命令在stderr上输出的信息量,可以使用status选项。例如,如果你只想显示错误信息,可以将该选项的值设置为none:
dd if=file1 of=file3 status=none
其他可用值包括noxfer和progress。以下是man手册对status选项的说明:
status=LEVEL 打印到stderr的信息级别;
‘none’ 仅显示错误信息,’noxfer’ 抑制最终传输统计信息,’progress’ 显示定期传输统计信息。
这里讨论的这些示例只是dd命令功能的一部分。实际上,你可以使用dd命令创建虚拟文件系统以及对硬盘或系统分区进行备份。想要了解更多关于dd命令的信息,可以查阅它的man手册。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码
TOP