dd命令简介
dd命令简介
很多刚学Linux的朋友,都会听过一个又强又危险的命令:dd。
大家常说它是「Linux数据复制界的手术刀」「磁盘操作瑞士军刀」,既能做普通文件复制,也能做底层磁盘备份、做系统启动盘、清空硬盘。但同时它也被称为删库跑路神器,参数写错就能直接清空硬盘数据。
一、dd命令到底是什么?
1. 全称与核心作用
dd 全称 Disk Dump(磁盘转储),是Linux系统原生自带、底层级的数据操作命令。
简单一句话总结:
cp是复制「文件」,dd是复制「原始数据块」
普通的 cp、mv 命令,是基于文件系统工作的,只能复制完整文件; 而 dd 不看文件、不看格式、不看分区,直接读写硬盘/U盘的原始二进制数据,按「数据块」逐字节搬运。
2. 它能做哪些普通命令做不了的事?
- 完整备份整个硬盘、整个分区(包括隐藏数据、删除残留数据)
- 制作系统镜像、写入U盘启动盘
- 生成指定大小的空文件(测试磁盘速度专用)
- 彻底清空磁盘数据(不可恢复)
- 磁盘对拷、数据裁剪、数据格式转换
二、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. 三条保命规则
- 操作磁盘前,必须先查磁盘:
lsblk确认盘符,绝对不能瞎猜 - 永远不要随便写 of=/dev/sda(sda基本是系统盘)
- 新手练习只操作普通文件,不操作 /dev/sda、/dev/sdb 硬件设备

