dd命令简介

很多刚学Linux的朋友,都会听过一个又强又危险的命令:dd。

大家常说它是「Linux数据复制界的手术刀」「磁盘操作瑞士军刀」,既能做普通文件复制,也能做底层磁盘备份、做系统启动盘、清空硬盘。但同时它也被称为删库跑路神器,参数写错就能直接清空硬盘数据。

一、dd命令到底是什么?

1. 全称与核心作用

dd 全称 Disk Dump(磁盘转储),是Linux系统原生自带、底层级的数据操作命令。
简单一句话总结:

cp是复制「文件」,dd是复制「原始数据块」

普通的 cp、mv 命令,是基于文件系统工作的,只能复制完整文件; 而 dd 不看文件、不看格式、不看分区,直接读写硬盘/U盘的原始二进制数据,按「数据块」逐字节搬运。

2. 它能做哪些普通命令做不了的事?

  1. 完整备份整个硬盘、整个分区(包括隐藏数据、删除残留数据)
  2. 制作系统镜像、写入U盘启动盘
  3. 生成指定大小的空文件(测试磁盘速度专用)
  4. 彻底清空磁盘数据(不可恢复)
  5. 磁盘对拷、数据裁剪、数据格式转换

二、dd核心语法(全网最好懂的解释)

1. 固定语法格式

dd 的语法和所有Linux命令都不一样,不使用短横杠参数,全部是 key=value 格式,这是新手最容易懵的点!
标准万能格式:

1
dd if=输入源 of=输出目标 bs=块大小 count=块数量

2. 四个核心参数

  • if= input file,数据从哪读(源文件/硬盘/分区)
  • of= output file,数据写到哪(目标文件/硬盘/分区)
  • bs= block size,一次读写多大数据(单次块大小,推荐1M、4M)
  • count= 一共读写多少个块

额外两个高频参数:

  • status=progress:实时显示读写进度(新版Linux支持,必加)
  • conv=noerror,sync:出错不停止、数据对齐(备份磁盘专用)

3. 单位规则

dd专用单位,不用记复杂换算,常用就三个:

  • k = 1024字节(1KB)
  • M = 1024K(1MB)
  • G = 1024M(1GB)

示例:bs=4M 就是一次读写4MB数据,速度比默认小块快几十倍。

三、超通俗实战案例

案例1:最简单的文件复制(替代cp)

把a.txt复制成b.txt

1
dd if=a.txt of=b.txt bs=1M status=progress

作用:和cp效果一致,但这是dd最基础用法。

案例2:生成一个指定大小的空测试文件

生成一个 100MB 的空文件 test.iso

1
dd if=/dev/zero of=test.iso bs=1M count=100 status=progress

解释:

  • /dev/zero:Linux专属空设备,源源不断输出0空数据
  • bs=1M count=100:1M×100=100MB

案例3:测试磁盘读写速度

生成1G文件测速,Linux最通用测速命令

1
dd if=/dev/zero of=speed.test bs=4M count=256 status=progress

案例4:备份整个分区为镜像文件

把 /dev/sda1 分区完整备份为 sda1.bak 镜像

1
dd if=/dev/sda1 of=/data/sda1.bak bs=4M status=progress conv=noerror,sync

案例5:镜像文件恢复回磁盘(装系统常用)

把系统镜像写入U盘启动盘

1
dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress

这就是 制作Linux启动盘的核心命令!

案例6:彻底清空磁盘(数据不可恢复)

清空sdb整块硬盘(慎用!)

1
dd if=/dev/zero of=/dev/sdb bs=4M status=progress

原理:用0数据覆盖磁盘所有区域,彻底清除所有数据。

四、dd和cp的本质区别

很多小白疑惑:既然能复制,为什么还要用dd?

命令工作层级能力适用场景
cp文件层级只能复制正常文件日常复制文件夹、文档
dd磁盘数据块层级读写原始数据、无视文件格式磁盘备份、启动盘、底层数据操作

一句话区分: 日常复制用cp,底层磁盘操作必用dd。

五、重中之重:dd最大的风险

dd被称为「自杀命令」,核心原因:

dd没有任何确认提示,覆盖数据瞬间执行,且无法撤销

1. 新手100%翻车错误

of= 写错磁盘名称 比如系统盘是 /dev/sda,你写成 of=/dev/sda,直接清空系统盘,系统瞬间崩溃,数据全无。

2. 三条保命规则

  1. 操作磁盘前,必须先查磁盘:lsblk 确认盘符,绝对不能瞎猜
  2. 永远不要随便写 of=/dev/sda(sda基本是系统盘)
  3. 新手练习只操作普通文件,不操作 /dev/sda、/dev/sdb 硬件设备